那些年微信支付踩过的坑

因为需求原因项目中需要引入微信和支付宝支付功能,自己做微信支付,遇到的坑在这里记录一下

APPæ¯ä»æ¶åºå¾

将微信java代码引入,配置好相应的配置,使用App进行支付发现执行第10步的时候微信支付系统一直返回-1·,然后查阅文档微信只给出以下几种情况原因,只想说尼玛能不能再具体一点

然后开始验证可能出现的原因:

1、签名错误

通过执行第4步和第5步微信返回相应参数信息没有发生异常,然后又通过调用微信内部验签工具类验证通过,然后通过官方在线验签名工具也测试没有问题https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=20_1,于是查看Key居然和AppSecret 设置成相同的了,然后官方也说不能采用相同的值,于是进行更改key,设置key的方法。

(微信支付:https://pay.weixin.qq.com/index.php/core/cert/api_cert

通过上面两种方式验证过签名都通过就说明签名没有问题;

2、 验证appid

首先到微信开放平台查看应用具体的appid

(微信公众平台:https://open.weixin.qq.com/cgi-bin/applist?t=manage/list&page=0&num=20&openapptype=1&lang=zh_CN&token=99835785766ab3e93bbacd15f3484093d4abc605

点击查看详细APPID,然后再到微信支付

A、查看是否开通相应支付功能

B、查看绑定过的AppId(必须绑定该APP才能进行支付业务)

再次确认后发现AppId都没问题

3、其他异常(参数错误) 

因为执行第10步出现异常,所以猜想传给前端的参数不正确

A、返给前端的签名sign没有重新生成

检查发现给前端的参数中也包含一个sign,而执行微信请求第4步的时候请求成功后微信响应的参数中也包含一个sign,并没有重新生成签名sign而是误认为同一个sign直接传给前端造成错误

 B、timestamp参数值错误

没有转化为秒级别造成错误,java中获取当前时间秒方式。

Date nowTime = new Date();
long misTime = nowTime.getTime();

 B、安卓调用支付正常,ios调用支付一直返回-1

将得到的(misTime/1000)处理

最终确定返回-1原因为签名错误,错误原因:返给前端的签名sign没有重新生成,而是直接使用微信返回的sign签名

发布了21 篇原创文章 · 获赞 8 · 访问量 40万+

猜你喜欢

转载自blog.csdn.net/qq_31150503/article/details/89530855