泰宁新闻网

微信在线支付,抖音开通微信在线支付

泰宁新闻网 http://www.tainingxinwen.cn 2021-01-14 09:20 出处:网络
微信在线支付,抖音开通微信在线支付,微信小程序使用微信支付功能实现在线订单支付

微信在线支付,抖音开通微信在线支付,微信小程序 使用微信支付功能实现在线订单支付

以前做过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',//充值失败页
 }

 

 

第二步:使用订单号获取支付数据包【含第三步:调用微信支付接口】

cashPay: function(){ // 现金充值
 var that = this
 // var amount = Number(that.data.onPrice); //金额
 var systemOrderNo = that.data.systemOrderNo;//充值订单号
 var cashPayWayId = getApp().globalData.cashPayWayId; //现金支付方式ID
 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, "systemOrderNo": systemOrderNo, "cashPayWayId": cashPayWayId };
 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 + '/pay/cash/cashPay',
 data: data + '@#@' + appid,
 header: header,
 dataType: "json",
 success: function (res) {
 // console.log("现金支付成功", res)
 if (res.data.code == '0000') { //现金支付成功
 var sdkContent = 'prepay_id='+res.data.data.sdkContent;
 var wxappid = getApp().globalData.wxappid; //appid
 var timestamp = Date.parse(new Date());//获取当前时间戳 
 timestamp = timestamp / 1000;
 timestamp = timestamp.toString();
 var nonceStr = utils.getNum(); //随机串
 var signType = 'MD5';
 var paykey = getApp().globalData.paykey;
 var paySign = { "appId": wxappid, "nonceStr": nonceStr, "package": sdkContent, "signType": signType, "timeStamp": timestamp,}
 var objKeySort = utils.objKeySort(paySign); //排序
 paySign = utils.splicingString(objKeySort); //按微信支付验签规则拼接字符串
 paySign = paySign + " key=" + paykey; //尾部添加key值 【商户密钥】
 console.log("sort_ASCII", objKeySort);
 console.log("paySign", paySign);
 var md5 = require('../../utils/js/md5.js'); //md5加密
 var md5Pw = md5.hexMD5(paySign);
 paySign = md5Pw.toUpperCase(); //按微信支付验签规则将签名字母转大写
 console.log(paySign);
 console.log(timestamp, nonceStr, sdkContent, paySign);
 wx.requestPayment(
 'timeStamp': timestamp,
 'nonceStr': nonceStr,
 'package': sdkContent,
 'signType': 'MD5',
 'paySign': paySign,
 'success': function (res) { 
 // console.log(1);
 wx.navigateTo({
 url: '../../pages/rechargeSuccess/rechargeSuccess',//充值成功页
 'fail': function (res) {
 wx.navigateTo({
 url: '../../pages/rechargeFailure/rechargeFailure',//充值失败页
 'complete': function (res) {
 wx.navigateTo({
 url: '../../pages/rechargeFailure/rechargeFailure',//充值失败页

本文标题:微信在线支付,抖音开通微信在线支付
http://www.tainingxinwen.cn/qitaxinxi/601769.html

0

精彩评论

暂无评论...
验证码 换一张
取 消