下面由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
百度無果,有說證書錯誤的亂七八糟,本人換證書也沒用。
后來偶然發現輸入有問題,最終找到一個原因:
立即學習“PHP免費學習筆記(深入)”;
這里接收支付寶異步通知的時候,不能使用I函數
$data=I("post.");//項目中這樣寫,導致支付寶傳來的數據部分特殊字符被過濾,具體主要是fund_bill_list和sign這兩部分 $data=$_POST;//寫成這樣就好了
還有一點:
無論簽名驗證是否正確,openssl_error_string()始終輸出error:0906D06C:PEM routines:PEM_read_bio:no start line,這是我這邊的情況,具體未深究。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END
喜歡就支持一下吧
相關推薦