uniapp app端调微信支付接口
时间: 2023-08-04 18:09:36 浏览: 206
要在 uniapp 中调用微信支付接口,需要先在微信公众平台申请开通微信支付,并获取到相关的 appid、mch_id、key 等信息。然后按照以下步骤进行操作:
1. 引入 wxpay.js
在 uniapp 项目中的 static 目录下新建 wxpay.js 文件,将以下代码复制进去:
```
export default {
wxpay: function (orderId, successCallback, errorCallback) {
uni.request({
url: 'http://your.domain.com/pay.php', // 将此 URL 替换为你自己的后端支付接口 URL
method: 'POST',
data: {
orderId: orderId
},
success: function (res) {
var payargs = res.data.payargs;
wx.requestPayment({
'timeStamp': payargs.timeStamp,
'nonceStr': payargs.nonceStr,
'package': payargs.package,
'signType': payargs.signType,
'paySign': payargs.paySign,
'success': function (res) {
successCallback(res);
},
'fail': function (res) {
errorCallback(res);
}
})
},
fail: function (res) {
errorCallback(res);
}
})
}
}
```
2. 调用 wxpay.js
在需要调用微信支付的页面中,引入 wxpay.js,并在合适的时机调用 wxpay 方法,例如:
```
import wxpay from '@/static/wxpay.js';
wxpay.wxpay(orderId, function (res) {
// 支付成功回调函数
}, function (res) {
// 支付失败回调函数
});
```
其中,orderId 参数为你的订单号,successCallback 和 errorCallback 分别为支付成功和支付失败的回调函数。
3. 后端支付接口
在后端编写支付接口,将订单信息传递给微信支付接口,并返回支付所需的参数,例如:
```
<?php
// 订单信息
$order = array(
'appid' => 'your_appid',
'mch_id' => 'your_mch_id',
'nonce_str' => uniqid(),
'body' => '商品描述',
'out_trade_no' => $_POST['orderId'],
'total_fee' => '订单总金额,单位为分',
'spbill_create_ip' => $_SERVER['REMOTE_ADDR'],
'notify_url' => '支付结果通知地址',
'trade_type' => 'APP'
);
// 生成签名
ksort($order);
$str = '';
foreach ($order as $key => $value) {
$str .= $key . '=' . $value . '&';
}
$str .= 'key=your_key';
$order['sign'] = strtoupper(md5($str));
// 调用微信支付接口
$url = 'https://api.mch.weixin.qq.com/pay/unifiedorder';
$xml = '<xml>';
foreach ($order as $key => $value) {
$xml .= '<' . $key . '>' . $value . '</' . $key . '>';
}
$xml .= '</xml>';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
$data = curl_exec($ch);
curl_close($ch);
// 解析返回结果
$xml = simplexml_load_string($data);
if ($xml->return_code == 'SUCCESS' && $xml->result_code == 'SUCCESS') {
$payargs = array(
'appId' => 'your_appid',
'timeStamp' => strval(time()),
'nonceStr' => uniqid(),
'package' => 'prepay_id=' . $xml->prepay_id,
'signType' => 'MD5'
);
ksort($payargs);
$str = '';
foreach ($payargs as $key => $value) {
$str .= $key . '=' . $value . '&';
}
$str .= 'key=your_key';
$payargs['paySign'] = strtoupper(md5($str));
echo json_encode(array('payargs' => $payargs));
} else {
echo json_encode(array('error' => '支付失败'));
}
```
注意将其中的 your_appid、your_mch_id、your_key 等参数替换为自己申请的信息。同时,notify_url 参数需要设置为支付结果通知的后端接口地址。
阅读全文