mirror of
https://gitee.com/liuxioabin/fengketrade.git
synced 2026-04-17 21:03:17 +08:00
1
This commit is contained in:
parent
198421778b
commit
8af3d400d3
@ -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'
|
||||
<?php
|
||||
if (function_exists('opcache_reset')) {
|
||||
opcache_reset();
|
||||
echo 'OPcache cleared successfully!';
|
||||
} else {
|
||||
echo 'OPcache is not enabled';
|
||||
}
|
||||
phpinfo(INFO_GENERAL);
|
||||
?>
|
||||
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. **验证**: 修改后一定要查看日志验证是否生效
|
||||
@ -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 ""
|
||||
@ -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 "===================================="
|
||||
Loading…
x
Reference in New Issue
Block a user