返回列表 发帖
查看: 926|回复: 7

[已处理] 支付宝验签后的一个BUG,导致积分无法购买。

4

主题

15

回帖

25

积分

初学乍练

贡献
0 点
金币
5 个
发表于 2023-3-9 12:20:09 | 显示全部楼层 |阅读模式
BUG反馈
程序版本: X3.5
浏览器: Chrome 
BUG地址: 隐藏内容
BUG截图: -
测试用户名: 隐藏内容
测试密码: 隐藏内容
昨天搞了5个小时,今天是4个小时。

api/payment/payment_alipay.php         
第88行      
openssl_free_key() 使用出错,导致即使验签通过,也无法继续执行。
openssl_free_key($public_key);
//$public_key是公钥字符串,不属于资源,而openssl_free_key()是用来释放资源的,所以在释放字符串的时候出现错误,我不知道这样子理解对不对。

unset($public_key);  //所以我把它改成unset来代替openssl_free_key() 。

这样子就不影响安全性,也能达到目的。


1 贡献

最佳答案

PS:根据描述,应该是PHP8产生的问题,因为PHP8不允许空值的限制越发严重了,所以未引入的资源或空资源释放报错了,在PHP7应该是没问题的
www.ccchh.com
回复

使用道具 举报

18

主题

3960

回帖

7304

积分

应用开发者

贡献
359 点
金币
1397 个
QQ
发表于 2023-3-9 12:53:47 | 显示全部楼层
$public_key是公钥,自然是属于密钥资源的一种啊……
openssl_free_key用于释放密钥资源,用法没毛病。
  1. openssl_free_key(resource $key_identifier): void
复制代码
openssl_free_key() 从内存中释放和指定的 key_identifier相关联的密钥。
回复 支持 反对

使用道具 举报

18

主题

3960

回帖

7304

积分

应用开发者

贡献
359 点
金币
1397 个
QQ
发表于 2023-3-9 12:57:43 | 显示全部楼层
建议你通过支付宝开放平台 > 支持 > 技术支持 > 自助工具 > 云排查 访问并排查 异步通知问题排查 和 请求返回错误问题排查
回复 支持 反对

使用道具 举报

4

主题

15

回帖

25

积分

初学乍练

贡献
0 点
金币
5 个
 楼主| 发表于 2023-3-9 18:05:37 | 显示全部楼层
湖中沉 发表于 2023-3-9 12:57
建议你通过支付宝开放平台 > 支持 > 技术支持 > 自助工具 > 云排查 访问并排查 异步通知问题排查 和 请求返 ...

我是纯系统centos7,安装了宝塔,然后安装了dzx3.5,
php8 mysql 5.6
*******************
我后来没用unset()而是在释放资源前面把公钥列到资源里,再释放。
$public_key= openssl_pkey_get_public($public_key);//将公钥列入资源
   openssl_free_key($public_key);//释放资源公钥
*******************
这句openssl_free_key()即使没有的话,应该也无伤大雅吧。
www.ccchh.com
回复 支持 反对

使用道具 举报

4

主题

15

回帖

25

积分

初学乍练

贡献
0 点
金币
5 个
 楼主| 发表于 2023-3-9 18:07:19 | 显示全部楼层
云排查也没有问题哦。
通知时间:2023-03-09 17:57:50
通知地址:http://www.域名.com/api/payment/notify/notify_alipay.php
通知内容: http://www.域名.com/api/payment/notify/notify_alipay.php?gmt_create=2023-03-09 17:57:43************
商户响应:http状态码: 200, 返回: success.
提示:成功
www.ccchh.com
回复 支持 反对

使用道具 举报

18

主题

3960

回帖

7304

积分

应用开发者

贡献
359 点
金币
1397 个
QQ
发表于 2023-3-9 20:39:23 | 显示全部楼层
wzzjhc 发表于 2023-3-9 18:05
我是纯系统centos7,安装了宝塔,然后安装了dzx3.5,
php8 mysql 5.6
*******************

目前这个做法大致没问题,但正确的应该是补充openssl_get_publickey行为(你用的别名的也可以),然后用这个资源去做openssl_verify,问题就不大了
回复 支持 反对

使用道具 举报

18

主题

3960

回帖

7304

积分

应用开发者

贡献
359 点
金币
1397 个
QQ
发表于 2023-3-9 20:41:49 | 显示全部楼层
https://gitee.com/Discuz/DiscuzX/pulls/2037
提交了此PR,并实站测试:
从下到上,分别:
第一次:密钥模式(未修改前),自动成功
第二次:密钥模式(修改后),自动成功
第三次:证书模式(修改后),自动成功

暂未测试未修改前的证书模式
截图202303092039284660.jpg
回复 支持 反对

使用道具 举报

18

主题

3960

回帖

7304

积分

应用开发者

贡献
359 点
金币
1397 个
QQ
发表于 2023-3-9 20:43:48 | 显示全部楼层
PS:根据描述,应该是PHP8产生的问题,因为PHP8不允许空值的限制越发严重了,所以未引入的资源或空资源释放报错了,在PHP7应该是没问题的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 关注公众号
  • 有偿服务微信
  • 有偿服务QQ

手机版|小黑屋|Discuz! 官方交流社区 ( 皖ICP备16010102号 |皖公网安备34010302002376号 )|网站地图|star

GMT+8, 2024-5-3 17:28 , Processed in 0.060251 second(s), 10 queries , Redis On.

Powered by Discuz! W1.0 Licensed

Cpoyright © 2001-2024 Discuz! Team.

关灯 在本版发帖
有偿服务QQ
有偿服务微信
返回顶部
快速回复 返回顶部 返回列表