微信小程序 使用微信支付功能实现在线订单支付

以前做过PC页面微信支付,但是这次在小程序 直接调用微信支付功能还是方便很多

先放个微信官方API链接:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_7&index=5

先说说整个下单支付流程的整体思路,

0,准备工作:

一,appId,开发帐号中注册时的appId。

二,sdkContent,后台返回的包含有金额,支付方式等信息的数据包。

三,key值,商户申请微信支付功能时所配置的密钥

准备好后,

1,首先选择下单金额和支付方式【这里默认只有微信支付一个】,拿到金额和支付方式和用户唯一识别码【登陆时就放入微信缓存中】,发送到后端下单接口生成订单号

2,拿到返回的订单号和用户唯一识别码,再到后台现金充值接口拿到sdkContent,也就是一会在下一步微信支付中要用到的package参数,

3,将开发帐号中注册时的appId【注意:区别于后台之间通讯用的appId,两不同也不通用】,时间戳,随机串,签名方式和数据包按微信签名规则拼接成字符串,后面接上key值 【key值 :商户申请微信支付功能时所配置的密钥】

使用MD5方式进行加密,再将成生的加密字符中的字母全部换成大写,然后将加密串与appId,时间戳,随机串,签名方式和数据包调用wx.requestPayment(OBJECT)发起微信支付

如果规则符合,基本就可以支付成功了

注意要点:appid不要弄错,sdkContent别名要换成微信指定的prepay_id,参数名大小写,key值放在尾部,其他参数按序排列,加密完成后字母全部大写

第一步:下单

subRecharge: function (e) { //充值下单 var that = this var amount = Number(that.data.onPrice); //金额 [单位:分] if (amount==\'\'){ that.errorShow(\'请选择充值金额\'); return; } var appid = getApp().globalData.appid; //appid var timestamp = Date.parse(new Date());//获取当前时间戳 timestamp = timestamp / 1000; var version = getApp().globalData.version; //版本号 var sign = getApp().globalData.sign; //签名 var userIdEnc = wx.getStorageSync(\'userIdEnc\'); //获取本地缓存中的userIdEnc //用户唯一识别码 var loginDevice = wx.getStorageSync(\'loginDevice\');//获取本地缓存中的loginDevice var data = { "appId": appid, "timestamp": timestamp, "version": version, "userIdEnc": userIdEnc, "amount": amount }; var url = getApp().globalData.url; //接口路径 var key = getApp().globalData.appkey; //加密k值 var encryption = utils.encryption(key, data) //算出签名 sign = encryption;//赋值给签名 data.sign = sign; data = JSON.stringify(data); // console.log(\'算出签名的data结果:\', data) var header = { \'content-type\': \'application/json\', \'cookie\': "devimark=" + loginDevice + ";" + "usenc=" + userIdEnc, }; wx.request({ //请求用充值下单接口 method: "post", url: url + \'/order/recharge/createAmountOrder\', data: data + \'@#@\' + appid, header: header, dataType: "json", success: function (res) { // console.log("充值成功", res) if (res.data.code == \'0000\') { //下单成功 that.setData({ systemOrderNo: res.data.data.systemOrderNo //返回充值订单编号 }); that.cashPay(); //调用支付方法 } else if (res.data.code == \'2014\'){ //2014 用户没有登录 wx.navigateTo({ url: \'../../pages/logs/logs\', }) }else{ wx.navigateTo({ url: \'../../pages/rechargeFailure/rechargeFailure\',//充值失败页 }) } }, fail: function (res) { console.log("充值失败", res) wx.navigateTo({ url: \'../../pages/rechargeFailure/rechargeFailure\',//充值失败页 }) } }) }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwzzp.html