接支付宝支付, 服务端下载 java sdk, 客户端接入android sdk, 设置好沙箱。按照官网流程一步步来,最后进行测试
服务器生成一个支付参数字符串,传给客户端
客户端用服务器给的支付参数,拉起支付宝(沙箱版)
最后支付宝却传来一个失败的map:
{resultStatus=6001, result=, memo=用户取消}
问题排查
通过使用官方的支付客户端demo(在demo中生成支付参数),设置好沙箱,私钥等,结果正常拉起支付宝支付,支付成功。
这里可以确定设置的密钥是没有问题的,问题就是在支付参数这里了。
支付参数是由 server-java-sdk 来生成的,对比官网的使用示例,一切都一样,这样下来,就确认是 server-java-sdk 生成的字符串不正确了。想来这个问题也只有出现在沙箱版吧,不然正式版出现这个问题早爆炸更新了。所以最大可能是 server-java-sdk 生成的字符串沙箱支付宝不支持。
首先对 server-java-sdk 生成的字符串进行签名校验(官方工具),确定签名正确。然后与官方的支付客户端demo 生成的字符串仔细比较:
# 官方的支付客户端demo 生成的字符串
charset=utf-8&biz_content=%7B%22timeout_express%22%3A%2230m%22%2C%22product_code%22%3A%22QUICK_MSECURITY_PAY%22%2C%22total_amount%22%3A%220.01%22%2C%22subject%22%3A%221%22%2C%22body%22%3A%22%E6%88%91%E6%98%AF%E6%B5%8B%E8%AF%95