1. 程式人生 > >thinkphp網站支付寶非同步回撥驗籤失敗問題,發現一個原因點

thinkphp網站支付寶非同步回撥驗籤失敗問題,發現一個原因點

手頭一個專案,用到了支付寶手機網站支付,專案用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,這是我這邊的情況,具體未深究。