开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
文档中心
凯发app官方网站的技术支持 & 案例 faq 
接入指南 > 接入准备 > 签名验签 > 异步验签失败
收藏
我的文档
设置
为了避免验签失败,强烈建议使用支付宝的 sdk。 
支付宝公钥错误(重点检查)
排查代码中支付宝公钥参数与开放平台上 接口加签方式 位置获取的支付宝公钥是否一致。大部分商户报错是由于支付宝公钥错误导致,需在开放平台的 接口加签方式 位置的支付宝公钥中获取,注意不是通过密钥生成工具生成的。
使用工具生成的密钥为应用私钥和应用公钥,应用公钥与支付宝公钥数据不同。
如果应用的 接口加签方式 设置为 公钥,则获取支付宝公钥数据,使用支付宝公钥数据进行验签。
如果应用的 接口加签方式 设置为 公钥证书,则获取支付宝公钥证书信息,使用支付宝公钥证书进行验签。
支付宝公钥获取详见 如何获取支付宝公钥。 
编码类型错误
检查编码类型 charset 是否正确,避免中文乱码等原因。
建议异步通知会导致中文乱码的参数优先设置为英文或者数字,如 subject 和 body 设置为 123,避免中文乱码。
该报错只会由于编码格式不统一导致,建议检查自己项目的编码格式是否与请求返回的格式一致,。 
签名类型错误
验签使用的支付宝公钥与签名类型(异步返回的 sign_type 参数)不匹配。
检查异步通知返回的 sign_type 类型,验签时必须与 sign_type 相一致。
注意:sign_type 设置了 rsa 或 rsa2,需使用与之对应的支付宝公钥,不能混淆使用。 
验签代码错误
不同语言的 sdk 验签代码不同,并且证书验签和 rsa2 密钥验签的代码示例也不相同。
验签详见 如何使用 rsa2 签名验签如何使用证书签名验签
java 语言
验签方法不同,rsa2 密钥使用 rsacheckv1,而公钥证书使用 rsacertcheckv1。
php 语言
php 验签方法一致。
.net 语言
验签方法不同,rsa2 密钥使用 rsacheckv1,而公钥证书使用 rsacertcheckv1,并且 rsa2 密钥验签需额外检查验签代码中是否添加 false。
异步通知错误
使用云排查查询找到接收到的那笔异步回调数据内容,异步通知会未返回 success 会重复触发,每次返回的异步通知都是不同的,必须根据异步发送时间 notify_time 找到对应的那笔异步数据,然后替换云排查查询到的数据内的敏感数据信息,例如 sign、buyer_logon_id、seller_email 等值。
注意:没有返回 success 会出现重发情况,可根据 notify_time 参数从云排查工具上找对应的那笔异步回调数据内容。 
注意事项
可通过支付宝开放平台开发助手的 异步验签 功能检查,如果工具验签成功,代码验签失败:
核实代码中设置的数据信息是否和工具中设置的信息一致。
如果以上方式检查都没有问题,建议检查 sdk 是否符合运行环境,并且建议 sdk 更新到最新一版。
如果商户不是通过 sdk 的方式去验签,而是自己解析验签,需检查生成待验签串流程是否正确:
待验签字符串中,是否剔除了 sign、sign_type 两个参数。
待验签字符串中,每个参数值是否进行 url_decode。
待验签字符串中,参数是否进行了字典排序。
内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图