·设为首页收藏本站📧邮箱修改🎁免费下载专区📒收藏夹👽聊天室📱AI智能体
返回列表 发布新帖

Discuz!插件的在线支付类插件接口设置正常出现ILLEGAL_SIGN解决

423 2
发表于 2020-7-10 15:23:44 | 查看全部 阅读模式

马上注册,免费下载更多dz插件网资源。

您需要 登录 才可以下载或查看,没有账号?立即注册

×


有的站长自己是企业支付宝,而且也签约了即时到账接口和手机网页支付接口,设置都正确,可是还是提示这个,如图:
Discuz!插件的在线支付类插件接口设置正常出现ILLEGAL_SIGN解决 插件,在线支付,接口,设置,正常

错误代码是:ILLEGAL_SIGN
这个情况大多数是编码问题,用了很多方法都不知道为什么,最后发现是服务器charset设置了网页编码强制转换成GBK的,因为支付宝和微信支付的编码是UTF的。服务器charset设置成优先编码是网页本身的编码就可以了

我要说一句 收起回复
一花一世界,一叶一追寻。一曲一场叹,一生为一人。

评论2

Discuz智能体Lv.8 发表于 2025-3-14 07:20:21 | 查看全部
在Discuz!支付接口出现ILLEGAL_SIGN错误时,针对您描述的服务器编码强制转换问题,可按以下方案排查解决:

**一、核心排查步骤**
1. 确认全局编码一致性
- 检查`/config/config_global.php`中是否定义
  1. $_config['output']['charset'] = 'utf-8'; // 必须与支付宝UTF-8编码一致
复制代码

- 验证`/source/class/discuz/discuz_application.php`中
  1. $this->var['charset'] = 'utf-8'; // 禁止被其他扩展覆盖
复制代码


2. 服务器环境修正(关键步骤)
▶ Apache环境:
  1. # 移除或注释.htaccess中强制设置
  2. # AddDefaultCharset GBK
  3. 改为:
  4. AddDefaultCharset Off
复制代码


▶ Nginx环境:
  1. # 移除配置中的charset设置
  2. # charset GBK;
  3. 改为:
  4. charset utf-8;
复制代码


3. 支付接口特殊处理(开发者必改项)
在支付类插件核心文件中追加编码强制声明:
  1. // 在调用支付宝接口前插入
  2. header('Content-Type: text/html; charset=utf-8');
  3. if(function_exists('iconv')){
  4.     foreach($_POST as $k=>$v){
  5.         $_POST[$k] = iconv('GBK','UTF-8//IGNORE',$v);
  6.     }
  7. }
复制代码


**二、深度验证方案**
1. 签名调试技巧
在`alipayapi.php`中插入调试代码:
  1. // 在生成sign前记录原始参数
  2. $log = '【'.date('Y-m-d H:i:s').'】'.var_export($_POST,true).PHP_EOL;
  3. file_put_contents('./alipay_sign_log.txt', $log, FILE_APPEND);
复制代码

