下面由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中文網其他相關文章!