老蔡的个人专栏正式成立,以后工作中遇到的技术问题,或者生活中对一些事物的见解,都会和大家分享!独乐乐不如众乐乐!

微信支付V3.0开发 支付进度闪现一两秒后消失

SSHI BlandonTsai 2069℃ 0评论

最近在处理民生制药的项目时,涉及到了微信支付的模块,本猿不负重托承担起了微信支付接口开发的工作。虽说不是什么很高含金量的业务,但毕竟是属于以前没处理过的支付领域,所以保持着足够的好奇心和耐心。每次遇到这种情况,都是快速积累开发经验的过程。但是在开发流程中,真是坑雷满天炸啊,有一种被虐的感觉。不过最后还是完成了支付业务,回头一看,确实有一种拨开云雾见青天的感觉。可能这就是所谓:领悟。

微信wechat

至于微信支付官方的 API 文档在此我就不费口舌了,真是太混乱了。我只能简要的告诉那些后继的微信支付开发猿:API 文档有两种(本猿项目使用的是公众号支付模式,通过网页授权的方式进行处理),一种是支付接口文档,这是都要调用处理的,是统一的;还有一种是JS SDK 文档,用于处理微信浏览器的内置支付模块,这个文档有 V2 版和 V3 版,一不留神就搞杂了,望留心。

微信支付V2版

微信支付V3版

有网友查看了微信的封装代码,发现 V3 版是基于 V2 版改版过来的,也就是说 V3 版的实现方法中也使用了 V2 版的原支付方法。至于说为什么这么处理,本猿就不得而知了,可能是有支付漏洞,可能曝光度太高,可能微信支付部门领导换届了……既然是新版本,微信官方还是建议和推荐的。V2 版本有些网友测试说是有功能故障,本猿没有测试过,有兴趣的网友可以测试测试。

微信支付闪现问题

在调用微信预支付接口,得到预支付编号之后,开始发起支付。这时发生了一种无比诡异的问题,微信支付加载进度条闪现了一次,就消失没影了。控制台没有报错,没有JS报错,没有页面报错!消失后,页面静止。由于这里边的配置项不少,所以开发时并不清楚是什么地方没配好,最终我们用了两三天的时间才明确了所有配置的生效范围。

1.APPID和密钥

APPID是公众号 id ,但密钥不是公众号密钥,而是申请支付的商户号密钥(在商户后台中,只有设置,不能修改)。

2.微信支付授权和测试授权目录

授权目录取决于你的请求 URL ,与项目物理目录、绝对路径没有任何关系。

3.接口权限

在接口权限中,修改“网页帐号”-“网页授权获取基本信息”的域名,否则微信项目拿不到用户的 openid ,无法识别是哪个用户。

4.签名算法

这里面至关重要的就是签名算法,因为只有公司和微信知道本次支付请示的 key 值,通过 md5 对所有传输参数进行加密。一旦有人拦截程序、恶意篡改数据,都会导致加密后的签名不一致。对于这种非法签名,程序控制时一律不要应答。而我也是被签名坑了,签名有误,也会导致微信支付的闪现状态。

微信支付JS SDK文档

上图是微信JS SDK 支付的文档说明,我也是被这一段话误解了,导致了最终支付时传参签名错误。因为这个函数标明了“最后参与签名的参数有appID,timeStamp,nonceStr,package,signType。”所以,我在加密签名的时候并没有把 key 当参数传进去一块加密,结果签名错误。其实微信也说明了要把 key 值加上,但是这个地方说的有点含蓄,就是“pagSign采用统一的微信支付Sign签名生成方法”,这个“统一的”意思就是每次加密参数都要封装 key 值,这是微信加密签名的潜规则。详情可以查看签名生成算法。能够把文档含蓄到这份上,我也是醉了……

转载请注明:似水流年 » 微信支付V3.0开发 支付进度闪现一两秒后消失

如果觉得文章还不错,欢迎打赏
喜欢 (0)or分享 (0)
头像
发表我的评论
取消评论