前言
微信支付流程比支付宝的复杂的多限制也多,尤其是当你有多个公众号多个openid的时候,如何合理规划是非常重要的一环。我们首先需要在微信公众号申请开通微信支付功能,然后在用户进入我们页面时就触发授权(分为静默授权和手动授权),授权成功之后,拿到openid就可以进行创建订单--支付--页面回调。
首先是授权
我们刚进入页面的时候需要调后端接口来判断用户之前是否有授权(openid)操作?如果没有的话就触发微信授权,也就是获取openid的接口没有返回openid,此时后端会返回一个url给我们前端,我们拿到这个url,进行 if (wxUrl.value) window.location.href = wxUrl.value 来触发用户的静态或者手动授权,授权成功之后,微信会跳转回我们页面并携带我们需要的code拼接到url上(用户是没有感知到页面跳转),此时我们只需要在页面做参数判断,如果进入该页面时参数携带了?code=***,我们就触发后端的创建openid的api,拿到openid之后,就可以在后面需要进行用户充值的页面进行充值操作,如果用户不充值也没关系,因为openid是永久的,以后客户想充值就不再需要授权行为。
其次是充值操作(注意在微信里面的h5调其他充值方式:如支付宝会不成功,需要用浏览器,此时需要隐藏其他充值方式)
第一步引入'weixin-js-sdk',最好单独写一个Index.ts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | import wx from 'weixin-js-sdk' export default { // 获取微信支付SDK的签名 getWxPaySign (params:any) { wx.config({ debug: false , appId: params.app_id, timestamp: params.time_stamp, nonceStr: params.nonce_str, signature: params.pay_sign, jsApiList: [ 'chooseWXPay' ] }) }, // 发起微信支付 wxPay (params:any) { return new Promise((resolve, reject) => { // 调用微信支付 wx.chooseWXPay({ timestamp: params.time_stamp, nonceStr: params.nonce_str, package : params. package , signType: params.sign_type, paySign: params.pay_sign, success: (res) => { // 支付成功时返回resolve resolve(res) }, fail: (err) => { // 支付失败时返回reject reject(err) } }) }) } } |
第二步,在用户创建订单的时候拿到返回的参数,并调用wxPay.getWxPaySign(data) 来获取微信支付SDK的签名
第三步,调用wxPay.wxPay
1 2 3 4 5 | wxPay.wxPay(e).then(() => { showToast( '支付成功' ) }). catch (() => { showToast( '支付失败' ) }) |
此时就可以完成充值操作。
补充另一种非官方承认的直接在app内嵌h5唤起的微信充值方式
1 | window.location.href = `weixin: //wap/pay?${encodeURIComponent(url)}` |
这种方式和支付宝的 window.location.href = `alipays://platformapi/startapp?appId=20000067&url=${encodeURIComponent(e.url)}` 非常像,alipays://platformapi/startapp是打开支付宝,而weixin://wap/pay 则是打开微信,但是因为这种方式微信官方不承认有,所以一般情况我们不会用,我查资料是之前微信官方的demo被人查看到这段代码,并成功使用才传出的,但微信官方貌似出于安全角度还是什么的不承认有这种方式。
亲测可以唤起微信支付,但由于官方不承认,为了避免风险,我们公司是不让用的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!