微信小程序支付完整流程(前端)

1. 获取openid(当前用户真实id)

openid为当前用户真实id,无法直接用任何接口获取,需要先调用微信login接口登录,获取登录凭证code,再通过此code(code登录凭证,5分钟有效),向微信服务器换取用户openid。
原生小程序登录

wx.login({
	success(res) {
		if(res.code) {
			// code:登录凭证,有效期5分钟
			// 使用code可以换取openid,unionid,session_key等核心信息
		} else {
			console.log('登陆失败', res.msg)
		}
	}
})

2.发送请求调用微信官方接口,用code凭证换取用户openid

原生小程序: wx.request uniapp:uni.request

wx.request({
  url: `https://api.weixin.qq.com/sns/jscode2session`, //微信官方接口
  data: {
    appid: '小程序appId',
    secret: '小程序密钥,在小程序appId下一行,放一块在',
    js_code: '刚才获取的code', 
    grant_type: 'authorization_code' //固定值
  },
  success: (res) => {
    //获取openid:用户真实唯一id
    console.log(res.data.openid);
  }
})

3.调用公司后端接口,获取支付核心数据

// 调用后端接口
uni.request({
  url: '你们公司的后端接口地址,获取支付核心数据',
  method: 'POST',
  data: { 接口需要什么参数就传给接口,包含扣款金额,订单id等 },
  success(obj) {
    console.log(obj)
  }
})

此接口必须返回以下6个核心数据,都是由后台计算生成。

	"appId": "xxxx",

    "nonceStr": "xxxx",

    "packageValue": "prepay_id=xxxxx",

    "paySign": "xxxxxx",

    "signType": "MD5",

    "timeStamp": "xxxxxx"

4. 调用微信官方支付接口,弹出支付界面

uni.request({
  url: '你们公司的后端接口地址,获取支付核心数据',
  method: 'POST',
  data: { 接口需要什么参数就传给接口,包含扣款金额,订单id等 },
  success(obj) {
    
    //调用微信官方支付接口弹出付款界面,输入密码扣款
    wx.requestPayment({
      timeStamp: obj.xxxx.timeStamp,  //后端返回的时间戳
      nonceStr:  obj.xxxx.nonceStr,   //后端返回的随机字符串
      package:  obj.xxxx.packageValue, //后端返回的prepay_id
      signType: 'MD5', //后端签名算法,根据后端来,后端MD5这里即为MD5
      paySign:  obj.xxxx.paySign,  //后端返回的签名
      success (res) {
        console.log('用户支付扣款成功', res)
      },
      fail (res) { 
        console.log('用户支付扣款失败', res)
      }
     })
 
  }
})

调用后,弹出付款界面

5.总结

  1. 前端调用uni.login/wx.login调用微信接口,获取code,code相当于临时身份证
  2. 前端调公司后台获取openid的接口,获取openid
  3. 前端调公司后台预支付接口,传递openid、商品id、商品单价、商品数量,获取那5个参数。【时间戳timeStamp,随机字符串nonceStr,预支付id package,签名算法signType,签名paySign】
  4. 前端调用uni/wx.requestPayment调用微信支付方法,传递5个参数,获取支付结果(成功或失败)
    在这里插入图片描述
    原文链接:https://blog.csdn.net/m0_74429971/article/details/127471923
  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值