在unicloud中使用uni-pay的前端组件时,如果是在电脑微信端打开h5链接,调用uni-pay前端组件发起支付时,目前会调用jsapi进行支付。
使用jsapi支付需要获取code然后换取openid,需要访问获取code的链接并重定向,而且可能会遇到code被重复使用等问题(好巧不巧我就遇到了)
但是电脑端的微信打开h5链接,其实也是一个pc浏览器的环境,在ua中可以判断,所以其实是可以调用native进行扫码支付的。
native扫码支付不需要获取code和openid,相比jsapi在开发难度上没这么麻烦,而且都是扫码支付,用native和jsapi没啥区别,那就用开发简单的native方式。
但是目前使用uni-pay前端组件在电脑微信端默认使用的jsapi,在组件上指定mode为pc也没用,最后在组件中发现了问题,将使用jssdk判断浏览器类型的方式换成使用modeCom计算属性进行判断,就可以在电脑微信端h5中调用native支付了,其余代码均不需要修改。
//在uni-pay.vue的createOrder方法中,将jsSdk.checkPlatform() === "pc"修改为this.modeCom === "pc"
// 创建支付
async createOrder(data = {}) {
let { options } = this;
Object.assign(options, data);
if (options.provider === "appleiap") {
// ios内购走特殊逻辑
return this._appleiapCreateOrder(options);
}
// #ifdef H5
// 判断如果是pc访问,则强制扫码模式
// if (jsSdk.checkPlatform() === "pc") {
// options.qr_code = true;
// }
if (this.modeCom === "pc") {
options.qr_code = true;
}
// #endif
...... // 其余代码
}
0 个评论
要回复文章请先登录或注册