PHP通過(guò)pem文件校驗(yàn)簽名異常問題解決
問題描述:
在對(duì)接第三方支付過(guò)程中,支付成功異步回調(diào)時(shí),校驗(yàn)簽名,一直無(wú)法通過(guò)。但是在支付成功時(shí)有一個(gè)同步返回也需要校驗(yàn)簽名,用的是同樣的校驗(yàn)方法,都沒有問題。當(dāng)把回調(diào)時(shí)傳遞的參數(shù)放在postman中,手動(dòng)發(fā)起回調(diào),也可以通過(guò)簽名校驗(yàn)
最后經(jīng)過(guò)排查,是引用秘鑰文件時(shí),報(bào)錯(cuò)了,錯(cuò)誤代碼如下
public static function verify(array $data, $sign)
{
if (empty($data) || empty($sign)) {
return "";
}
//code+msg+date+result,
$code = $data['code'] ?? '';
$msg = $data['msg'] ?? '';
$date = $data['date'] ?? '';
$result = $data['result'] ?? '';
$signString = $code . $msg . $date . $result;
$mallbook_key_file = __DIR__.'rsa_public.pem';
$pubKey = file_get_contents($mallbook_key_file);
/** 此處可能會(huì)返回false **/
$res = openssl_get_publickey($pubKey);
$result = openssl_verify($signString , base64_decode($sign), $res) === 1;
openssl_free_key($res);
return $result;
}上面代碼其實(shí)是沒有問題的,問題出在rsa_public.pem文件的內(nèi)容,秘鑰內(nèi)容都寫在同一行了,沒有按照標(biāo)準(zhǔn)的秘鑰格式書寫,如下

解決方法
第一種
按標(biāo)準(zhǔn)的秘鑰書寫格式修改秘鑰文件每行只能有64個(gè)字符,如下

第二種
直接在代碼中拼接秘鑰字符串
$pubKey ='MIGfMA0GCSqGSIb3DQE***************************************
********************************************************************
***************1mwyu7RTDC8Wp7LGddnlkJsmL8masgMxA6cc9NwIDAQAB';
$str= chunk_split($pubKey, 64, "\n");
$key = "-----BEGIN PUBLIC KEY-----\n$str-----END PUBLIC KEY-----\n";
$signature = base64_decode($sign);
return openssl_verify($signString, $signature, $key, OPENSSL_ALGO_SHA1) === 1;到此這篇關(guān)于PHP通過(guò)pem文件校驗(yàn)簽名異常的文章就介紹到這了,更多相關(guān)php em文件校驗(yàn)簽名內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql alter table命令修改表結(jié)構(gòu)實(shí)例詳解
這篇文章主要介紹了mysql alter table命令修改表結(jié)構(gòu)實(shí)例的相關(guān)資料,需要的朋友可以參考下2016-09-09
laravel 獲取某個(gè)查詢的查詢SQL語(yǔ)句方法
今天小編就為大家分享一篇laravel 獲取某個(gè)查詢的查詢SQL語(yǔ)句方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
yii2中LinkPager增加總頁(yè)數(shù)和總記錄數(shù)的實(shí)例
本篇文章主要介紹了php中LinkPager增加總頁(yè)數(shù)和總記錄數(shù)的實(shí)例,具有一定的參考價(jià)值,有興趣的可以了解一下2017-08-08
Yii安裝EClientScript插件擴(kuò)展實(shí)現(xiàn)css,js文件代碼壓縮合并加載功能
這篇文章主要介紹了Yii安裝EClientScript插件擴(kuò)展實(shí)現(xiàn)css,js文件代碼壓縮合并加載功能,分析了EClientScript插件的下載、安裝、設(shè)置及使用的相關(guān)技巧,需要的朋友可以參考下2016-07-07
laravel5.6 框架郵件隊(duì)列database驅(qū)動(dòng)簡(jiǎn)單demo示例
這篇文章主要介紹了laravel5.6 框架郵件隊(duì)列database驅(qū)動(dòng),結(jié)合實(shí)例形式詳細(xì)分析了laravel5.6郵件隊(duì)列database驅(qū)動(dòng)具體設(shè)置、實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2020-01-01
laravel通過(guò)a標(biāo)簽從視圖向控制器實(shí)現(xiàn)傳值
今天小編就為大家分享一篇laravel通過(guò)a標(biāo)簽從視圖向控制器實(shí)現(xiàn)傳值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-10-10
laravel 5.1下php artisan migrate的使用注意事項(xiàng)總結(jié)
這篇文章主要給大家總結(jié)介紹了在laravel 5.1下php artisan migrate的使用注意事項(xiàng),文中介紹的非常詳細(xì),對(duì)大家使用php artisan migrate具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起看看吧。2017-06-06
php更新修改excel中的內(nèi)容實(shí)例代碼
這篇文章主要介紹了php更新修改excel中的內(nèi)容實(shí)例代碼,需要的朋友可以參考下2014-02-02

