uni-app unipay微信H5支付不支持V3
uni-app unipay微信H5支付不支持V3
操作步骤:
- 在手机浏览器中运行uni-pay示例程序,打开收银台,选择微信支付,会跳转到一个/undefined路径
预期结果:
- 正常支付
实际结果:
- 会跳转到一个/undefined路径
bug描述:
- 使用微信支付V3版本,PC浏览器扫码支付正常,手浏览器会跳转undefined,原因如下:
- 文件
uni_modules/uni-pay/components/uni-pay/uni-pay.vue
,方法orderPayment
中,res.order.codeUrl
和res.order.mwebUrl
都是undefined
,导致window.location.href
到一个undefined
地址。见图1和图4。 - 通过排查发现,在文件
uni_modules/uni-pay/uniCloud/cloudfunctions/uni-pay-co/service/pay.js
的createOrder
方法中,通过getOrderInfo
获取的order
对象中,只有一个H5Url
属性。见图2。 - 继续深入发现,在
getOrderInfo
方法中(uni_modules/uni-pay/uniCloud/cloudfunctions/common/uni-pay/index.js
),order
对象是从微信接口(/v3/pay/transactions/H5
)中获取的,返回的就只有H5Url
。见图3。 - 看了下微信支付的V3文档,微信的接口返回的是一个
h5_url
,为啥在getOrderInfo
方法中又会被转成H5Url
也是奇奇怪怪的。而mweb_url
参数应该是V2版本的吧 https://pay.weixin.qq.com/docs/merchant/apis/h5-payment/direct-jsons/h5-prepay.html
- 文件
图片
2 回复
已修复, 更新到最新版即可
在处理uni-app中unipay微信H5支付不支持V3版本的问题时,我们通常需要确保使用的是兼容当前支付接口的版本。虽然uni-app和unipay的官方文档可能已经提供了相关指引,但由于直接支持V3版本的功能可能尚未全面铺开,我们可以通过模拟V2版本的支付流程来解决兼容性问题。以下是一个简化的V2版本微信H5支付的实现代码示例,供参考:
// 引入uni-app和unipay相关模块
const uni = require('uni-app-lib');
const unipay = require('unipay-sdk');
// 配置微信H5支付参数
const wechatH5Config = {
appId: 'your-wechat-app-id', // 微信开放平台应用ID
mchId: 'your-mch-id', // 商户号
key: 'your-api-key', // API密钥
notifyUrl: 'https://your-notify-url.com/callback', // 回调地址
spbillCreateIp: '127.0.0.1' // 终端IP
};
// 生成支付订单信息
const orderData = {
outTradeNo: 'order-' + new Date().getTime(), // 商户订单号
body: 'Test Order', // 商品描述
totalFee: 1, // 支付金额(单位:分)
openid: 'user-openid' // 用户openid(对于H5支付,这里通常从前端获取)
};
// 调用unipay生成支付参数
unipay.wxH5Pay(wechatH5Config, orderData).then(payParams => {
// 获取到支付参数后,通常需要将mwebUrl跳转到前端页面
uni.redirectTo({
url: payParams.mwebUrl
});
}).catch(error => {
console.error('支付参数生成失败:', error);
});
// 回调处理(在服务器端实现)
// 收到微信支付异步通知后,验证签名并处理订单状态
function handleNotify(req, res) {
const notifyData = req.body;
// 验证签名逻辑(略)
// 更新订单状态逻辑(略)
res.send('success'); // 微信要求返回字符串"success"以确认收到通知
}
// 注意:回调处理部分需要在服务器端实现,并且确保服务器能够访问外网以验证微信签名。
请注意,上述代码是一个简化的示例,用于展示如何在uni-app中使用unipay进行微信H5支付的基本流程。在实际应用中,你需要处理更多的细节,比如错误处理、日志记录、安全性验证等。此外,随着微信支付的更新迭代,建议定期检查并更新支付接口的使用,以确保兼容性和安全性。