记录微信支付!!!
在vue中调用微信支付(JSAPI支付)
一、首先第一步在支付页面的上一个页面来获取微信授权,也是获取微信code的方法
1 location.href = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=微信appid&redirect_uri=' + 要跳转页面的地址&response_type=code&scope=snsapi_base&state=STATE&connect_redirect=1#wechat_redirect'
二、第二步就是截取第一步传过来的code(注:微信支付只能从微信开发者工具上进行测试;在浏览器中测试不了),下面这个方法是截取地址栏传过来的字符串方法,方便很多,拿去用就行
1 getQueryVariable(variable) { 2 var query = window.location.search.substring(1); 3 var vars = query.split("&"); 4 for (var i=0;i<vars.length;i++) { 5 var pair = vars[i].split("="); 6 if(pair[0] == variable){return pair[1];} 7 } 8 return(false); 9 },
三、点击支付按钮会调用后台接口生成一个订单ID
1 btnZhiFuClick(){ 2 let self = this; 9 let obj = { // obj里 看后台要什么传什么 3 stuId:self.*****, 4 token:self.*****, 5 courseId:self.*****, 6 unitId:self.*****, 7 currency:self.*****, 8 originalPrice:self.***** 9 } 10 this.$http.post(this.$api.******.******) 11 .then(res=>{ 12 if(res.status == '200'){ 13 self.orderId = res.data //获取到的订单ID保存到全局变量里14 this.weixinCode() //直接调用微信支付15 } 16 }) 17 },
四、取到的code去调用后台接口,换取openID(openid是调用支付的主要凭证)
1 getOpenIdByCode(){ 2 this.$http.get(this.$api.****.****,{ 3 params:{ 4 code:self.getQueryVariable("code") //直接调用第二步方法 获取code 5 } 6 }) 7 .then(res=>{ 8 this.getOpenIdCODE = res.data.data //接收后台传过来的openid,保存到全局变量中,支付时候传 9 }) 10 },
五、发起支付方法,具体看后台需要什么参数,传过去就完了
1 weixinCode(){ 2 let self = this 3 this.$http.get(this.$api.******.******,{ 4 params:{ // params里是后台需要的参数,看你们后台需要什么 5 description: "123123", 6 orderId: self.orderId, //orderId 支付时后台返回来的订单ID 7 orderTotal: uitrmb*100, //微信的支付正常情况下是要乘以100 8 openId: self.getOpenIdCODE, //这里就是上一步获取到的微信 openid 直接拿过来就行11 } 12 }) 13 .then(res=>{ //res里保存着后台给返回来的调取微信支付的凭证 14 function onBridgeReady(){WeixinJSBridge.invoke( 15 'getBrandWCPayRequest', { 16 "appId":"*************",//公众号名称,由商户传入==》公众号平台里的appid,直接复制过来 17 "timeStamp":res.data.timeStamp,//时间戳,自1970年以来的秒数 18 "nonceStr":res.data.nonceStr, //随机串 19 "package":res.data.package, 20 "signType":res.data.signType,//微信签名方式: 21 "paySign":res.data.paySign //微信签名 22 }, 23 function(res){ 24 if(res.err_msg == "get_brand_wcpay_request:ok"){ 25 window.location.href = self.$apiList+"paymentSuccessful" //支付成功跳转页面 27 else if(res.err_msg == "get_brand_wcpay_request:cancel"){ 28 // this.$router.push({path: '/payment'}) //取消支付跳转页面 29 }else if(res.err_msg == "get_brand_wcpay_request:fail"){ 30 window.location.href = self.$apiList+"paytoFailure" //支付失败跳转页面 32 } 33 }); 34 } 35 if (typeof WeixinJSBridge == "undefined"){ //正常写上就行 不用纠结这一段 36 if( document.addEventListener ){ 37 document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false); 38 }else if (document.attachEvent){ 39 document.attachEvent('WeixinJSBridgeReady', onBridgeReady); 40 document.attachEvent('onWeixinJSBridgeReady', onBridgeReady); 41 } 42 }else{ 43 onBridgeReady(); 44 } 45 }) 46 },
最后,调起微信支付只能在手机上实测,微信开发者工具是测不了的

浙公网安备 33010602011771号