未使用开放平台SDK的自助排查流程

TIPS:文中代码部分以JAVA语言演示,其他语言请参考各自SDK。

签名问题

问题描述
解决方案
签名时抛出异常:“java.security.InvalidKeyException”。
代码中私钥格式错误导致。 1>.检查格式是否正确。Java需使用PKCS8格式,其他语言使用PKCS1格式。 2>.检查私钥是否一行。
请求时,支付宝返回报错信息:“{"code":"40003","msg":"Insufficient Conditions","sub_code":"isv.missing-signature-config","sub_msg":"验签出错, 未配置对应签名算法的公钥或者证书"}”
开放平台未配置商户公钥导致。请登录开放平台,上传公钥。 教程
请求时,支付宝返回报错信息:“{"code":"40002","msg":"Invalid Arguments","sub_code":"isv.invalid-signature","sub_msg":"无效签名"}”
签名校验失败。 1>.检查网关地址是生产环境还是沙箱环境,必须使用与之匹配的app_id与私钥。 2>.检查编码类型是否正确。 3>.检查私钥与开放平台上传的应用公钥是否匹配。 4>.检查签名类型(sign_type)设置是否正确。如果不传入sign_type参数,默认RSA类型。 5>.检查生成的待签名串是否符合要求:       a)去掉值为空的参数。       b)所有参数是否按照字母升序排序。 6>.检查签名之后是否对所有参数值做了url encode操作才发起请求。

参考签名教程

验签问题

问题描述
解决方案
SDK抛出异常“java.security.InvalidKeyException”
代码中支付宝公钥参数内容错误导致。请核对。
SDK抛出异常:“Caused by: java.security.SignatureException: Signature length not correct: got 256 but was expecting 128”
验签使用的支付宝公钥与签名类型(请求时传入的sign_type参数)不匹配。Sign_type设置了RSA2,需使用对应的支付宝公钥,不能使用开放平台RSA类型下的支付宝公钥。
SDK抛出异常:“Caused by: java.security.SignatureException: Signature length not correct: got 128 but was expecting 256”
验签使用的支付宝公钥与签名类型(请求时传入的sign_type参数)不匹配。Sign_type设置了RSA,需使用对应的支付宝公钥,不能使用开放平台RSA2类型下的支付宝公钥。
验签结果失败。
支付宝返回内容验签失败。 1>.检查网关地址是生产环境还是沙箱环境,必须使用与之匹配的app_id与支付宝公钥。 2>.检查编码类型是否正确。 3>.检查代码中支付宝公钥参数与开放平台上获取的支付宝公钥是否一致。 4>.检查生成待验签串流程是否正确。因为同步和异步返回报文不同,下面分别介绍。

针对同步返回内容验签:

1>.检查验签内容是否完整,支付宝返回的json中xxx_response的值(xxx代表接口名),验签需要包含json首尾的“{”和“}”两个大括号,双引号也需要参与验签。
2>.如果字符串中包含“http://”的正斜杠,需要先将正斜杠做转义。当验签不通过时将正斜杠转义一次后再做一次验签。

针对异步通知内容验签:

1>.待验签字符串中,是否剔除了sign、sign_type两个参数。
2>.待验签字符串中,每个参数值是否进行url_decode。
3>.待验签字符串中,参数是否进行了字典排序。
TIPS:生活号异步通知待验签串里保留sign_type参数。
参考验签教程

onlineServer