因为需求原因项目中需要引入微信和支付宝支付功能,自己做微信支付,遇到的坑在这里记录一下
将微信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
点击查看详细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签名