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和jQuery的片段分享
Aug 23 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
Dec 05 Javascript
js创建数组的简单方法
Jul 27 Javascript
JavaScript浮点数及运算精度调整详解
Oct 21 Javascript
修改ligerui 默认确认按钮的方法
Dec 27 Javascript
使用 jQuery 实现表单验证功能
Jul 05 jQuery
微信小程序之页面拦截器的示例代码
Sep 07 Javascript
vue router demo详解
Oct 13 Javascript
angular4笔记系列之内置指令小结
Nov 09 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
Dec 11 Javascript
微信小程序分享功能onShareAppMessage(options)用法分析
Apr 24 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 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中__get()和__set()的用法实例详解
2013/06/04 PHP
php对二维数组进行排序的简单实例
2013/12/19 PHP
php中文验证码实现示例分享
2014/01/12 PHP
浅谈ThinkPHP中initialize和construct的区别
2017/04/01 PHP
PHP7扩展开发教程之Hello World实现方法示例
2017/08/03 PHP
PHP ADODB生成下拉列表框功能示例
2018/05/29 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
JQuery动画和停止动画实例代码
2013/03/01 Javascript
intro.js 页面引导简单用法 分享
2013/08/06 Javascript
js history对象简单实现返回和前进
2013/10/30 Javascript
jscript读写二进制文件的方法
2015/04/22 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
谈谈PHP中相对路径的问题与绝对路径的使用
2016/08/16 Javascript
基于express中路由规则及获取请求参数的方法
2018/03/12 Javascript
vue--vuex详解
2019/04/15 Javascript
[01:00:14]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第三场
2018/04/10 DOTA
介绍Python中几个常用的类方法
2015/04/08 Python
详解Python中for循环是如何工作的
2017/06/30 Python
Python制作豆瓣图片的爬虫
2017/12/28 Python
python自动截取需要区域,进行图像识别的方法
2018/05/17 Python
python 将md5转为16字节的方法
2018/05/29 Python
PyCharm GUI界面开发和exe文件生成的实现
2020/03/04 Python
解决json中ensure_ascii=False的问题
2020/04/03 Python
Gucci法国官方网站:意大利奢侈品牌
2018/07/25 全球购物
adidas瑞典官方网站:购买阿迪达斯鞋子和运动服
2019/12/11 全球购物
兼职学生的自我评价
2013/11/24 职场文书
毕业生个人求职信范例分享
2013/12/17 职场文书
高三励志标语
2014/06/05 职场文书
刘公岛导游词
2015/02/05 职场文书
2015年医院创卫工作总结
2015/04/22 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
Python使用scapy模块发包收包
2021/05/07 Python
mysql对于模糊查询like的一些汇总
2021/05/09 MySQL
一篇带你入门Java垃圾回收器
2021/06/16 Java/Android
JavaScript中的宏任务和微任务详情
2021/11/27 Javascript