#!/bin/bash # ===== 全链路支付测试 ===== # 运行: bash tests/payment_e2e_test.sh set -e BASE_URL="https://xmclassmate.top" echo "==========================================" echo " 全链路支付测试" echo " 环境: ${BASE_URL}" echo "==========================================" # Step 1: 健康检查 echo "" echo "[1/5] 健康检查..." HEALTH=$(curl -s -o /dev/null -w "%{http_code}" ${BASE_URL}/health) echo " GET /health → HTTP ${HEALTH}" [ "$HEALTH" = "200" ] && echo " ✅ 通过" || { echo " ❌ 失败"; exit 1; } # Step 2: 支付页面可访问 echo "" echo "[2/5] 支付页面..." PAY_CODE=$(curl -s -o /dev/null -w "%{http_code}" ${BASE_URL}/payment) echo " GET /payment → HTTP ${PAY_CODE}" [ "$PAY_CODE" = "200" ] && echo " ✅ 通过(维护模式已关闭)" || { echo " ❌ 失败(返回503=维护中)"; exit 1; } # Step 3: 访客登录 echo "" echo "[3/5] 访客登录..." LOGIN_RESULT=$(curl -s -X POST ${BASE_URL}/api/guest-login) JWT=$(echo "$LOGIN_RESULT" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['token'])" 2>/dev/null) USER_ID=$(echo "$LOGIN_RESULT" | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['user_id'])" 2>/dev/null) echo " POST /api/guest-login → user_id=${USER_ID}" [ -n "$JWT" ] && echo " ✅ JWT 获取成功" || { echo " ❌ JWT 获取失败"; exit 1; } # Step 4: 用户信息 echo "" echo "[4/5] 用户信息..." PROFILE=$(curl -s -H "Authorization: Bearer ${JWT}" ${BASE_URL}/api/user/profile) echo " GET /api/user/profile → $(echo $PROFILE | python3 -c "import sys,json; print('is_member='+str(json.load(sys.stdin)['data']['is_member']))" 2>/dev/null)" # Step 5: 生成支付表单 echo "" echo "[5/5] 支付宝支付表单..." RESULT=$(curl -s "${BASE_URL}/payment/page?package=monthly&jwt=${JWT}") if echo "$RESULT" | grep -q "sign"; then METHOD=$(echo "$RESULT" | grep -oP '(?<=name="method" value=")[^"]+') APP_ID_CHECK=$(echo "$RESULT" | grep -oP '(?<=name="app_id" value=")[^"]+') GATEWAY=$(echo "$RESULT" | grep -oP '(?<=action=")[^"]+') echo " method: ${METHOD}" echo " app_id: ${APP_ID_CHECK}" echo " gateway: ${GATEWAY}" echo " ✅ 支付表单生成成功" elif echo "$RESULT" | grep -q "失败\|Error"; then echo " ❌ 支付表单生成失败" echo "$RESULT" | grep -oP '(?<=]*>)[^<]+' | head -3 exit 1 else echo " ❌ 未知响应" echo "${RESULT:0:200}" exit 1 fi echo "" echo "==========================================" echo " 全链路测试通过 ✅" echo "==========================================" echo "" echo "手动验证:" echo "1. 打开 https://xmclassmate.top/payment" echo "2. 点击「访客登录」→ 选择套餐 → 支付" echo "3. 浏览器将跳转到支付宝 alipay.trade.page.pay 页面"