记录我做微信公众号支付遇到的各种问题和解决方法

发布于 2019-07-08 09:52:08 字数 2739 浏览 2520 评论 0

开发微信支付,按照微信官方的文档一步一步走,你都不一定会支付成功,可能你会遇到各种问题,但是却几乎搜索不到任何文档来解决,这里记录下我做微信支付遇到的各种问题,也许你也遇到了这个问题,或许对你会有所帮助。

支付路径配置

微信支付要求所有所有需要调用支付接口的 URL 地址都需要配置到商户平台,已网页里面的反斜杠结尾,如果你是使用前端分离来开发应用,#后面的内容也算,例如我现在的配置

如果你没有配置对,在 Android 上没有任何提示,调支付的时候一闪而过,直接执行 fail 回调,而在 IOS 上会有当前页面的 URL 未注册的提示:

在开启调试模式下,IOS 就人性化很多了。

JSSDK:"errMsg":"config:invalid signature"

从上面的提示可以看出是前面错误,这里有一个隐藏的坑,在我们生成的签名的时候,需要当前访问的 URL,微信文档建议采用动态获取,但是我们是前后端分离开发模式,如果获取当前的 URL 就是 API 访问的 URL,而不是前端访问的地址,刚开始我是直接固定这个地址,放到线上测试也没有问题。

但是当我分享网页给其他人,他们访问我分享的网页就会出现 "errMsg":"config:invalid signature" :

根本原因就是微信在我们分享的网页后面多加了一个参数,而我们生成前面的 URL 并没有这个参数:

// 原始 URL
http://domain.com/mobile/#/pages/index/view
// 分享后的 URL
http://domain.com/mobile/?from=singlemessage#/pages/index/view

解决方法有两种,我们手动去掉这个多余的参数:

// 去除微信分享自带的多余的参数
this.cur_url = location.href.replace(/\?(.+?)#/, '#');
if(!(this.cur_url==location.href)){
  location.href = this.cur_url;
}

推荐使用这个方法,因为这里多加的参数会影响到上面的支付路径配置,而一个公众号支付路径配置只有5个,如果你像我这样支付路径有多个,那么还要考虑额外的参数的情况下,支付路径会不够用到时候就无法支付了。

另外一种方法是我们在生成参数的时候,由前端把当前的 URL 传给后端,然后在生成 JSSDK 注入参数:

// 获取配置信息
getSetting(cb=()=>{}){
  this.wjPost(this, 'getSetting', {
    cur_url: location.href.split('#')[0],
  }, (res)=>{
    if(res.success){
      uni.setStorageSync('setting', res.data);
      cb(res);
    }
  });
},

就这个错误,在百度上搜索解决方案,都是千篇一律的答案:

  1. APPID 和 APPSECRET 填错
  2. 超过了每日的 access_token 获取上限
  3. 查看微信公共号状态是否不正常
  4. 确认 config 中 nonceStr
  5. 确认 url 是页面完整的 url
  6. 配置 curl 是否使用 ssl 的带证书(https协议)访问开关
  7. 将网站所在服务器 IP 地址加入白名单

就上面第五点提到了点子上,但是却没说具体的原因,到底如何处理自己靠自己。

总结

暂时就遇到这两个问题,后期如果遇到新的问题我也会更新到这个文档,做微信支付你遇到了那些坑,欢迎大家留言评论。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

列表为空,暂无数据

关于作者

JSmiles

生命进入颠沛而奔忙的本质状态,并将以不断告别和相遇的陈旧方式继续下去。

0 文章
0 评论
84935 人气
更多

推荐作者

淹不死的鱼

文章 0 评论 0

zhangMack

文章 0 评论 0

爱的故事

文章 0 评论 0

linces

文章 0 评论 0

早乙女

文章 0 评论 0

鸵鸟症

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击“接受”或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。