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 Prototype对象
Jan 07 Javascript
JavaScript 自动完成脚本整理(33个)
Oct 20 Javascript
js 面向对象的技术创建高级 Web 应用程序
Feb 25 Javascript
JS左右无缝滚动(一般方法+面向对象方法)
Aug 17 Javascript
jQuery 获取URL的GET参数值的小例子
Apr 18 Javascript
javascript制作loading动画效果 loading效果
Jan 14 Javascript
jquery+CSS实现的水平布局多级网页菜单效果
Aug 24 Javascript
AngularJs基本特性解析(一)
Jul 21 Javascript
原生js实现简单的链式操作
Jul 04 Javascript
微信小程序实现图片懒加载的示例代码
Dec 13 Javascript
初探Vue3.0 中的一大亮点Proxy的使用
Dec 06 Javascript
javascript的this关键字详解
May 20 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
使用 eAccelerator加速PHP代码的方法
2007/09/30 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
深入Nginx + PHP 缓存详解
2013/07/11 PHP
PHP实现的memcache环形队列类实例
2015/07/28 PHP
php 利用socket发送HTTP请求(GET,POST)
2015/08/24 PHP
PHP与服务器文件系统的简单交互
2016/10/21 PHP
PHP基于phpqrcode类生成二维码的方法详解
2018/03/14 PHP
建立良好体验度的Web注册系统ajax
2007/07/09 Javascript
使用js修改客户端注册表的方法
2013/08/09 Javascript
jQuery 写的简单打字游戏可以提示正确和错误的次数
2014/07/01 Javascript
js上传图片及预览功能实例分析
2015/04/24 Javascript
jQuery实现的给图片点赞+1动画效果(附在线演示及demo源码下载)
2015/12/31 Javascript
从零学习node.js之搭建http服务器(二)
2017/02/21 Javascript
p5.js 毕达哥拉斯树的实现代码
2018/03/23 Javascript
javascript少儿编程关于返回值的函数内容
2018/05/27 Javascript
彻底揭秘keep-alive原理(小结)
2019/05/05 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
VUE实现强制渲染,强制更新
2019/10/29 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
Python中的FTP通信模块ftplib的用法整理
2016/07/08 Python
Python正确重载运算符的方法示例详解
2017/08/27 Python
Python数据持久化shelve模块用法分析
2018/06/29 Python
对python3标准库httpclient的使用详解
2018/12/18 Python
python开发之anaconda以及win7下安装gensim的方法
2019/07/05 Python
使用 Python 在京东上抢口罩的思路详解
2020/02/27 Python
python数据类型强制转换实例详解
2020/06/22 Python
python实现图像高斯金字塔的示例代码
2020/12/11 Python
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
学前教育毕业生自荐信范文
2013/12/24 职场文书
电脑饰品店的创业计划书
2014/01/21 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
环保建议书600字
2014/05/14 职场文书
自我检讨书怎么写
2015/05/07 职场文书
2015年预防青少年违法犯罪工作总结
2015/05/22 职场文书
社区低保工作总结2015
2015/07/23 职场文书
汽车销售合同文本
2019/08/08 职场文书