ping++支付签名校验总是失败原因,HttpKit.readData带了"\n"!

背景先给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:好像图片上传不了..

评论区

JFinal

2016-09-19 11:50

HttpKit.readData(...) 用一下 jfinal 2.3-SNAPSHOT 版就可以,这个问题以前被改进过,是因为在 readData 时每读一行在末尾会添加一个 "\n"字符,造成了在最后一行会多出一个 "\n" 来,其中字符串中间的那些 "\n" 是正常字符,不应该 replace 掉

图片上传不可以是不是图片过超了 200K,错误提示是什么? 我好解决一下。如果要使用 jfinal 2.3-SNAPSHOT,注意要在 pom.xml 中添加 repositories 标记,并添加 repository 子标记,里面有一个 url 子标记必须是: https://oss.sonatype.org/content/repositories/snapshots/ 才可以

最后,感谢你的分享

l745230

2016-09-19 12:26

@JFinal 1.编辑器中图片上传的图标是灰色的点不了。 2.拖动图片到编辑器中提示“后端配置项没有正常加载,上传插件不能正常使用!”

JFinal

2016-09-19 17:16

@l745230 可以使用了,前天改了下 nginx 配置,让这个工作不正常了

热门分享

扫码入社