Skip to content

Conversation

@towserchen
Copy link

1, 官方签发的应用证书在 -----END CERTIFICATE----- 前可能存在换行,导致 php openssl_x509_parse 函数无法识别证书内容,提交请求时支付宝回复”应用公钥证书不存在“错误。新增清理无用空行函数,并在读取证书时应用,以解决该问题;
2, AntCertificationUtil->hex2dec() 方法可能因为用户应用在其他位置修改了 bcscale 精度而导致返回值存在多余的小数位0。我所遭遇的情况更神奇:因为测试环境配置问题 php-fpm 没能及时重启进程,当请求分配到不同的 php 进程上时 bcscale 返回都不同。新增在 hex2dec 函数内强制配置 bcscale 为0 ,并在执行完后恢复用户之前的 scale 值,顺利解决这个问题;

@ydslash2
Copy link

借个地方吐槽下阿里,支付页面连个orderId都要藏起来,真向58学习了呢

@chenpinzhong2025
Copy link

chenpinzhong2025 commented Jun 12, 2025

vendor\alipaysdk\easysdk\php\src\Kernel\Util\AntCertificationUtil.php
/**
* 0x转高精度数字
* @param $hex
* @return int|string
*/
function hex2dec($hex)
{
// 移除 0x 前缀
$hex = ltrim($hex, '0x');
$dec = '0';
$len = strlen($hex);
for ($i = 0; $i < $len; $i++) {
$char = $hex[$i];
$value = hexdec($char);
$dec = bcadd($dec, bcmul($value, bcpow('16', $len - $i - 1)));
}
return $dec;
} 这个函数 是修改过的 原始的 0x 开头的 也会导致报错 沙箱环境2025-06月

"alipaysdk/easysdk": "^2.0" //有问题
"alipaysdk/easysdk": "^2.2" //没问题

我用的版本是2.2.0 升级2.2.3 就修复了
升级版本 就好了

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants