在vue中获取微信支付code及code被占用问题的解决方法


Posted in Javascript onApril 16, 2019

这个地方坑比较多,查看网上并没有详细的文档,新手一般写到这里很痛苦。这里我只介绍一下我解决的方案,虽然它不是最好的,但是可行的方案;

总体分两步
1)跳到微信支付链接,它会自动拼接上code
2)获取本网址,截取code;

在vue中哪里获取code?

在路由钩子函数beforeEach获取。(如果想了解beforeEach的用法,请关注我下一篇博客)。

在vue中获取微信支付code及code被占用问题的解决方法

我们去请求微信网址"https://open.weixin.qq.com/connect/oauth2/authorize?appid=" +appid +"&redirect_uri=" + spa +
"&response_type=code&scope=snsapi_base&state=123#wechat_redirect";

它会自动带上code ,我们在去截取到code,把code 传给后端,后端便可以拿到opinid.

如果是微信登录,我们会去请求后台验证接口验证是否登录,拿到登录返回信息,保存本地或者vuex;

如果是微信支付,我们同样去请求后台接口,此时code可能提示被占用,我们需要在beforeEach 中重新获取一遍code,官方文档说code 五分钟变化一次;

在vue中获取微信支付code及code被占用问题的解决方法

如果没有if条件的判断,它会反复跳正在登录中(包括登录的code获取也是,谁知道请留言告知一下),window.localStorage.getItem('realCode') 是定义在支付页面。

这样拿到code整个流程就通了。但是我们去获取code后,有时会用手机返回键,它又会跳到微信获取code的那个网址,这样就很烦了,只好在mounted钩子函数监听物理返回键,跳到指定的页面;虽然问题暂时解决了,但是体验感觉不是很好,有种闪屏的感觉;

其中遇到的坑有:支付一闪而过

1)原因找了很多,像目录是否配置正确,如:http://element.eleme.io/ 需写成http://element.eleme.io/#/zh-CN/component/

2) 签名错误 这个没办法了。是后台的方法写错了,排查了好久;

还有一个坑就是请求网址的转义问题:

redirect_uri 回调地址中需要把特殊符号转义掉,如果实在不知道可以百度在线转义,把网址复制进去就可以了;

redirect_uri的前缀http://不能省略

response_type=code (请求带回来的code)

scope=snsapi_base snsapi_base只能获取access_token和openID (静默授权); snsapi_userinfo可以获取更详细的用户资料,

比如头像、昵称、性别等(需要点击授权)

state=123 (随便填)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript中的相等与不等运算
Apr 25 Javascript
jQuery的实现原理的模拟代码 -3 事件处理
Aug 03 Javascript
Jquery常用技巧收集整理篇
Nov 14 Javascript
javascript自动生成包含数字与字符的随机字符串
Feb 09 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
Oct 27 Javascript
JavaScript中校验银行卡号的实现代码
Dec 19 Javascript
Vue.js实现简单动态数据处理
Feb 13 Javascript
ES6新特性一: let和const命令详解
Apr 20 Javascript
学习JS中的DOM节点以及操作
Apr 30 Javascript
详解Node.js 中使用 ECDSA 签名遇到的坑
Nov 26 Javascript
解决vue中axios设置超时(超过5分钟)没反应的问题
Sep 04 Javascript
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
JavaScript实现选项卡效果的分析及步骤
Apr 16 #Javascript
Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题
Apr 16 #Javascript
详解滑动穿透(锁body)终极探索
Apr 16 #Javascript
一些手写JavaScript常用的函数汇总
Apr 16 #Javascript
浏览器事件循环与vue nextTicket的实现
Apr 16 #Javascript
理理Vue细节(推荐)
Apr 16 #Javascript
ES6知识点整理之Proxy的应用实例详解
Apr 16 #Javascript
You might like
Oracle Faq(Oracle的版本)
2006/10/09 PHP
PHP register_shutdown_function()函数的使用示例
2015/06/23 PHP
Laravel中Trait的用法实例详解
2016/03/16 PHP
PHP解压ZIP文件到指定文件夹的方法
2016/11/17 PHP
简述php环境搭建与配置
2016/12/05 PHP
PHP使用GD库制作验证码的方法(点击验证码或看不清会刷新验证码)
2017/08/15 PHP
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
预加载css或javascript的js代码
2010/04/23 Javascript
javascript循环变量注册dom事件 之强大的闭包
2010/09/08 Javascript
JavaScript每天定时更换皮肤样式的方法
2015/07/01 Javascript
10个JavaScript中易犯小错误
2016/02/14 Javascript
jQuery实现鼠标选文字发新浪微博的方法
2016/04/02 Javascript
简单实现bootstrap选项卡效果
2017/02/08 Javascript
jQuery实现动态给table赋值的方法示例
2017/07/04 jQuery
初探js和简单隐藏效果的实例
2017/11/23 Javascript
微信小程序如何获取openid及用户信息
2018/01/26 Javascript
浅谈Webpack 是如何加载模块的
2018/05/24 Javascript
Vue官方推荐AJAX组件axios.js使用方法详解与API
2018/10/09 Javascript
百度小程序自定义通用toast组件
2019/07/17 Javascript
layui layer select 选择被遮挡的解决方法
2019/09/21 Javascript
在Layui中操作数据表格,给指定单元格添加事件示例
2019/10/26 Javascript
[02:31]2014DOTA2国际邀请赛2009专访:干爹表现出乎意料 看好DK杀回决赛
2014/07/20 DOTA
SQLite3中文编码 Python的实现
2017/01/11 Python
django开发教程之利用缓存文件进行页面缓存的方法
2017/11/10 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
2018/02/21 Python
Python即时网络爬虫项目启动说明详解
2018/02/23 Python
python3解析库pyquery的深入讲解
2018/06/26 Python
Python使用字典的嵌套功能详解
2019/02/27 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
OpenCV+face++实现实时人脸识别解锁功能
2019/08/28 Python
pytorch 实现打印模型的参数值
2019/12/30 Python
keras model.fit 解决validation_spilt=num 的问题
2020/06/19 Python
Coccinelle官网:意大利的著名皮具品牌
2019/05/15 全球购物
毕业生求职简历的自我评价
2013/10/07 职场文书
职工趣味运动会方案
2014/02/10 职场文书
Python Django ORM连表正反操作技巧
2021/06/13 Python