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 相关文章推荐
Get中文乱码IE浏览器Get中文乱码解决方案
Dec 26 Javascript
Javascript中的匿名函数与封装介绍
Mar 15 Javascript
javascript实现的固定位置悬浮窗口实例
Apr 30 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
May 09 Javascript
Jquery数字上下滚动动态切换插件
Aug 08 Javascript
bootstrap组件之按钮式下拉菜单小结
Jan 19 Javascript
JS实现键值对遍历json数组功能示例
May 30 Javascript
深入理解JavaScript的值传递和引用传递
Oct 24 Javascript
vue中更改数组中属性,在页面中不生效的解决方法
Oct 30 Javascript
JavaScript canvas基于数组生成柱状图代码实例
Mar 06 Javascript
原生js实现碰撞检测
Mar 12 Javascript
javascript设计模式 ? 建造者模式原理与应用实例分析
Apr 10 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 最大运行时间 max_execution_time修改方法
2010/03/08 PHP
php垃圾代码优化操作代码
2010/08/05 PHP
PHP批量删除、清除UTF-8文件BOM头的代码实例
2014/04/14 PHP
php中stdClass的用法分析
2015/02/27 PHP
php获取汉字拼音首字母的方法
2015/10/21 PHP
Using the TextRange Object
2006/10/14 Javascript
原生javascript兼容性测试实例
2013/07/01 Javascript
javascript文件中引用依赖的js文件的方法
2014/03/17 Javascript
JavaScript中的正则表达式简明总结
2014/04/04 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
基于jQuery实现的图片切换焦点图整理
2014/12/07 Javascript
Javascript 对cookie操作详解及实例
2016/12/29 Javascript
微信小程序 图片加载(本地,网路)实例详解
2017/03/10 Javascript
Angular 2父子组件数据传递之@Input和@Output详解(下)
2017/07/05 Javascript
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
vue-cli2.x项目优化之引入本地静态库文件的方法
2018/06/19 Javascript
Vue自定义指令封装节流函数的方法示例
2018/07/09 Javascript
react-navigation之动态修改title的内容
2018/09/26 Javascript
JS二级菜单不同实现方法分析【4种方法】
2018/12/21 Javascript
vue使用swiper实现中间大两边小的轮播图效果
2019/11/24 Javascript
Vue CLI3移动端适配(px2rem或postcss-plugin-px2rem)
2020/04/27 Javascript
Python标准库之collections包的使用教程
2017/04/27 Python
Python IDLE清空窗口的实例
2018/06/25 Python
python实现换位加密算法的示例
2018/10/14 Python
Python自动发送邮件的方法实例总结
2018/12/08 Python
python导入模块交叉引用的方法
2019/01/19 Python
在pyqt5中QLineEdit里面的内容回车发送的实例
2019/06/21 Python
python 插入日期数据到Oracle实例
2020/03/02 Python
使用Python发现隐藏的wifi
2020/03/04 Python
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
市场营销专业毕业生自荐信
2013/11/02 职场文书
信息专业学生学习的自我评价
2014/02/17 职场文书
关于学习的演讲稿
2014/05/10 职场文书
素质教育标语
2014/06/27 职场文书
《伯牙绝弦》教学反思
2016/02/16 职场文书
MySQL高速缓存启动方法及参数详解(query_cache_size)
2021/07/01 MySQL