From acadf71ad232cf6d2080d52a14f7beb6ed3577d3 Mon Sep 17 00:00:00 2001 From: eric Date: Thu, 29 Jan 2026 12:24:09 -0600 Subject: [PATCH] 's' --- app/main.py | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/app/main.py b/app/main.py index b402b18..c735ce7 100755 --- a/app/main.py +++ b/app/main.py @@ -9,7 +9,6 @@ import requests from fastapi import Request, HTTPException import logging from pocketbase import PocketBase -from pocketbase.client import ListResult # 新增导入(可选,但明确类型) app = FastAPI() @@ -21,14 +20,12 @@ app.add_middleware( allow_headers=["*"], ) - # ==================== PocketBase 配置 ==================== PB_URL = "https://pocketbase.hackrobot.cn" PB_ADMIN_EMAIL = "xiaoshuang.eric@gmail.com" PB_ADMIN_PASSWORD = "Xiao4669805@" # ======================================================== -# 动态获取已登录的 PocketBase 客户端 def get_pb_client(): client = PocketBase(PB_URL) try: @@ -39,12 +36,11 @@ def get_pb_client(): raise e return client - # 配置日志 logging.basicConfig(filename='xorpay_notify.log', level=logging.INFO, format='%(asctime)s - %(message)s') -# 全局已处理订单(保留原始) +# 全局已处理订单 processed_orders = set() # ==================== XorPay 配置 ==================== @@ -52,16 +48,14 @@ AID = "8220" SECRET = "afcacd99570945f88de62624aaa3578e" # ==================================================== -# memos 配置(保留原始) +# memos 配置 MEMOS_API = "https://qun.hackrobot.cn/api/v1/users" MEMOS_TOKEN = "eyJhbGciOiJIUzI1NiIsImtpZCI6InYxIiwidHlwIjoiSldUIn0.eyJuYW1lIjoiaGFja3JvYm90IiwiaXNzIjoibWVtb3MiLCJzdWIiOiIxIiwiYXVkIjpbInVzZXIuYWNjZXNzLXRva2VuIl0sImlhdCI6MTc1NzQwNTE0OX0.Idn7kBlxE-CoSOXwWuZ1tHGIRKHAIeDyXSafGS5OHsg" -# 官方推荐签名方式 def xorpay_sign(name: str, pay_type: str, price: str, order_id: str, notify_url: str) -> str: raw = name + pay_type + price + order_id + notify_url + SECRET return hashlib.md5(raw.encode('utf-8')).hexdigest().lower() -# 回调验签函数 def verify_xorpay_notify(data: dict) -> bool: received_sign = data.get("sign", "") aoid = data.get("aoid", "") @@ -112,7 +106,6 @@ def create_memos_user(user_id: str, password: str = "123456"): print(f"创建 memos 用户异常: {e}") logging.error(f"创建 memos 用户异常 - username: {user_id}, error: {e}") return {"success": False, "error": str(e)} - @app.post("/payh5") async def payh5(item: dict): @@ -123,7 +116,7 @@ async def payh5(item: dict): pay_type = item.get('type', 'unknown').lower() random_suffix = ''.join(random.choices(string.hexdigits.lower(), k=8)) - timestamp = int(time.time()) + timestamp = int(time.time()) # 修正:去掉多余字符 order_id = f"{user_id}_{pay_type}_order_{timestamp}_{random_suffix}" type_map = { @@ -242,15 +235,14 @@ async def xorpay_notify(request: Request): valid_types = ["vip", "book", "meetup", "video"] if pay_type not in valid_types: - print(f"无效的 pay_type: {pay_type},强制设为 vip 或拒绝写入") + print(f"无效的 pay_type: {pay_type},强制设为 vip") pay_type = "vip" amount_cents = int(float(data.get("pay_price", 0)) * 100) if pay_type == "meetup": solan = pb_client.collection("solan") - # 修复bug:pocketbase-py SDK 用 get_list 而非 list - existing: ListResult = solan.get_list(1, 1, {"filter": f'user_id="{user_id}"'}) + existing = solan.get_list(1, 1, {"filter": f'user_id="{user_id}"'}) if existing.items: record_id = existing.items[0].id solan.update(record_id, { @@ -280,11 +272,10 @@ async def xorpay_notify(request: Request): except Exception as e: print(f"PocketBase 操作失败: {e}") logging.error(f"PocketBase 操作失败 - order_id: {order_id}, error: {e}") - processed_orders.add(order_id) + processed_orders.add(order_id) # 防止重复通知 return "ok" - class CreateUserRequest(BaseModel): username: str = None password: str = None