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 相关文章推荐
小议Function.apply()之二------利用Apply的参数数组化来提高 JavaScript程序性能
Nov 30 Javascript
JavaScript Title、alt提示(Tips)实现源码解读
Dec 12 Javascript
jQuery中wrapAll()方法用法实例
Jan 16 Javascript
JS实现文档加载完成后执行代码
Jul 09 Javascript
JavaScript事件代理和委托详解
Apr 08 Javascript
jquery.Jcrop结合JAVA后台实现图片裁剪上传实例
Nov 05 Javascript
简单谈谈Javascript函数中的arguments
Feb 09 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
Nov 07 Javascript
浅谈Node.js 子进程与应用场景
Jan 24 Javascript
react-native android状态栏的实现
Jun 15 Javascript
vue 本地服务不能被外部IP访问的完美解决方法
Oct 29 Javascript
vue 数据遍历筛选 过滤 排序的应用操作
Nov 17 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在DOS命令行下却无法链接MySQL的技术笔记
2010/12/29 PHP
php程序总是提示验证码输入有误解决方案
2015/01/07 PHP
深入php内核之php in array
2015/11/10 PHP
PHP各种异常和错误的拦截方法及发生致命错误时进行报警
2016/01/19 PHP
JS操作XML中DTD介绍及使用方法分析
2019/07/04 PHP
浅谈Javascript Base64 加密解密
2014/12/28 Javascript
js实现卡片式项目管理界面UI设计效果
2015/12/08 Javascript
Nodejs学习item【入门手上】
2016/05/05 NodeJs
js html css实现复选框全选与反选
2016/10/09 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
Vue生命周期示例详解
2017/04/12 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
Vue中util的工具函数实例详解
2019/07/08 Javascript
[28:57]EG vs VGJ.T 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/16 DOTA
Python编程之多态用法实例详解
2015/05/19 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
python实现五子棋小游戏
2020/03/25 Python
python程序 线程队列queue使用方法解析
2019/09/23 Python
150行python代码实现贪吃蛇游戏
2020/04/24 Python
python解释器安装教程的方法步骤
2020/07/02 Python
Python 使用生成器代替线程的方法
2020/08/04 Python
python 将html转换为pdf的几种方法
2020/12/29 Python
pytest fixtures装饰器的使用和如何控制用例的执行顺序
2021/01/28 Python
css3图片边框border-image的用法
2017/06/30 HTML / CSS
“型”走纽约上东区:Sam Edelman
2017/04/02 全球购物
如何判断计算机可能已经中马
2013/03/22 面试题
班委竞选演讲稿
2014/04/28 职场文书
大学生求职计划书
2014/04/30 职场文书
擅自离岗检讨书
2014/09/12 职场文书
个人委托书范本汇总
2014/10/01 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
销售工作决心书
2015/02/04 职场文书
格林童话读书笔记
2015/06/30 职场文书
创业计划书之便利店
2019/09/05 职场文书
5个实用的JavaScript新特性
2022/06/16 Javascript