在调用微信支付接口中遇到各种问题,真不知道是哪个人才写的接口文档,几个简单的接口调了好几天。
1、小程序获取code2Session时errcode出错时是会返回错误码,但正常时居然连这个字段都不返回了,说好的正常返回0呢?
2、小程序支付的时间戳参数,在调用小程序支付接口时需要后台生成签名,有个timeStamp参数,文档上写的是当前时间,注意这里有个坑,它要的是到秒级别的,如果用java直接System.currentTimeMillis() 是不行的!会提示签名错误!
正确做法是: System.currentTimeMillis() / 1000
3、小程序支付签名时key是要拼接的,文档上没有写明,示例上是写的了搞得不知道以哪个为准。
4、建议所有签名统一MD5,否则 不知道哪个地方默认了其它签名就会签名通不过
5、小程序支付,也就是交易类型是JSAPI的情况下是要传openId的,另外appId appkey sercrt mechId 等有一个不对应就会报签名失败,这点要注意。
6、微信支付demo里代码的一个大坑,其中有一段:
- public WXPay(){
-
- if(useSandBox){
- signType = MD5;
- }else{
- signType = HMACSHA256
- }
- }
注意这里一定要改下,改成统一的MD5 :
- public WXPay(final WXPayConfig config, final String notifyUrl, final boolean autoReport, final boolean useSandbox) throws Exception {
- this.config = config;
- this.notifyUrl = notifyUrl;
- this.autoReport = autoReport;
- this.useSandbox = useSandbox;
- if (useSandbox) {
- this.signType = SignType.MD5; // 沙箱环境
- }
- else {
- //TODO 默认用MD5
- this.signType = SignType.MD5;
- }
- this.wxPayRequest = new WXPayRequest(config);
- }
否则你会发现接收支付成功结果通知的时候怎么老是签名不通过,然后再发现换成HMACSHA256就通过了,看文档里明明写的是默认MD5, 问题就出现在这,demo代码 默认却是HMACSHA256 !
7、沙盒模式测试时报金额不正确,这个问题我自己也不记得在哪看到的了,总之微信文档上是没找到,其原因是沙盒模式测试的金额(total_fee)必须是固定的330 !
另外,沙盒模式下的付款码是不能付款的,不能付款也就是说没法测试接收支付结果通知,只能上正式用1分钱测。
最后记一下接收支付结果通知spring mvc 的接收方式代码:
- @RequestMapping(value="receiveResult",consumes = {MediaType.TEXT_XML_VALUE},produces = {MediaType.TEXT_XML_VALUE})
- public String receiveResult(@NotNull @RequestBody String xml){
- //TODO
- ....
-
- }
算是比较偷懒了,不怕麻烦的建议用实体类加注解 接收
- 本文作者: reiner
- 本文链接: https://reiner.host/posts/d6b91638.html
- 版权声明: 转载请注明出处,并附上原文链接