#!/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 "===================================="