最近在做和支付宝打交道的开发,要读开发文档,今天遇到了一个问题,耗费了两小时了,都没搞定,这个可是要写给广大开发者的啊.
支付宝再进行预授权完成后,会同步返回预授权结果,格式如下:
{
"memo" : "xxxxx",
"result" : "{
\"alipay_trade_app_pay_response\":{
\"code\":\"10000\",
\"msg\":\"Success\",
\"app_id\":\"2014072300007148\",
\"out_trade_no\":\"081622560194853\",
\"trade_no\":\"2016081621001004400236957647\",
\"total_amount\":\"0.01\",
\"seller_id\":\"2088702849871851\",
\"charset\":\"utf-8\",
\"timestamp\":\"2016-10-11 17:43:36\"
},
\"sign\":\"NGfStJf3i3ooWBuCDIQSumOpaGBcQz+aoAqyGh3W6EqA/gmyPYwLJ2REFijY9XPTApI9YglZyMw+ZMhd3kb0mh4RAXMrb6mekX4Zu8Nf6geOwIa9kLOnw0IMCjxi4abDIfXhxrXyj********\",
\"sign_type\":\"RSA2\"
}",
"resultStatus" : "9000"
}
这个是支付宝文档自己给的案例,下面告诉我们如何验证:
- 提取alipay_trade_app_pay_response字段值,其代表签名原始字符串,上述示例格式如下:
{
"code": "10000",
"msg": "Success",
"total_amount": "9.00",
"app_id": "2014072300007148",
"trade_no": "2014112400001000340011111118",
"seller_id": "2088111111116894",
"out_trade_no": "70501111111S001111119"
}
从第一步开始,很明显和它自己给的案例对应不上去,上面的结果中有时间戳(timestamp)和字符(charset)的,结果到提取字段的时候,没有说明任何情况把两个字段去掉了。
然后进行校验。
这个没说明情况,去掉两字段是啥意思?
支付宝文档然后接着说:
使用各自语言对应的SHA256WithRSA签名验证函数,传入签名的原始字符串、支付宝公钥、签名类型RSA、签名字符进行合法性验证。
但是其给的事例源代码中用的不是SHA256WithRSA签名:

而使用SHA256WithRSA签名的方法:

这个content怎么传都不对。
验证签名,到底那几个字段是有效的?用提供的哪个方法?
最后
文档写的对应不上,让读者读起来很费劲啊。感兴趣的参见:APP支付
晕。
网友评论