前端 VUE 微信支付 JSAPI

06月28日 收藏 0 评论 0 前端开发

前端 VUE 微信支付 JSAPI

文章声明:转载来源:https://blog.csdn.net/codingLeader/article/details/124092235

在公众号之中的产品H5页面,在购买时需要直接唤起微信支付,完成投保、核保流程。
今天分享自己在唤起微信支付中的一些体会,希望可以帮助到大家。

准备工作

· 引入JSSDK文件(sdk文件)
· 初始化微信环境(wx.config,wx.ready)
· 唤起微信支付的方法(wx.chooseWXPay)

支付流程
1、在产品投保页面准备微信支付所需参数(index.vue)
支付成功或失败后跳转页面使用window.location.href,vue自己的路由跳转是不起作用的(#号的原因)

let This = this;
this.visible.loading = true;
saveProposoal({'投保参数'}).then(res => {
this.visible.loading = false;
if(res.code == 200){
let proposalNo = res.data.proposalNo;
//初始化配置
pay({
//支付参数
data : {openid : openId,proposalNo:proposalNo},
//支付成功回调函数,跳转支付成功页
success(res){
window.location.href = '支付成功页面'
},
//支付取消回调函数,跳转支付失败页
cancel(res){
window.location.href = '支付失败页面'
},
fail(res){
This.$toast('支付失败');
}
})
}else{
this.$toast(res.message);
}
})

2、Pay方法
需后台小伙伴提供签名接口获取公众号的唯一标识appID,ticket。
前端拿到这些数据自己 去生成签名数据。用来初始化微信环境

后台小伙伴提供的支付接口(微信支付接口),返回支付所需要的参数

· timestamp,支付签名时间戳
· nonceStr,支付签名随机串
· package,统一支付接口返回的prepay_id参数值
· signType,签名方式
· paySign,支付签名

//微信支付
export function pay(opts){
let {data,signData,success,cancel,fail} = opts;
let config = null;
//调用后台接口生成微信签名数据
签名接口xx(signData).then(res =>{
if(res.code == 200){
//处理后端返回的签名数据
config = wxSign({ticket:res.content.ticket,appId:res.content.appid})
//调用微信支付接口,获取支付参数
return 微信支付接口xxx(data)
}
}).then(res =>{
if(res.code == 200){
//调用微信支付
wxPay({
config : config,
data : res.content,
success(res){
success && success(res)
},
cancel(res){
cancel && cancel(res)
},
fail(res){
fail && fail(res)
}
})
}
})
}

3、wxSign()
通过签名接口获取到的数据,进一步处理。将这些处理后的参数用来初始化微信支付API
wx.config()接口注入权限验证配置并申请所需开放标签

export default function(data){
var urlN = window.location.href.split('#')[0];
var timestampn = new Date().getTime().toString();
var timestamp = timestampn.substring(0, 10); //生成签名的时间戳
var nonceStr = Math.random().toString(36).substr(2); //生成签名的随机串
var con = `jsapi_ticket=${data.ticket}&noncestr=${nonceStr}×tamp=${timestamp}&url=${urlN}`
var signature = hex_sha1(con); //引自sha1.js
//签名处理后参数
return {
appId : data.appId,
timestamp : timestamp,
nonceStr : nonceStr,
signature : signature
}
}

4、wxPay()

//微信支付
export default function(opts){
let {config,data,success,cancel,fail} = opts;
wx.config({
debug: false, //开启调试模式
appId: config.appId, //公众号的唯一标识
timestamp: config.timestamp, //生成签名的时间戳
nonceStr: config.nonceStr, //生成签名的随机串
signature: config.signature, //签名
jsApiList: [ 'chooseWXPay'] //需要使用的JS接口列表
//openTagList : ['wx-open-launch-weapp']
});
wx.ready(function () {
wx.chooseWXPay({
timestamp: data.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符
nonceStr: data.nonceStr, // 支付签名随机串,不长于 32 位
package: data['package_'], // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)
signType: data.signType, // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'
paySign: data.paySign, // 支付签名
success: function (res) {
success && success(res)
},
cancel: function (res) {
cancel && cancel(res)
},
fail: function (res) {
fail && fail(res)
}
});
})
}

到这里,整个支付前端就完成了。

C 0条回复 评论

帖子还没人回复快来抢沙发