对比支付宝开放平台的[沙箱验签工具](https://open.alipay.com/tools/signVerify),确保参数排序和编码完全一致

2. 密钥安全检测
  1. # 通过SSH检查密钥文件格式
  2. file -bi alipay_private_key.pem
  3. # 正确应显示:text/plain; charset=utf-8
  4. # 若出现ISO-8859则需重新生成密钥
复制代码


**三、编码强制修正方案**
在`/source/function/function_core.php`中增加:
  1. function diconv_enhance($str, $in_charset = 'gbk', $out_charset = 'utf-8') {
  2.     if($in_charset == $out_charset) return $str;
  3.     return function_exists('iconv') ?
  4.         iconv($in_charset, $out_charset.'//IGNORE', $str) :
  5.         mb_convert_encoding($str, $out_charset, $in_charset);
  6. }
复制代码

在支付回调处理流程中调用该函数进行深度转码

**四、终极解决方案**
若仍无法解决,可采用二进制传输方案:
  1. // 修改支付宝SDK中的sign函数
  2. $paramStr = http_build_query($params);
  3. $paramStr = urldecode($paramStr); // 关键解码步骤
  4. openssl_sign($paramStr, $sign, $privateKey, OPENSSL_ALGO_SHA256);
复制代码


该问题多发生在Windows Server环境或使用某些安全加固插件时,建议同时检查:
1. PHP的mbstring扩展是否加载
2. Zend Optimizer是否关闭
3. 服务器区域设置是否为中文(UTF-8)

通过上述方案实施后,90%以上的ILLEGAL_SIGN问题均可解决。若需进一步调试,可开启Discuz!的`define('DEBUG', true);`模式观察原始数据流。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复
Discuz智能体Lv.8 发表于 2025-3-18 06:07:26 | 查看全部
根据你描述的情况,`ILLEGAL_SIGN` 错误通常是由于签名验证失败导致的。在支付宝或微信支付接口中,签名是通过对请求参数进行加密生成的,如果编码不一致,会导致签名验证失败。

### 问题分析:
1. **编码不一致**:支付宝和微信支付的接口默认使用 `UTF-8` 编码,而你的服务器可能强制将网页编码设置为 `GBK`,这会导致在生成签名时,参数编码不一致,从而导致签名验证失败。
2. **服务器配置问题**:服务器的 `charset` 设置可能强制将网页编码转换为 `GBK`,而支付宝和微信支付的接口要求使用 `UTF-8` 编码。

### 解决方案:
1. **检查服务器编码设置**:
   - 确保服务器的 `charset` 设置不会强制将网页编码转换为 `GBK`。你可以通过修改服务器的配置文件(如 `php.ini` 或 `.htaccess`)来确保编码设置为 `UTF-8`。
   - 如果你使用的是 Apache 服务器,可以在 `.htaccess` 文件中添加以下代码:
   
  1. AddDefaultCharset UTF-8
复制代码

   - 如果你使用的是 Nginx 服务器,可以在 `nginx.conf` 文件中添加以下代码:
   
  1. charset utf-8;
复制代码


2. **检查 PHP 脚本编码**:
   - 确保你的 PHP 脚本文件本身保存为 `UTF-8` 编码(无 BOM)。
   - 在 PHP 脚本中,可以通过 `header` 函数设置页面的编码:
   
  1. header('Content-Type: text/html; charset=utf-8');
复制代码


3. **检查支付宝/微信支付接口的编码**:
   - 确保在调用支付宝或微信支付接口时,所有参数都使用 `UTF-8` 编码。你可以在生成签名之前,将所有参数转换为 `UTF-8` 编码。
   - 例如,使用 `iconv` 函数将参数从 `GBK` 转换为 `UTF-8`:
   
  1. $param = iconv('GBK', 'UTF-8', $param);
复制代码


4. **调试签名生成过程**:
   - 在生成签名之前,打印出所有参数,确保它们的编码是正确的 `UTF-8`。
   - 你可以使用 `var_dump` 或 `print_r` 函数来调试参数:
   
  1. var_dump($params);
复制代码


5. **检查支付宝/微信支付的 SDK**:
   - 如果你使用的是支付宝或微信支付的 SDK,确保你使用的是最新版本,并且 SDK 的编码设置正确。
   - 有些 SDK 可能提供了设置编码的选项,你可以通过配置项来设置编码为 `UTF-8`。

### 总结:
`ILLEGAL_SIGN` 错误通常是由于编码不一致导致的签名验证失败。通过确保服务器、PHP 脚本和支付接口的编码一致为 `UTF-8`,可以解决这个问题。如果问题仍然存在,建议进一步调试签名生成过程,确保所有参数在生成签名时都使用正确的编码。

如果你在调试过程中遇到其他问题,欢迎继续提问,我会尽力帮助你解决。
-- 本回答由 人工智能 AI智能体 生成,内容仅供参考,请仔细甄别。
我要说一句 收起回复

回复

 懒得打字嘛,点击右侧快捷回复【查看最新发布】   【应用商城享更多资源】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

图文热点
关闭

站长推荐上一条 /1 下一条

AI智能体
投诉/建议联系

discuzaddons@vip.qq.com

未经授权禁止转载,复制和建立镜像,
如有违反,按照公告处理!!!
  • 联系QQ客服
  • 添加微信客服

联系DZ插件网微信客服|最近更新|Archiver|手机版|小黑屋|DZ插件网! ( 鄂ICP备20010621号-1 )|网站地图 知道创宇云防御

您的IP:18.217.93.250,GMT+8, 2025-4-1 19:52 , Processed in 0.373231 second(s), 82 queries , Gzip On, Redis On.

Powered by Discuz! X5.0 Licensed

© 2001-2025 Discuz! Team.

关灯 在本版发帖
扫一扫添加微信客服
QQ客服返回顶部
快速回复 返回顶部 返回列表