背景先给ping++打下广告:
是我用过的辣么多第三方支付集成的最好用的一套,只要写一遍支付代码,后续想集成支付宝啊,微信啊,银行卡啊,苹果pay啊等等等都只需配置下就搞定了,收费也能接受。
入正题:
根据ping++官方的校验Demo,结合jfinal做了些调整。然后与app联调时,ping++支付成功的回调一直ka在签名校验步骤上。
boolean flag = SignatureUtils.verifyData(json, signature, publicKey);
把接口需要的3个参数输出到控制台,放到Demo中执行,校验结果:通过。真是奇了个大怪,接下来就是茫茫长征路,开始找BUG~
一番斗鸡眼扫码中,发现了问题是出在HttpKit.readData(request) 这上面
String (HttpServletRequest request) { BufferedReader br = { StringBuilder result = StringBuilder()br = request.getReader()(String line=(line=br.readLine())!=) { result.append(line).append()} result.toString()} (IOException e) { RuntimeException(e)} { (br != ) {br.close()} (IOException e) {LogKit.(e.getMessage()e)} } }
是的,问题就出在这,json多了\n,导致私钥加密,公钥解密不正确~~
result.append(line).append("\n");
解决方式:
json = json.replaceAll("\n","");
by the way:好像图片上传不了..
图片上传不可以是不是图片过超了 200K,错误提示是什么? 我好解决一下。如果要使用 jfinal 2.3-SNAPSHOT,注意要在 pom.xml 中添加 repositories 标记,并添加 repository 子标记,里面有一个 url 子标记必须是: https://oss.sonatype.org/content/repositories/snapshots/ 才可以
最后,感谢你的分享