fix: 微信支付证书公钥验证更新

This commit is contained in:
邹景立 2025-03-03 21:55:56 +08:00
parent 78c941a558
commit 4d9994b0a2
2 changed files with 15 additions and 12 deletions

View File

@ -118,7 +118,7 @@ abstract class BasicWePay
} }
// 自动配置平台证书 // 自动配置平台证书
if (empty($this->config['mp_cert_serial']) || empty($this->config['mp_cert_content'])) { if (empty($options['mp_cert_serial']) || empty($options['mp_cert_content'])) {
if ($this->autoCert) $this->_autoCert(); if ($this->autoCert) $this->_autoCert();
} else { } else {
$this->config['mp_cert_serial'] = $options['mp_cert_serial']; $this->config['mp_cert_serial'] = $options['mp_cert_serial'];
@ -340,8 +340,11 @@ abstract class BasicWePay
*/ */
protected function signVerify($data, $sign, $serial) protected function signVerify($data, $sign, $serial)
{ {
$cert = $this->_getCert($serial); if (stripos($this->config['mp_cert_serial'], 'PUB_KEY_ID_') !== false) {
return @openssl_verify($data, base64_decode($sign), openssl_x509_read($cert), 'sha256WithRSAEncryption'); return @openssl_verify($data, base64_decode($sign), $this->config['mp_cert_content'], OPENSSL_ALGO_SHA256);
} else {
return @openssl_verify($data, base64_decode($sign), openssl_x509_read($this->_getCert($serial)), 'sha256WithRSAEncryption');
}
} }
/** /**

View File

@ -16,20 +16,20 @@
$certPublic = <<<CERT $certPublic = <<<CERT
-----BEGIN CERTIFICATE----- -----BEGIN CERTIFICATE-----
具体证书全文内容 件文本内容
-----END CERTIFICATE----- -----END CERTIFICATE-----
CERT; CERT;
$certPrivate = <<<CERT $certPrivate = <<<CERT
-----BEGIN PRIVATE KEY----- -----BEGIN PRIVATE KEY-----
具体证书全文内容 件文本内容
-----END PRIVATE KEY----- -----END PRIVATE KEY-----
CERT; CERT;
// 支付证书内容 // 支付证书内容
$certPayment = <<<CERT $certPayment = <<<CERT
-----BEGIN PUBLIC KEY----- -----BEGIN PUBLIC KEY-----
具体证书全文内容 件文本内容
-----END PUBLIC KEY----- -----END PUBLIC KEY-----
CERT; CERT;
@ -62,19 +62,19 @@ CERT;
return [ return [
// 可选公众号APPID // 可选公众号APPID
'appid' => 'wxbbc5782d4d77a43b', 'appid' => 'wx3760axxxxxxxxxxx',
// 必填微信商户编号ID // 必填微信商户编号ID
'mch_id' => '1643053551', 'mch_id' => '152xxxxxxxx',
// 必填微信商户V3接口密钥 // 必填微信商户V3接口密钥
'mch_v3_key' => 'ThinkAdminThinkAdminThinkAdminTh', 'mch_v3_key' => '98b7f45xxxxxxxxxxxxxxxxxxxxxxxxxx',
// 可选,微信商户证书序列号,可从公钥中提取,请求签名使用 // 可选,微信商户证书序列号,可从公钥中提取,请求签名使用
'cert_serial' => '', 'cert_serial' => '49055xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
// 必填,微信商户证书公钥,支持证书内容或文件路径,仅用于提取序号 // 必填,微信商户证书公钥,支持证书内容或文件路径,仅用于提取序号
'cert_public' => $certPublic, 'cert_public' => $certPublic,
// 必填,微信商户证书私钥,支持证书内容或文件路径,用请求数据签名 // 必填,微信商户证书私钥,支持证书内容或文件路径,用请求数据签名
'cert_private' => $certPrivate, 'cert_private' => $certPrivate,
// 可选,微信平台证书序号或支付证书序号,用于接口请求序号 // 可选,微信平台证书序号或支付证书序号,用于接口请求序号
'mp_cert_serial' => 'PUB_KEY_ID_0116430535512025030300389200001906', 'mp_cert_serial' => 'PUB_KEY_ID_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx',
// 可选,微信平台证书内容或支付证书内容 // 可选,微信平台证书内容或支付证书内容
'mp_cert_content' => $certPayment, 'mp_cert_content' => $certPayment,
// 可选,运行时的文件缓存路径 // 可选,运行时的文件缓存路径