vue 单页应用中微信支付的坑

标签(空格分隔): 微信 支付 坑 vue


场景

在微信H5页面(使用 vue-router2 控制路由的 vue2 单页应用项目)中使用微信 jssdk 进行微信支付。

基本知识

1.依据微信jssdk官方文档,使用微信功能的页面,必须进行微信 config,并在wx ready 之后再调用微信功能。

2.进行微信支付的话,需要在微信开放平台配置微信支付合法路径。该合法路径有层级限制,比如需要支付的页面的url为 https://example.com/redpacket/:problemid 的话,配置的合法路径需为 https://example.com/redpacket/。即允许最后一级是可变的参数。

状况

通过 https://example.com/lesson/:lessonid 进入的 vue 根页面,之后点击某个链接进入了需要进行微信支付的 vue 子页面 https://example.com/lesson/redpacket/:redpacketid

支付路径不合法

坑1 苹果 vs 安卓

{
path: '/redpacket/:redpacketid',
name: 'redpacket',
component: Redpacket
},

微信确认支付合法路径的时候,ios 取 Landing Page, Android 取 Current Page。即 ios 认为合法路径的配置应该是 https://example.com/lesson/,而 Android 认为合法路径的配置应该是 https://example.com/lesson/redpacket/。 导致微信支付合法url认定不一致的问题。一种解决办法是就在微信开放平台设置两个合法路径,但是由于可配置合法路径只能最多5个,所以一个功能使用2个名额比较浪费。

参考上面链接中的介绍,微信会把 ? 后面的全给忽略掉,所以多长都不会占用路径层级了,所以尝试了把 path 改为

{
path: '/redpacket?/:redpacketid',
name: 'redpacket',
component: Redpacket
},

的方式,苹果和大部分安卓手机都没有问题了,但是发现华为 p9 p10依然有80%的几率失败。

所以为了苹果,必须把支付功能页面和根页面改为是同一层url:

{
path: '/redpacketqueryproblemid', // 参数改为通过query的方式获取
name: 'redpacket',
component: Redpacket
},

这样,只用配置一个合法路径就可以了: https://example.com/lesson/

坑2

根据微信官方文档介绍

6.确保你获取用来签名的url是动态获取的,动态页面可参见实例代码中php的实现方式。如果是html的静态页面在前端通过ajax将url传到后台签名,前端需要用js获取当前页面除去'#'hash部分的链接(可用location.href.split('#')[0]获取,而且需要encodeURIComponent),因为页面一旦分享,微信客户端会在你的链接末尾加入其它参数,如果不是动态获取当前链接,将导致分享后的页面签名失败。

我在根页面进行了 wx.config() 操作(因为需要调用jssdk禁用微信分享),在进入发红包页面的时候,又进行了 wx.config() 操作(因为需要调用jssdk微信支付)。但是在删掉在进入发红包页面的时候的 wx.config() 之后,发现 华为 p9 p10 不再发生支付失败,所有设备页都正常。所以不知道是官方文档写错了,还是我们又误解。总之,坑2 为 不能按照官方文档说的做,url变化了不要再次config

最新文章

  1. MVC采用Jquery实现局部刷新
  2. js 网站顶部导航栏
  3. angularjs 迭代器
  4. SQL Server 2008 数据库镜像部署实例之一 数据库准备
  5. HDU 2255 奔小康发大财
  6. 《你不常用的c#之一》:略谈unsafe
  7. 关于 keybd_event (vb篇)
  8. oracle 转 mysql 最新有效法(转)
  9. 自动化运维—tomcat服务起停(mysql+shell+django+bootstrap+jquery)
  10. numpy数组、向量、矩阵运算
  11. c#套料程序设计
  12. NewLife.XCode 上手指南2018版(一)代码生成
  13. How To determine DDIC Check Table, Domain and Get Table Field Text Data For Value?
  14. [Swift]LeetCode273. 整数转换英文表示 | Integer to English Words
  15. jquery懒加载插件 jquery_lazyload 下载
  16. 百度软件开发实习生c++方向面经(一面)
  17. TCP/IP学习20180630-数据链路层-router choose
  18. 洛谷.2590.[ZJOI2008]树的统计(树分块)
  19. 第一章(欢迎进入node.js世界)
  20. NYOJ 116 士兵杀敌 (线段树,区间和)

热门文章

  1. 使用手淘flexible.js适配移动端布局
  2. Eclipse for PHP Developers 配置记录
  3. casper爬虫操作记录
  4. 笔记本安装win7和arch linux双系统+xfce4桌面
  5. oracle常用DDL语句
  6. 页面跳转问题-button 确定提交按钮
  7. 实现类似tail -f file功能
  8. lua输入函数名字符串执行函数
  9. vim创建新的命令
  10. jqgrid 增删改页面快速构建