天天看點

如何實作app支付驗簽

由于同步通知和異步通知都可以作為支付完成的憑證,且異步通知支付寶一定會確定發送給商戶服務端。為了簡化內建流程,商戶可以将同步結果僅僅作為一個支付結束的通知(忽略執行校驗),實際支付是否成功,完全依賴服務端異步通知。

以下來介紹下同步驗簽和異步驗簽; 

為了快速接入并避免接入過程中的簽名驗簽問題,強烈建議您先下載下傳對應語言版本的SDK并引入您的開發工程。 

自行實作驗簽 

如果未使用支付寶開放平台SDK,需要自行實作驗簽過程。 其中同步傳回和異步通知封包格式及驗簽方法有所差別,詳見以下說明: 

同步傳回驗簽 

開發者隻對支付寶傳回的json中xxx_response的值做驗簽(xxx代表接口名)。

xxx_response的json值内容需要包含首尾的“{”和“}”兩個尖括号,雙引号也需要參與驗簽,如果字元串中包含https的正斜杠,需要先将正斜杠做轉義,預設列印出來的字元串是已經做過轉義的。建議驗簽不通過時将正斜杠轉義一次後再做一次驗簽。 如當面付掃碼支付擷取二維碼的傳回内容為: 

 則待驗簽字段為:

調用驗簽函數:

使用各自語言對應的SHA256WithRSA(對應sign_type為RSA2)或SHA1WithRSA(對應sign_type為RSA)簽名驗證函數,傳入待驗簽字段、支付寶公鑰、簽名内容(sign),驗簽方法(signType)進行驗簽,根據傳回結果判定是否驗簽通過。

 異步通知驗簽 

某些情況下(比如掃碼支付成功時),支付寶會給商戶發送異步通知。 如果某商戶設定的通知位址為

https://api.xx.com/receive_notify.htm

,對應接收到通知的示例如下: 

 驗簽流程:    

1.在通知傳回參數清單中,除去sign、sign_type兩個參數外,凡是通知傳回回來的參數皆是待驗簽的參數。    

2.将剩下參數進行url_decode, 然後進行字典排序,組成字元串,得到待簽名字元串:

3.将簽名參數(sign)使用base64解碼為位元組碼串。  

4.使用RSA的驗簽方法,通過簽名字元串、簽名參數(經過base64解碼)及支付寶公鑰驗證簽名,根據傳回結果判定是否驗簽通過。 

可以參考

開放平台SDK

源碼中的AlipaySignature.rsaCheckV1方法,示例如下: