# 服务器修复指南 ## 服务器信息 - **地址**: 47.96.77.165 - **用户**: root - **密码**: atBSGSu0$!T - **项目路径**: /www/wwwroot/fengketrade ## 步骤1: 上传诊断脚本到服务器 在本地执行: ```bash scp server_diagnose.sh root@47.96.77.165:/www/wwwroot/fengketrade/ ``` ## 步骤2: 登录服务器 ```bash ssh root@47.96.77.165 # 密码: atBSGSu0$!T ``` ## 步骤3: 运行诊断脚本 ```bash cd /www/wwwroot/fengketrade bash server_diagnose.sh ``` ## 步骤4: 根据诊断结果修复 ### 如果使用Git管理代码: ```bash cd /www/wwwroot/fengketrade # 查看当前状态 git status # 拉取最新代码 git pull # 或者如果有冲突,强制更新 git fetch --all git reset --hard origin/main # 或 origin/master ``` ### 如果需要手动替换文件: ```bash # 在本地执行(上传修复后的文件) scp addons/shopro/library/ccblife/CcbPaymentService.php \ root@47.96.77.165:/www/wwwroot/fengketrade/addons/shopro/library/ccblife/ ``` ## 步骤5: 重启PHP服务 ```bash # 方法1: systemctl systemctl restart php-fpm # 方法2: service service php-fpm restart # 方法3: 如果是宝塔面板 bt restart php-fpm # 查看PHP进程 ps aux | grep php-fpm ``` ## 步骤6: 清除OPcache缓存 ```bash # 直接清除 php -r "opcache_reset(); echo 'OPcache cleared\n';" # 或者创建清除脚本 cat > /www/wwwroot/fengketrade/public/clear_cache.php << 'EOF' EOF # 通过浏览器访问: http://fengketrade.com/clear_cache.php # 清除后记得删除这个文件: # rm /www/wwwroot/fengketrade/public/clear_cache.php ``` ## 步骤7: 实时监控日志验证 ```bash cd /www/wwwroot/fengketrade # 监控支付日志 tail -f runtime/log/$(date +%Y%m)/$(date +%d).log | grep -E "建行支付.*最终支付串|MAC签名字符串" ``` ## 步骤8: 触发测试支付 保持步骤7的日志监控,然后在手机或浏览器发起一次支付。 观察日志输出: **✅ 正确的日志:** ``` [建行支付] MAC签名字符串: ...PROINFO=%u6F2B... [建行支付] 最终支付串: ...PROINFO=%u6F2B... ``` **❌ 错误的日志:** ``` [建行支付] MAC签名字符串: ...PROINFO=%u6F2B... [建行支付] 最终支付串: ...PROINFO=%25u6F2B... ← %被编码成了%25 ``` ## 关键检查点 修复后的代码第279行应该是: ```php $finalParts[] = $key . '=' . $value; ``` **不应该**是: ```php $finalParts[] = $key . '=' . urlencode($value); // ❌ 错误 ``` ## 快速验证命令 ```bash # 检查第279行 sed -n '279p' /www/wwwroot/fengketrade/addons/shopro/library/ccblife/CcbPaymentService.php # 应该输出: $finalParts[] = $key . '=' . $value; # 如果包含 urlencode,说明代码还未更新 ``` ## 常见问题 ### Q1: git pull失败 ```bash # 查看冲突 git status # 放弃本地修改,强制更新 git reset --hard git pull ``` ### Q2: PHP-FPM重启失败 ```bash # 查看错误日志 tail -50 /var/log/php-fpm/error.log # 检查PHP-FPM状态 systemctl status php-fpm # 检查配置语法 php-fpm -t ``` ### Q3: 修复后仍然报签名错误 ```bash # 1. 确认代码已更新 md5sum /www/wwwroot/fengketrade/addons/shopro/library/ccblife/CcbPaymentService.php # 2. 确认PHP进程已重启 ps aux | grep php-fpm | grep -v grep # 3. 检查文件权限 ls -lh /www/wwwroot/fengketrade/addons/shopro/library/ccblife/CcbPaymentService.php # 4. 查看完整日志 tail -100 /www/wwwroot/fengketrade/runtime/log/$(date +%Y%m)/$(date +%d).log ``` ## 退出服务器 ```bash exit ``` ## 注意事项 1. **备份**: 修改前建议备份当前文件 2. **权限**: 确保PHP有权限读取修改后的文件 3. **缓存**: 务必重启PHP-FPM和清除OPcache 4. **验证**: 修改后一定要查看日志验证是否生效