在 QQ 小程序中使用 qq.requestWxPayment
唤起微信支付(iOS 设备)
背景
按照官方文档写在 安卓
打开是没有问题的。可以正常支付。IOS会报错。走的是fail
。
由于现在小程序无法唤出浏览器等其他应用。只能开接口能力。web-view方案直接否定。。
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
url | string | 是 | 微信支付跳转链接,使用 服务端-统一下单请求 获取 | |
referer | string | 是 | 商户申请 H5 支付时提交的授权域名(例如 http://q.qq.com ),参考 微信H5支付文档、 申请规则说明 | |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
qq.requestWxPayment({
url: "",
referer: "",
success(res) { },
fail(res) { }
})
解决方案
在 iOS 设备上,qq.requestWxPayment
需要正确传递 referer
和 Referer
参数,以确保微信支付能够识别请求来源并正常唤起。
在 QQ 小程序中,使用 qq.requestWxPayment
接口唤起微信支付时,发现 Android 设备可以正常唤起,但 iOS 设备无法唤起。经过调试,发现关键在于正确传递 referer
和 Referer
参数。
关键点
-
referer
和Referer
参数:- 这两个参数的作用是告诉微信支付请求的来源(即 QQ 小程序的域名或 URL)。
- 在 iOS 设备上,微信支付需要验证请求的来源,因此必须正确传递这两个参数。
- 注意:
referer
和Referer
都需要传递,可能是因为微信支付在不同环境下对参数的大小写敏感。
QQ文档是没有大写的Referer
的,多传这个参数便可解决问题。。。
-
url
参数:url
是微信支付的 H5 链接,通常由后端生成。redirect_url
是支付完成后跳转的 URL,通常是小程序的某个页面。
-
回调函数:
success
:支付成功后的逻辑。fail
:支付失败后的逻辑。complete
:支付完成后的逻辑(无论成功或失败)。
官方例子改成
qq.requestWxPayment({
url: "",
referer: "",
Referer: "",
success(res) { },
fail(res) { }
})
代码示例
以下是一个完整的代码示例,展示了如何在 QQ 小程序中使用 qq.requestWxPayment
唤起微信支付,并处理支付结果。
qq.requestWxPayment({
url: `${h5_url}`,
referer: HTTP_REQUEST_URL, // 来源域名
Referer: HTTP_REQUEST_URL, // 来源域名(大小写敏感)
success: () => {
},
fail: (err) => {
// 支付失败后的逻辑
console.log('调起支付失败的原因', err);
},
complete: (res) => {
// 支付完成后的逻辑(无论成功或失败)
}
});
参数说明
h5_url
:微信支付的 H5 链接,由后端生成。HTTP_REQUEST_URL
:QQ 小程序的域名或 URL。
注意事项
-
referer
和Referer
参数:- 确保它们的值与微信支付配置中的来源域名一致。
- 确保它们的大小写正确。
-
url
参数:- 确保
url
是有效的微信支付 H5 链接。 - 确保
redirect_url
是有效的 URL,并且已正确编码。
- 确保
-
调试与排查:
- 在
fail
和complete
回调中打印日志,检查是否有错误信息。 - 如果问题无法解决,可以联系微信支付的技术支持团队,提供详细的日志和复现步骤。
- 在
总结
通过正确传递 referer
和 Referer
参数,可以在 iOS 设备上成功唤起微信支付。本文提供了完整的代码示例和注意事项,帮助开发者快速实现 QQ 小程序中的微信支付功能。