更新时间:2023-04-06 15:04:56收藏我的文档设置返回文档为了避免验签失败,强烈建议使用支付宝的 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。○待验签字符串中,参数是否进行了字典排序。