错误码:
com.alipay.api.AlipayApiException: sign check fail: check Sign and Fail
报错原因:验签失败 ,未使用正确的支付宝公钥
在新版接口的调用过程中,常常出现此报错。许多人认为自己的公私钥都是匹配的,支付已经成功或者说接口已经调用成功,出现这个报错百思不得其解。要知道在调用接口过程中,商户有一对RSA密钥,支付宝同样有一对RSA密钥,在调用过程中商户用自己的私钥签名后请求到支付宝服务器,支付宝服务器使用商户的公钥(商户上传到开放平台的公钥)验证是否是商户发送的请求。此时,接口调用成功,支付宝向商户发送异步通知或者同步通知。支付宝发送异步通知或者同步通知时,支付宝使用了自己的私钥签名,所以商户需要使用支付宝的公钥验签。错误就出在商户验签时没有使用正确的支付宝公钥。
下面我用alipay.trade.query(统一收单线下交易查询接口)为例截图说明。
AlipayClient alipayClient = new DefaultAlipayClient("https://openapi.alipay.com/gateway.do","app_id","your private_key","json","GBK","alipay_public_key","RSA2");
这里的your private_key是指商户的私钥,alipay_public_key指支付宝公钥。(若alipay_public_key值不正确就会报此错 误)。
报错解决:
确认使用的支付宝公钥是否正确,不同的环境使用的支付宝公钥不同,如沙箱环境、线上openapi网关和mapi网关对应的支付宝公钥是不一样的。更换正确的支付宝公钥后即可成功。
查询支付宝公钥:
a)沙箱环境
1 登录开放平台(https://openhome.alipay.com);
2 进入开发者中心,点击沙箱应用,在配置应用中,查看支付宝公钥即可。
b)真实环境
1 登录开放平台(https://openhome.alipay.com);
2 进入开发者中心,在我的应用下,选择使用的应用,在接口加签方式中,选择对应的支付宝公钥即可。