概述
最近这段时间接了一个蓝牙车位锁的项目;项目中包括APP和微信小程序;其中涉及在线支付功能,这里记录下微信小程序在线支付完功能
小程序在线支付流程
1.微信小程序登陆微信获取code
调用接口wx.login(OBJECT)
// 登录 wx.login({ success: res => { wx.setStorageSync('logoRes', res) // 发送 res.code 到后台换取 openId, sessionKey, unionId } })
程序启动进行登录,把登录获取的信息缓存
2.微信小程序把第一步获取的code提交给第三方服务器
第三方接口通过微信小程序提交的code到微信服务器交换session_key 和 openid 这是微信获取 session_key 和 openid 的接口 https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
3.小程序调用第三方程序下单接口
第三方程序接口做一些处理后调用微信服务器统一下单接口https://api.mch.weixin.qq.com/pay/unifiedorder 并且返回 prepay_id
第三方服务器通过把第二部和第三步的接口获取到prepay_id
4.小程序通过第三步获取到prepay_id开始支付
小程序调用接口wx.requestPayment(OBJECT)
util.httpClient.httpGet("/parklock/manager/android/ble2/pay/xcx-pay-apply-by-code!loadopenid.do", { lockerId: 20001, code: value.code }, function (data) {
//ASCII码从小到大排序(字典序) var signA = "appId=" + appid + "&nonceStr=" + data.nonce_str + "&package=prepay_id=" + data.prepayId + "&signType=MD5&timeStamp=" + data.timeStamp;
//拼接上商户key var signB = signA + "&key=" + "uber7390fjeiafn84JFIEJFRE883FAKf";
//排序后进行md5 var sign = MD5Util.hexMD5(signB).toUpperCase(); wx.requestPayment({ 'timeStamp': data.timeStamp+"", 'nonceStr': data.nonce_str, 'package': 'prepay_id=' + data.prepayId, 'signType': data.signType, 'paySign': sign, 'success': function (res) { console.log("支付成功") wx.navigateTo({ url: '../unlock/unlock?code=789', }) }, 'fail': function (res) { console.log("支付失败",res) } }) })
欢迎关注微信公众号【千里授渔】免费获取教学视频。
QQ507545336