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 相关文章推荐
js格式化时间和js格式化时间戳示例
Feb 10 Javascript
js字符串截取函数slice、substring和substr的比较
May 17 Javascript
检查表单元素的值是否为空的实例代码
Jun 16 Javascript
JavaScript实现按键精灵的原理分析
Feb 21 Javascript
JS实现静态页面搜索并高亮显示功能完整示例
Sep 19 Javascript
微信小程序实现点击文字页面跳转功能【附源码下载】
Dec 12 Javascript
在vue中使用公共过滤器filter的方法
Jun 26 Javascript
JavaScript简单实现关键字文本搜索高亮显示功能示例
Jul 25 Javascript
解决vue数组中对象属性变化页面不渲染问题
Aug 09 Javascript
JavaScript实现的级联算法示例【省市二级联动功能】
Dec 25 Javascript
浅谈JavaScript中this的指向更改
Jul 28 Javascript
快速解决element的autofocus失效问题
Sep 08 Javascript
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结合表单实现一些简单功能的例子
2011/06/04 PHP
使用array mutisort 实现按某字段对数据排序
2013/06/18 PHP
Centos6.5和Centos7 php环境搭建方法
2016/05/27 PHP
php无限级分类实现方法分析
2016/10/19 PHP
php实现通过soap调用.Net的WebService asmx文件
2017/02/27 PHP
php 一维数组的循环遍历实现代码
2017/04/10 PHP
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
javascript常用方法、属性集合及NodeList 和 HTMLCollection 的浏览器差异
2010/12/25 Javascript
ExtJs Excel导出并下载IIS服务器端遇到的问题
2011/09/16 Javascript
简洁Ajax函数处理(示例代码)
2013/11/15 Javascript
JavaScript的各种常见函数定义方法
2014/09/16 Javascript
全面解析Bootstrap表单使用方法(表单按钮)
2015/11/24 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
Angular实现图片裁剪工具ngImgCrop实践
2017/08/17 Javascript
angularjs利用directive实现移动端自定义软键盘的示例
2017/09/20 Javascript
用Vue写一个分页器的示例代码
2018/04/22 Javascript
理顺8个版本vue的区别(小结)
2018/09/17 Javascript
JavaScript创建对象方式总结【工厂模式、构造函数模式、原型模式等】
2018/12/19 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
Python使用wxPython实现计算器
2018/01/30 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
numpy基础教程之np.linalg
2019/02/12 Python
详解python tkinter教程-事件绑定
2019/03/28 Python
python机器人运动范围问题的解答
2019/04/29 Python
python+tkinter实现学生管理系统
2019/08/20 Python
Python使用tkinter模块实现推箱子游戏
2019/10/08 Python
详解Python3 中的字符串格式化语法
2020/01/15 Python
Python request post上传文件常见要点
2020/11/20 Python
信息专业本科生个人的自我评价
2013/10/28 职场文书
社区志愿者心得体会
2014/01/03 职场文书
大学生社会实践评语
2014/04/25 职场文书
给女朋友的道歉短信
2015/05/12 职场文书
总结高并发下Nginx性能如何优化
2021/11/01 Servers
Web应用开发TypeScript使用详解
2022/05/25 Javascript