随笔 - 73,  文章 - 0,  评论 - 6,  阅读 - 91285

前言

  微信支付流程比支付宝的复杂的多限制也多,尤其是当你有多个公众号多个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被人查看到这段代码,并成功使用才传出的,但微信官方貌似出于安全角度还是什么的不承认有这种方式。

  亲测可以唤起微信支付,但由于官方不承认,为了避免风险,我们公司是不让用的。

 

posted on   Tom最好的朋友是Jerry  阅读(228)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
< 2025年3月 >
23 24 25 26 27 28 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 1 2 3 4 5

点击右上角即可分享
微信分享提示