首頁 >php框架 >ThinkPHP >thinkphp網站支付寶非同步回調驗簽失敗問題

thinkphp網站支付寶非同步回調驗簽失敗問題

藏色散人
藏色散人轉載
2020-07-03 13:26:583422瀏覽

下面由thinkphp框架教學專欄為大家介紹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,這是我這邊的情況,具體未深究。

以上是thinkphp網站支付寶非同步回調驗簽失敗問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除