diff --git a/SERVER_FIX_GUIDE.md b/SERVER_FIX_GUIDE.md deleted file mode 100644 index be573e8..0000000 --- a/SERVER_FIX_GUIDE.md +++ /dev/null @@ -1,195 +0,0 @@ -# 服务器修复指南 - -## 服务器信息 -- **地址**: 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. **验证**: 修改后一定要查看日志验证是否生效 diff --git a/deploy_fix.sh b/deploy_fix.sh deleted file mode 100755 index d2c4a87..0000000 --- a/deploy_fix.sh +++ /dev/null @@ -1,88 +0,0 @@ -#!/bin/bash -# 一键部署修复脚本 -# 用法: bash deploy_fix.sh - -set -e # 遇到错误立即退出 - -SERVER="root@47.96.77.165" -SERVER_DIR="/www/wwwroot/fengketrade" -FILE_TO_UPLOAD="addons/shopro/library/ccblife/CcbPaymentService.php" - -echo "====================================" -echo "建行支付修复 - 一键部署" -echo "====================================" -echo "" - -# 检查本地文件是否存在 -if [ ! -f "$FILE_TO_UPLOAD" ]; then - echo "❌ 本地文件不存在: $FILE_TO_UPLOAD" - exit 1 -fi - -echo "【步骤1】检查本地代码..." -echo "-----------------------------------" -if grep -q "urlencode" <(sed -n '279p' "$FILE_TO_UPLOAD"); then - echo "❌ 本地代码第279行仍包含urlencode,请先修复本地代码" - exit 1 -else - echo "✅ 本地代码已修复" -fi -echo "" - -echo "【步骤2】上传诊断脚本到服务器..." -echo "-----------------------------------" -scp server_diagnose.sh $SERVER:$SERVER_DIR/ || { - echo "❌ 上传诊断脚本失败" - exit 1 -} -echo "✅ 诊断脚本上传成功" -echo "" - -echo "【步骤3】运行服务器端诊断..." -echo "-----------------------------------" -ssh $SERVER "cd $SERVER_DIR && bash server_diagnose.sh" || { - echo "❌ 服务器诊断失败" - exit 1 -} -echo "" - -echo "【步骤4】上传修复后的文件..." -echo "-----------------------------------" -echo "正在上传: $FILE_TO_UPLOAD" -scp $FILE_TO_UPLOAD $SERVER:$SERVER_DIR/$FILE_TO_UPLOAD || { - echo "❌ 文件上传失败" - exit 1 -} -echo "✅ 文件上传成功" -echo "" - -echo "【步骤5】重启PHP-FPM..." -echo "-----------------------------------" -ssh $SERVER "systemctl restart php-fpm || service php-fpm restart" || { - echo "⚠️ PHP-FPM重启可能失败,请手动检查" -} -echo "✅ PHP-FPM重启完成" -echo "" - -echo "【步骤6】清除OPcache..." -echo "-----------------------------------" -ssh $SERVER "php -r 'if(function_exists(\"opcache_reset\")){opcache_reset();echo \"OPcache cleared\n\";}'" || { - echo "⚠️ OPcache清除可能失败" -} -echo "" - -echo "【步骤7】验证部署..." -echo "-----------------------------------" -echo "检查服务器上的代码..." -ssh $SERVER "sed -n '279p' $SERVER_DIR/$FILE_TO_UPLOAD" -echo "" - -echo "====================================" -echo "✅ 部署完成!" -echo "====================================" -echo "" -echo "下一步:" -echo "1. 触发一次支付测试" -echo "2. 监控日志: ssh $SERVER 'tail -f $SERVER_DIR/runtime/log/\$(date +%Y%m)/\$(date +%d).log | grep 最终支付串'" -echo "3. 检查是否还有 %25u (错误) 还是 %u (正确)" -echo "" diff --git a/server_diagnose.sh b/server_diagnose.sh deleted file mode 100755 index ff5615a..0000000 --- a/server_diagnose.sh +++ /dev/null @@ -1,112 +0,0 @@ -#!/bin/bash -# 服务器端建行支付诊断脚本 -# 在服务器上运行: bash server_diagnose.sh - -echo "====================================" -echo "建行支付服务器端诊断" -echo "====================================" -echo "" - -PROJECT_DIR="/www/wwwroot/fengketrade" -FILE="$PROJECT_DIR/addons/shopro/library/ccblife/CcbPaymentService.php" - -if [ ! -f "$FILE" ]; then - echo "❌ 文件不存在: $FILE" - exit 1 -fi - -echo "【1. 文件信息】" -echo "-----------------------------------" -ls -lh "$FILE" -echo "" - -echo "【2. 最后修改时间】" -echo "-----------------------------------" -stat "$FILE" | grep "Modify" -echo "" - -echo "【3. 检查第279行(最终支付串)】" -echo "-----------------------------------" -echo "应该是: \$finalParts[] = \$key . '=' . \$value;" -echo "实际是:" -sed -n '279p' "$FILE" -echo "" - -if grep -q "urlencode" <(sed -n '279p' "$FILE"); then - echo "❌ 错误: 第279行包含urlencode,需要修复!" -else - echo "✅ 正确: 第279行无URL编码" -fi -echo "" - -echo "【4. 检查第286行(非MAC参数)】" -echo "-----------------------------------" -sed -n '286p' "$FILE" -if grep -q "urlencode" <(sed -n '286p' "$FILE"); then - echo "❌ 错误: 第286行包含urlencode" -else - echo "✅ 正确: 第286行无URL编码" -fi -echo "" - -echo "【5. 检查ENCPUB的URL-safe处理】" -echo "-----------------------------------" -if grep -q "str_replace(\['+', '/'\], \['-', '_'\]" "$FILE"; then - echo "✅ 找到URL-safe BASE64转换" - grep -n "str_replace(\['+', '/'\]" "$FILE" | head -1 -else - echo "❌ 未找到URL-safe BASE64转换" -fi -echo "" - -echo "【6. PHP版本和OPcache状态】" -echo "-----------------------------------" -php -v | head -1 -php -r "echo 'OPcache enabled: ' . (function_exists('opcache_reset') ? 'Yes' : 'No') . \"\n\";" -echo "" - -echo "【7. 最近的支付日志】" -echo "-----------------------------------" -LOGFILE="$PROJECT_DIR/runtime/log/$(date +%Y%m)/$(date +%d).log" -if [ -f "$LOGFILE" ]; then - echo "日志文件: $LOGFILE" - echo "最近的支付串:" - tail -50 "$LOGFILE" | grep "最终支付串" | tail -1 - echo "" - echo "检查是否有URL编码问题:" - if tail -50 "$LOGFILE" | grep "最终支付串" | grep -q "%25u"; then - echo "❌ 发现URL编码问题: %被编码成%25" - else - echo "✅ 未发现%25,可能已修复或未测试" - fi -else - echo "日志文件不存在: $LOGFILE" -fi -echo "" - -echo "【8. 建议操作】" -echo "-----------------------------------" -echo "如果发现代码有问题,执行以下步骤:" -echo "" -echo "1. 检查git状态:" -echo " cd $PROJECT_DIR" -echo " git status" -echo "" -echo "2. 拉取最新代码:" -echo " git pull" -echo "" -echo "3. 重启PHP-FPM:" -echo " systemctl restart php-fpm" -echo " # 或者" -echo " service php-fpm restart" -echo "" -echo "4. 清除OPcache:" -echo " php -r 'opcache_reset();'" -echo "" -echo "5. 再次测试支付,查看日志:" -echo " tail -f $PROJECT_DIR/runtime/log/$(date +%Y%m)/$(date +%d).log | grep '最终支付串'" -echo "" - -echo "====================================" -echo "诊断完成" -echo "===================================="