在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 相关文章推荐
直接生成打开窗口代码,不必下载
May 14 Javascript
js 图片等比例缩放代码
May 13 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
May 08 Javascript
js类定义函数时用prototype与不用的区别示例介绍
Jun 10 Javascript
jquery队列函数用法实例
Dec 16 Javascript
JavaScript学习心得之概述
Jan 20 Javascript
理解javascript中try...catch...finally
Dec 25 Javascript
jQuery 获取select选中值及清除选中状态
Dec 13 Javascript
详解Vue中添加过渡效果
Mar 20 Javascript
深入理解JavaScript 中的匿名函数((function() {})();)与变量的作用域
Aug 28 Javascript
小程序识别身份证,银行卡,营业执照,驾照的实现
Nov 05 Javascript
一文读懂vue动态属性数据绑定(v-bind指令)
Jul 20 Javascript
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
php自动跳转中英文页面
2008/07/29 PHP
php select,radio和checkbox默认选择的实现方法
2010/05/15 PHP
如何使用php输出时间格式
2013/08/31 PHP
PHP中一些可以替代正则表达式函数的字符串操作函数
2014/11/17 PHP
php使用指定字符列表生成随机字符串的方法
2015/04/18 PHP
使用PHPExcel实现数据批量导出为excel表格的方法(必看)
2017/06/09 PHP
php实现统计IP数及在线人数的示例代码
2020/07/22 PHP
学习YUI.Ext 第七天--关于View&JSONView
2007/03/10 Javascript
JavaScript 字符串连接性能优化
2008/12/20 Javascript
javascript 事件处理程序介绍
2012/06/27 Javascript
js抽奖实现随机抽奖代码效果
2013/12/02 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
jQuery实现当按下回车键时绑定点击事件
2014/01/28 Javascript
使用CoffeeScrip优美方式编写javascript代码
2015/10/28 Javascript
JS仿京东移动端手指拨动切换轮播图效果
2020/04/10 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
jQuery选择器之属性筛选选择器用法详解
2017/09/19 jQuery
JQ图片文件上传之前预览功能的简单实例(分享)
2017/11/12 Javascript
layer弹出层倒计时关闭的实现方法
2019/09/27 Javascript
2019年度web前端面试题总结(主要为Vue面试题)
2020/01/12 Javascript
AutoJs实现刷宝短视频的思路详解
2020/05/22 Javascript
python re正则表达式模块(Regular Expression)
2014/07/16 Python
Python 修改列表中的元素方法
2018/06/26 Python
python删除字符串中指定字符的方法
2018/08/13 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
Python数据可视化库seaborn的使用总结
2019/01/15 Python
对python中if语句的真假判断实例详解
2019/02/18 Python
Python3.7基于hashlib和Crypto实现加签验签功能(实例代码)
2019/12/04 Python
深入了解如何基于Python读写Kafka
2019/12/31 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
Python实现对word文档添加密码去除密码的示例代码
2020/12/29 Python
Python实现区域填充的示例代码
2021/02/03 Python
揠苗助长教学反思
2014/02/04 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
ant design charts 获取后端接口数据展示
2022/05/25 Javascript