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 相关文章推荐
jquery和javascript中如何将一元素的内容赋给另一元素
Jan 09 Javascript
Jquery倒计时源码分享
May 16 Javascript
jQuery UI插件自定义confirm确认框的方法
Mar 20 Javascript
快速解决Canvas.toDataURL 图片跨域的问题
May 10 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
Oct 14 Javascript
JavaScript中绑定事件的三种方式及去除绑定
Nov 05 Javascript
基于javascript实现按圆形排列DIV元素(二)
Dec 02 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
Apr 17 Javascript
在Vue中使用highCharts绘制3d饼图的方法
Feb 08 Javascript
Vuex实现数据共享的方法
Dec 20 Javascript
微信小程序实现列表左右滑动
Nov 19 Javascript
vue 实现基础组件的自动化全局注册
Dec 25 Vue.js
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中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
php实现的短网址算法分享
2014/06/20 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
PHP如何通过传引用的思想实现无限分类(代码简单)
2015/10/13 PHP
实例讲解PHP表单处理
2019/02/15 PHP
JavaScript入门教程(2) JS基础知识
2009/01/31 Javascript
学习ExtJS(一) 之基础前提
2009/10/07 Javascript
Javascript解决常见浏览器兼容问题的12种方法
2010/01/04 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
js判断登录与否并确定跳转页面的方法
2015/01/30 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
使用OpenLayers3 添加地图鼠标右键菜单
2015/12/29 Javascript
JS判断元素是否在数组内的实现代码
2016/03/30 Javascript
Vue.js双向绑定实现原理详解
2016/12/22 Javascript
ionic2自定义cordova插件开发以及使用(Android)
2017/06/19 Javascript
Swiper 4.x 使用方法(移动端网站的内容触摸滑动)
2018/05/17 Javascript
Vue页面切换和a链接的本质区别详解
2019/11/12 Javascript
javascript实现简单搜索功能
2020/03/26 Javascript
利用Vue的v-for和v-bind实现列表颜色切换
2020/07/17 Javascript
js面向对象方式实现拖拽效果
2021/03/03 Javascript
[46:00]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#4EG VS Fnatic第一局
2016/03/03 DOTA
Python生成8位随机字符串的方法分析
2017/12/05 Python
树莓派与PC端在局域网内运用python实现即时通讯
2019/06/22 Python
Python OpenCV 使用滑动条来调整函数参数的方法
2019/07/08 Python
windows 10 设定计划任务自动执行 python 脚本的方法
2019/09/11 Python
关于tensorflow softmax函数用法解析
2020/06/30 Python
美国最大的宠物用品零售商:PetSmart
2016/11/14 全球购物
物业管理毕业生个人的求职信
2013/11/30 职场文书
机电专业大学生职业规划书范文
2014/02/25 职场文书
竞选卫生委员演讲稿
2014/04/28 职场文书
市级文明单位申报材料
2014/05/07 职场文书
纪律教育月活动总结
2014/08/26 职场文书
中学生民族团结演讲稿
2014/08/27 职场文书
单位推荐信范文
2015/03/27 职场文书
2016年企业先进员工事迹材料
2016/02/25 职场文书
springboot 启动如何排除某些bean的注入
2021/08/02 Java/Android