经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » JS/JS库/框架 » Vue.js » 查看文章
Vue实现微信支付功能遇到的坑
来源:jb51  时间:2019/6/5 11:40:50  对本文有异议

微信支付功能相比较支付宝支付,有点点繁琐,整理记录下来,以便日后所需

项目用VUE+EL搭建而成,支付用EL的radio来做的

  1. <el-radio v-model="radio" label="weixin" >
  2. <i class="iconfont icon-weixin"></i>
  3. <div class="list">
  4. <h5>微信支付</h5>
  5. <span>推荐安装最新版微信使用</span>
  6. </div>
  7. </el-radio>
  8. <el-radio v-model="radio" label="zhifubao">
  9. <i class="iconfont icon-zhifubao"></i>
  10. <div class="list">
  11. <h5>支付宝</h5>
  12. <span>推荐有支付宝账户的用户使用</span>
  13. </div>
  14. </el-radio>

坑来了。。。。

之前一直是前端请求后台接口,后台调取微信支付接口,但点击微信支付后一直提示跨域、重定向问题

在这里插入图片描述

就是这个坑,问了好多人,都在说是不是没有配置安全域名或接口白名单什么的,但后端真真的已经配置了,后来我们换了一种方法,由前端来提供code 授权成功之后,返回给后端

在mounted()获取code:

  1. this.code = ''
  2. var local = window.location.href // 获取页面url
  3. var appid = ''
  4. this.code = getUrlCode().code // 截取code
  5. if (this.code == null || this.code === ''){
  6. 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`
  7. };
  8. function getUrlCode(){
  9. var url = location.search
  10. // this.winUrl = url
  11. // alert(this.winUrl)
  12. var theRequest = new Object()
  13. if (url.indexOf("?") != -1){
  14. var str = url.substr(1)
  15. var strs = str.split("&")
  16. for(var i = 0; i < strs.length; i ++){
  17. theRequest[strs[i].split("=")[0]]=(strs[i].split("=")[1])
  18. }
  19. }
  20. return theRequest
  21. };

然后再点击按钮中写判断了

  1. methods:{
  2. Compay(){
  3. let radio_data = this.radio
  4. if(radio_data == 'weixin'){
  5. if (this.code) { // 如果没有code,则去请求
  6. this.$axios({
  7. method: "post",
  8. url: "后台接口",
  9. params: {code: this.code} //将code传给后台,如果有其他参数需要传递,请一并传递
  10. }).then((res)=>{
  11. //调取微信支付
  12. var that = this;
  13. function onBridgeReady(){
  14. WeixinJSBridge.invoke("getBrandWCPayRequest",{
  15. appId: res.data.appId, //公众号名称,由商户传入
  16. timeStamp: res.data.timeStamp, //时间戳,自1970年以来的秒数
  17. nonceStr: res.data.nonceStr, //随机串
  18. package: res.data.package,
  19. signType: res.data.signType, //微信签名方式:
  20. paySign: res.data.paySign //微信签名sign
  21. },
  22. function(res){
  23. if (res.err_msg == "get_brand_wcpay_request:ok"){
  24. alert('恭喜您,支付成功!')
  25. }else if(res.err_msg == "get_brand_wcpay_request:cancel"){
  26. alert('支付失败!');
  27. }else if (res.err_msg == "get_brand_wcpay_request:fail"){
  28. alert('调起微信支付失败');
  29. }
  30. }
  31. );
  32. }
  33. onBridgeReady();
  34. //微信支付
  35. })
  36. }
  37. }else if(radio_data == 'zhifubao'){
  38. this.$axios.post('后台接口',data).then((res)=> {
  39. this.html = res.data
  40. var form= res.data;
  41. const div = document.createElement('div') //创建div
  42. div.innerHTML = form//此处form就是后台返回接收到的数据
  43. document.body.appendChild(div)
  44. var queryParam = ''; Array.prototype.slice.call(document.querySelectorAll("input[type=hidden]")).forEach(function (ele) {
  45. queryParam += '&' + ele.name + "=" + encodeURIComponent(ele.value);
  46. });
  47. var gotoUrl = document.querySelector("#alipaysubmit").getAttribute('action') + queryParam;
  48. _AP.pay(gotoUrl); //在微信中用浏览器跳转到支付宝支付
  49. })
  50. }
  51. }
  52. }

总结

以上所述是小编给大家介绍的Vue实现微信支付功能遇到的坑,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对w3xue网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号