支付宝支付踩的坑

1. 区分支付宝公钥和应用公钥的区别, 所有的验签都是使用支付宝公钥完成

2. 支付宝扫码支付是个同步请求, 直接得到支付结果, 使用execute(request)方法, 这里创建的alipayclient中的公钥可以设置为null, 即对同步请求结果不做验签处理

3. app支付生成统一下单使用的是sdkexecute(request)方法

4. app支付回调是否验签, 由商户自行决定, 验签时注意汉字和特殊字符的编码. 

(1) 这里使用支付宝官方提供的方式转码无效,

valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");

(2) 使用如下方式转码

valueStr = URLDecoder.decode(valueStr, "UTF-8");

(3) 使用(2)转码后发现报错:Signature length not correct: got 253 but was expecting 256. 说明支付宝返回的sign在做转码后失效不再时256长, 所以对sign不做转码处理, 至此问题解决

if(!name.equals("sign"))
   valueStr = URLDecoder.decode(valueStr, "UTF-8");
关于转码问题, 应该有更优雅的解决方案, 不做研究

5. 修改账户公钥, 有10-20分钟的延迟, 该时间内原有私钥和新私钥都可以使用


猜你喜欢

转载自blog.csdn.net/asdfsadfasdfsa/article/details/80085614
今日推荐