thinkphp網站支付寶非同步回撥驗籤失敗問題,發現一個原因點
阿新 • • 發佈:2019-01-31
手頭一個專案,用到了支付寶手機網站支付,專案用tp做的,下載支付寶SDK後修改後調起正常,同步介面也可訪問,但非同步介面驗籤總是錯誤失敗,fail,追蹤到AopClient.php的580行,下段程式碼處
if ("RSA2" == $signType) {
$result = (bool) openssl_verify($data, base64_decode($sign), $res, OPENSSL_ALGO_SHA256);//這句報錯
} else {
$result = (bool) openssl_verify($data, base64_decode($sign ), $res);
}
列印print_r(openssl_error_string());
,輸出的是
error:0906D06C:PEM routines:PEM_read_bio:no start line
百度無果,有說證書錯誤的亂七八糟,本人換證書也沒用。
後來偶然發現輸入有問題,最終找到一個原因:
這裡接收支付寶非同步通知的時候,不能使用I函式
$data=I("post.");//專案中這樣寫,導致支付寶傳來的資料部分特殊字元被過濾,具體主要是fund_bill_list和sign這兩部分
$data=$_POST;//寫成這樣就好了
還有一點:
無論簽名驗證是否正確,openssl_error_string()
error:0906D06C:PEM routines:PEM_read_bio:no start line
,這是我這邊的情況,具體未深究。