Vue实现微信支付功能遇到的坑


Posted in Javascript onJune 05, 2019

微信支付功能相比较支付宝支付,有点点繁琐,整理记录下来,以便日后所需

项目用VUE+EL搭建而成,支付用EL的radio来做的

<el-radio v-model="radio" label="weixin" >
   <i class="iconfont icon-weixin"></i>
   <div class="list">
   <h5>微信支付</h5>
   <span>推荐安装最新版微信使用</span>
   </div>
  </el-radio>
  <el-radio v-model="radio" label="zhifubao">
   <i class="iconfont icon-zhifubao"></i>
   <div class="list">
   <h5>支付宝</h5>
   <span>推荐有支付宝账户的用户使用</span>
   </div>
  </el-radio>

坑来了。。。。

之前一直是前端请求后台接口,后台调取微信支付接口,但点击微信支付后一直提示跨域、重定向问题

Vue实现微信支付功能遇到的坑

就是这个坑,问了好多人,都在说是不是没有配置安全域名或接口白名单什么的,但后端真真的已经配置了,后来我们换了一种方法,由前端来提供code 授权成功之后,返回给后端

在mounted()获取code:

this.code = ''
     var local = window.location.href // 获取页面url
     var appid = '' 
     this.code = getUrlCode().code // 截取code
     if (this.code == null || this.code === ''){
     window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_base&state=123#wechat_redirect`
     };
     
function getUrlCode(){
         var url = location.search
         // this.winUrl = url
         // alert(this.winUrl)
         var theRequest = new Object()
         if (url.indexOf("?") != -1){
          var str = url.substr(1)
           var strs = str.split("&")
           for(var i = 0; i < strs.length; i ++){
            theRequest[strs[i].split("=")[0]]=(strs[i].split("=")[1])
           }
         }
          return theRequest 
         };

然后再点击按钮中写判断了

methods:{
  Compay(){
  
  let radio_data = this.radio
  if(radio_data == 'weixin'){
   if (this.code) { // 如果没有code,则去请求
           
         this.$axios({
          method: "post",
       url: "后台接口",
       params: {code: this.code} //将code传给后台,如果有其他参数需要传递,请一并传递
         }).then((res)=>{
    //调取微信支付
    var that = this;
        function onBridgeReady(){
           WeixinJSBridge.invoke("getBrandWCPayRequest",{
           appId: res.data.appId, //公众号名称,由商户传入
            timeStamp: res.data.timeStamp, //时间戳,自1970年以来的秒数
            nonceStr: res.data.nonceStr, //随机串
            package: res.data.package,
            signType: res.data.signType, //微信签名方式:
            paySign: res.data.paySign //微信签名sign
           },
           function(res){
           if (res.err_msg == "get_brand_wcpay_request:ok"){
            alert('恭喜您,支付成功!')
           }else if(res.err_msg == "get_brand_wcpay_request:cancel"){
            alert('支付失败!');
           }else if (res.err_msg == "get_brand_wcpay_request:fail"){
            alert('调起微信支付失败');
           }
           }
           );
        }
        onBridgeReady();
        //微信支付
         })
         }
  }else if(radio_data == 'zhifubao'){
  this.$axios.post('后台接口',data).then((res)=> {
           this.html = res.data
           var form= res.data;
          const div = document.createElement('div') //创建div
          div.innerHTML = form//此处form就是后台返回接收到的数据
          document.body.appendChild(div)
          var queryParam = '';   Array.prototype.slice.call(document.querySelectorAll("input[type=hidden]")).forEach(function (ele) {
     queryParam += '&' + ele.name + "=" + encodeURIComponent(ele.value);
   });
    var gotoUrl = document.querySelector("#alipaysubmit").getAttribute('action') + queryParam;
   _AP.pay(gotoUrl); //在微信中用浏览器跳转到支付宝支付
  })
  }
  
  }
 }

总结

以上所述是小编给大家介绍的Vue实现微信支付功能遇到的坑,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
Javascript技术技巧大全(五)
Jan 22 Javascript
超棒的javascript页面顶部卷动广告效果
Dec 01 Javascript
简单的代码实现jquery定时器
Jan 03 Javascript
jquery+ajax实现跨域请求的方法
Jan 20 Javascript
JSON字符串和对象之间的转换详解
May 26 Javascript
js实现微信分享代码
Oct 11 Javascript
辨析JavaScript中的Undefined类型与null类型
May 26 Javascript
js控制台输出的方法(详解)
Nov 26 Javascript
jQuery遮罩层实例讲解
May 11 jQuery
关于javascript作用域的常见面试题分享
Jun 18 Javascript
Vue.js划分组件的方法
Oct 29 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
May 04 jQuery
JS实现数组删除指定元素功能示例
Jun 05 #Javascript
vue实现PC端录音功能的实例代码
Jun 05 #Javascript
vue-cli3添加模式配置多环境变量的方法
Jun 05 #Javascript
Vue+axios+WebApi+NPOI导出Excel文件实例方法
Jun 05 #Javascript
js实现随机8位验证码
Jul 24 #Javascript
Vue中全局变量的定义和使用
Jun 05 #Javascript
详解express使用vue-router的history踩坑
Jun 05 #Javascript
You might like
详解PHP中的mb_detect_encoding函数使用方法
2015/08/18 PHP
nginx下安装php7+php5
2016/07/31 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
jQuery学习笔记之jQuery选择器的使用
2010/12/22 Javascript
JavaScript中的this实例分析
2011/04/28 Javascript
js中的getAttribute方法使用示例
2014/08/01 Javascript
Vue.js Ajax动态参数与列表显示实现方法
2016/10/20 Javascript
Angular.js中$resource高大上的数据交互详解
2017/07/30 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
表格展示利器 Bootstrap Table实例代码
2017/09/06 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
Angularjs 根据一个select的值去设置另一个select的值方法
2018/08/13 Javascript
浅谈vue方法内的方法使用this的问题
2018/09/15 Javascript
在vue-cli 3中给stylus、sass样式传入共享的全局变量
2019/08/12 Javascript
[01:09]2014DOTA2国际邀请赛 TI4西雅图DOTA2 中国美女coser加油助威
2014/07/20 DOTA
[01:15:12]DOTA2上海特级锦标赛主赛事日 - 1 败者组第一轮#4Newbee VS CDEC
2016/03/03 DOTA
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
使用python BeautifulSoup库抓取58手机维修信息
2013/11/21 Python
给Python的Django框架下搭建的BLOG添加RSS功能的教程
2015/04/08 Python
在Python中使用sort()方法进行排序的简单教程
2015/05/21 Python
浅谈Python采集网页时正则表达式匹配换行符的问题
2018/12/20 Python
对python生成业务报表的实例详解
2019/02/03 Python
python之信息加密题目详解
2019/06/26 Python
Tensorflow获取张量Tensor的具体维数实例
2020/01/19 Python
PyCharm刷新项目(文件)目录的实现
2020/02/14 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
python cookie反爬处理的实现
2020/11/01 Python
python Timer 类使用介绍
2020/12/28 Python
用纯css3和html制作泡沫对话框实现代码
2013/03/21 HTML / CSS
银行会计业务的个人自我评价
2013/11/02 职场文书
网站开发实习生的自我评价
2013/12/11 职场文书
机械电子工程专业求职信
2014/06/22 职场文书
党的群众路线教育实践活动对照检查材料(教师)
2014/09/24 职场文书
领导干部“四风”查摆问题个人整改措施
2014/10/28 职场文书
2015年销售人员工作总结
2015/04/07 职场文书