PHP通過(guò)pem文件校驗(yàn)簽名異常問(wèn)題解決
問(wèn)題描述:
在對(duì)接第三方支付過(guò)程中,支付成功異步回調(diào)時(shí),校驗(yàn)簽名,一直無(wú)法通過(guò)。但是在支付成功時(shí)有一個(gè)同步返回也需要校驗(yàn)簽名,用的是同樣的校驗(yàn)方法,都沒(méi)有問(wè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í)是沒(méi)有問(wèn)題的,問(wèn)題出在rsa_public.pem文件的內(nèi)容,秘鑰內(nèi)容都寫(xiě)在同一行了,沒(méi)有按照標(biāo)準(zhǔn)的秘鑰格式書(shū)寫(xiě),如下

解決方法
第一種
按標(biāo)準(zhǔn)的秘鑰書(shū)寫(xiě)格式修改秘鑰文件每行只能有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)文章
WordPress上傳圖片錯(cuò)誤:不是合法的JSON響應(yīng)解決辦法
這篇文章主要給大家介紹了關(guān)于WordPress上傳圖片錯(cuò)誤:不是合法的JSON響應(yīng)的解決辦法,WordPress提示JSON錯(cuò)誤通常是由于服務(wù)器配置或插件沖突引起的,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-08-08
set_exception_handler函數(shù)在ThinkPHP中的用法
這篇文章主要介紹了set_exception_handler函數(shù)在ThinkPHP中的用法,分析了官方給出了set_exception_handler函數(shù)用法說(shuō)明及示例,并講述了在ThinkPHP中的應(yīng)用實(shí)例,需要的朋友可以參考下2014-10-10
php實(shí)現(xiàn)網(wǎng)站插件機(jī)制的方法
這些天想作一個(gè)在網(wǎng)站中實(shí)現(xiàn)插件的功能,谷歌了一下,發(fā)現(xiàn)一篇文章感覺(jué)對(duì)我?guī)椭艽螅鰜?lái)和大家分享,廢話不多說(shuō),直接帖出代碼供大家分析.2009-11-11
destoon文章模塊調(diào)用企業(yè)會(huì)員資料的方法
這篇文章主要介紹了destoon文章模塊調(diào)用企業(yè)會(huì)員資料的方法,非常實(shí)用的一個(gè)技巧,需要的朋友可以參考下2014-08-08
php中用unset銷(xiāo)毀變量并釋放內(nèi)存
在本篇文章里小編給大家分享的是關(guān)于php中用unset銷(xiāo)毀變量并釋放內(nèi)存的實(shí)例分享內(nèi)容,需要的朋友們可以參考下。2020-05-05

