记录微信支付!!!

在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 },

最后,调起微信支付只能在手机上实测,微信开发者工具是测不了的

 

posted @ 2020-04-14 14:23  小子阿瞒  阅读(38)  评论(0)    收藏  举报