开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
文档中心
开放平台 
技术接入指南 > 应用开发 > 应用开发配置 > 接口加签方式 >  > 自助排查签名验签问题
收藏
订阅更新
我的文档
设置
简介
本文主要介绍自助排查密钥签名验签过程中遇到问题的方法。
支付宝开放平台 sdk 封装了签名和验签过程,只需配置应用信息及密钥参数,建议使用。详情可查看 sdk 下载地址
注意:文中代码部分以 java 语言演示,其它语言请查看各自 sdk。
使用开放平台 sdk 接入
如果使用了开放平台 sdk,签名验签问题通常是因为密钥配置错误导致。
以下问题描述以示例中的变量名进行举例说明。
签名问题
问题描述
凯发app官方网站的解决方案
sdk 抛出异常:
com.alipay.api.alipayapiexception: rsa 私钥格式不正确,请检查是否正确配置了 pkcs8 格式的私钥。
代码中私钥(private_key)格式错误导致。
1检查格式是否正确。java 需使用 pkcs8 格式,其它语言使用 pkcs1 格式。
2检查私钥是否为一行。
请求时,sdk 抛出异常:
java.lang.nullpointerexception: privatekey should not be null。
代码中私钥(private_key)参数未赋值导致。请把商家应用私钥赋值给该参数。详情可查看 生成密钥并上传
请求时,sdk 抛出异常:
java.security.nosuchalgorithmexception: md5 keyfactory not available。
代码中签名类型(sign_type)设置错误导致。开放平台接口需设置成 rsa。
请求时,支付宝返回报错信息:
{"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检查网关地址(gateway)是生产环境还是沙箱环境,必须使用与之匹配的应用 id(app_id)与私钥(private_key)。
2检查编码类型(charset)是否正确。
3检查私钥(private_key)与支付宝开放平台上传的应用公钥是否匹配。
4检查签名类型(sign_type)值是否正确。如果未传入 sign_type 参数,默认为 rsa 类型。
请求时,支付宝返回报错信息:
{"code":"40002","msg":"invalid arguments","sub_code":"isv.missing-alipay-root-cert-sn","sub_msg":"缺少支付宝根证书序列号"}
请求参数中缺少支付宝根证书序列号( alipay_root_cert_sn)导致。检查自己的请求参数中是否携带支付宝根证书 sn。
请求时,支付宝返回报错信息:
{"code":"40002","msg":"invalid arguments","sub_code":"isv.invalid-alipay-root-cert-sn","sub_msg":"无效支付宝根证书序列号"}
支付宝根证书序列号(alipay_root_cert_sn)校验失败,检查自己使用的支付宝根证书是否是门户上下载的最新根证书。详情可查看 如何获取支付宝根证书 sn
请求时,支付宝返回报错信息:
{"code":"40002","msg":"invalid arguments","sub_code":"isv.missing-app-cert-sn","sub_msg":"缺少应用公钥证书序列号"}
请求参数中缺少应用公钥证书序列号(app_cert_sn)。详情可查看 如何获取应用公钥证书sn(app_cert_sn)
请求时,支付宝返回报错信息:
{"code":"40002","msg":"invalid arguments","sub_code":"isv.app-cert-expired","sub_msg":"您用来加签的私钥对应的应用公钥证书已过期,请尽快更新您的应用公钥证书"}
应用公钥证书已过期,请登录支付宝开放平台,重新申请或重新上传有效的应用公钥证书。详情可查看 生成密钥并上传
请求时,支付宝返回报错信息:
{"code":"40002","msg":"invalid arguments","sub_code":"isv.app-cert-not-exist","sub_msg":"应用公钥证书不存在"}
请求参数中指定的应用公钥证书不存在,检查开发者使用的应用公钥证书是否已上传开发平台。详情可查看 生成密钥并上传
请求时,支付宝返回报错信息:
{"code":"40002","msg":"invalid arguments","sub_code":"isv.missing-alipay-cert-sn","sub_msg":"缺少支付宝公钥证书序列号"}
请求参数中缺少支付宝公钥证书序列号(alipay_cert_sn)。详情可查看 如何获取应用公钥证书sn(app_cert_sn)
请求时,支付宝返回报错信息:
{"code":"40002","msg":"invalid arguments","sub_code":"isv.alipay-cert-not-exist","sub_msg":"支付宝公钥证书不存在"}
请求参数中指定的支付宝公钥证书不存在。请检查是否下载使用了应用最新的支付宝公钥证书。详情可查看 如何获取应用公钥证书sn(app_cert_sn)
验签问题
问题描述
凯发app官方网站的解决方案
sdk 抛出异常:
java.lang.nullpointerexception: alipaypublickey should not be null。
代码中支付宝公钥(alipay_public_key)参数未赋值导致。请把支付宝公钥赋值给该参数。详情可查看 生成密钥并上传
sdk 抛出异常:
java.security.invalidkeyexception
代码中支付宝公钥(alipay_public_key)参数内容错误导致。请核对参数内容并保证正确性。
sdk 抛出异常:
com.alipay.api.alipayapiexception: sign check fail: check sign and data fail
支付宝返回内容验签失败。
1检查网关地址(gateway)是生产环境还是沙箱环境,必须使用与之匹配的应用 id(app_id)与支付宝公钥(alipay_public_key)。
2检查编码类型(charset)是否正确。
3检查代码中支付宝公钥(alipay_public_key)参数与开放平台上获取的支付宝公钥是否一致。
sdk 抛出异常:
caused by: java.security.signatureexception: signature length not correct: got 256 but was expecting 128
支付宝公钥(alipay_public_key)与签名类型(sign_type)不匹配。sign_type 设置为 rsa2,alipay_public_key 需使用对应的支付宝公钥,不能使用开放平台 rsa 类型下的支付宝公钥。
sdk 抛出异常:
caused by: java.security.signatureexception: signature length not correct: got 128 but was expecting 256
支付宝公钥(alipay_public_key)与签名类型(sign_type)不匹配。sign_type 设置了 rsa,alipay_public_key 需使用对应的支付宝公钥,不能使用开放平台 rsa2 类型下的支付宝公钥。
alipaysignature.rsacheckv1() 方法返回 false
验签失败,方法同上。
alipayrootcert is invalid
初始化解析不到有效的支付宝根证书文件,建议检查根证书文件是否正确
appcert is invalid
初始化解析不到有效的应用根证书文件,建议检查应用证书文件是否正确。
注意:开放平台 sdk 提供了 alipaysignature.verifyv1()alipaysignature.verifyv2() 两个版本。v1 验签时会剔除 sign_type 参数,v2 会保留 sign_type 参数。v2 仅适用于生活号接口。
未使用开放平台 sdk
签名问题
问题描述
凯发app官方网站的解决方案
签名时抛出异常:
“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检查生成的待签名串是否符合要求:
去掉值为空的参数。
所有参数是否按照字母升序排序。
6检查签名之后是否对所有参数值做了 url encode 操作才发起请求。
验签问题
问题描述
凯发app官方网站的解决方案
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 设置了 rsa2,需使用对应的支付宝公钥,不能使用开放平台 rsa 类型下的支付宝公钥。
验签结果失败。
支付宝返回内容验签失败。
1检查网关地址是生产环境还是沙箱环境,必须使用与之匹配的 app_id 与支付宝公钥。
2检查编码类型是否正确。
3检查代码中支付宝公钥参数与开放平台上获取的支付宝公钥是否一致。
4检查生成待验签串流程是否正确。同步和异步返回报文不同,下面分别进行介绍。针对同步返回内容验签: 说明:生活号异步通知待验签串里保留 sign_type 参数。
检查验签内容是否完整,支付宝返回的 json 中 xxx_response 的值(xxx 代表接口名),验签需要包含 json 首尾的 {} 两个大括号,双引号也需要参与验签。
如果字符串中包含 http:// 的正斜杠,需要先将正斜杠做转义。当验签不通过时将正斜杠转义一次后再做一次验签。
待验签字符串中,是否剔除了 sign、sign_type 两个参数。
待验签字符串中,每个参数值是否进行 url_decode。
待验签字符串中,参数是否进行了字典排序。
内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图