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)真實環境
);
2 進入開發者中心,在我的應用下,選擇使用的應用,在接口加簽方式中,選擇對應的支付寶公鑰即可。