This commit is contained in:
eric
2026-03-10 07:05:35 -05:00
parent 65d7047534
commit ddbf30652c
4 changed files with 60 additions and 4 deletions

View File

@@ -11,14 +11,16 @@
- common: /submit_meetup_application、/create_user
本地调试BASE_URL 需为 ZPAY 可访问地址(如 ngrok
线上部署https://api.hackrobot.cn
线上部署:BASE_URL=https://api.hackrobot.cn(必须为 ZPAY 可公网访问的地址)
"""
import logging
import requests
from fastapi import FastAPI, Request, HTTPException
from fastapi.middleware.cors import CORSMiddleware
from fastapi.responses import JSONResponse
from .config import BASE_URL
from .routers import (
nomadvip_router,
digital_router,
@@ -58,6 +60,38 @@ logging.basicConfig(
handlers=[logging.StreamHandler()],
)
# 启动时校验 BASE_URL线上部署必须为公网可访问地址否则 ZPAY 无法回调)
def _check_base_url():
url = (BASE_URL or "").strip().lower()
if not url:
logging.warning("BASE_URL 未设置,将使用默认值。线上部署请务必设置 BASE_URL 为公网地址")
return
if "localhost" in url or "127.0.0.1" in url or url.startswith("http://192.168.") or url.startswith("http://10."):
logging.warning(
"BASE_URL=%s 疑似内网地址ZPAY 无法回调!线上部署请设置 BASE_URL 为公网地址,如 https://api.hackrobot.cn",
BASE_URL,
)
@app.on_event("startup")
async def startup_event():
_check_base_url()
@app.get("/health")
async def health(check_zpay: str = ""):
"""健康检查。check_zpay=1 时额外检测 zpayz.cn 连通性"""
out = {"status": "ok", "service": "payjsapi", "base_url": BASE_URL}
if str(check_zpay).lower() in ("1", "true", "yes"):
try:
r = requests.get("https://zpayz.cn", timeout=5)
out["zpayz_reachable"] = r.status_code in (200, 301, 302, 404)
except Exception as e:
out["zpayz_reachable"] = False
out["zpayz_error"] = str(e)
return out
# 挂载路由
app.include_router(nomadvip_router)
app.include_router(digital_router)

View File

@@ -115,7 +115,15 @@ class ZPayProvider(PaymentProvider):
params["sign_type"] = "MD5"
params["sign"] = self._md5_sign(params)
resp = requests.post(self.MAPI_URL, data=params, timeout=15)
try:
resp = requests.post(self.MAPI_URL, data=params, timeout=15)
except requests.RequestException as e:
return {
"status": "error",
"provider": self.name,
"msg": f"连接 zpayz.cn 失败: {e}。请检查服务器网络、防火墙或 DNS。",
}
try:
result = resp.json()
except Exception: