From 4634b16cf8be6497bbeb8035d6d6b86ea8a99c25 Mon Sep 17 00:00:00 2001 From: eric Date: Fri, 13 Mar 2026 05:52:35 -0500 Subject: [PATCH] 'c1' --- .../__pycache__/_digital_base.cpython-312.pyc | Bin 15906 -> 16158 bytes app/routers/_digital_base.py | 17 ++++++++++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/app/routers/__pycache__/_digital_base.cpython-312.pyc b/app/routers/__pycache__/_digital_base.cpython-312.pyc index 5ab043ff705d878f69c97b958e471bd96aaf8b63..5cafe261827b22de090c79d00d8b11f22829859f 100644 GIT binary patch delta 3128 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 diff --git a/app/routers/_digital_base.py b/app/routers/_digital_base.py index 7361955..48aa621 100644 --- a/app/routers/_digital_base.py +++ b/app/routers/_digital_base.py @@ -69,6 +69,10 @@ def create_digital_router(prefix: str, project_name: str, site_id: str | None = random_suffix = "".join(random.choices(string.hexdigits.lower(), k=8)) timestamp = int(time.time()) order_id = f"{user_id}_{pay_type}_order_{timestamp}_{random_suffix}" + return_url = item.get("return_url") + if return_url and "order_id=" not in return_url and "out_trade_no=" not in return_url: + sep = "&" if "?" in return_url else "?" + return_url = f"{return_url}{sep}order_id={order_id}" type_map = { "book": "购买书籍", "meetup": "数字游民社区报名", @@ -84,7 +88,7 @@ def create_digital_router(prefix: str, project_name: str, site_id: str | None = total_fee_yuan=total_fee_yuan, pay_type=channel, notify_url=notify_url, - return_url=item.get("return_url"), + return_url=return_url, client_ip=item.get("client_ip"), ) _safe_log( @@ -94,7 +98,7 @@ def create_digital_router(prefix: str, project_name: str, site_id: str | None = order_id, provider.name, notify_url, - item.get("return_url") or "", + return_url or "", ) if provider.name == "xorpay": return { @@ -139,13 +143,16 @@ def create_digital_router(prefix: str, project_name: str, site_id: str | None = pay_type = item.get("type", "unknown").lower() return_url = item.get("return_url") device = item.get("device", "pc") + random_suffix = "".join(random.choices(string.hexdigits.lower(), k=8)) + timestamp = int(time.time()) + order_id = f"{user_id}_{pay_type}_order_{timestamp}_{random_suffix}" + if return_url and "order_id=" not in return_url and "out_trade_no=" not in return_url: + sep = "&" if "?" in return_url else "?" + return_url = f"{return_url}{sep}order_id={order_id}" client_ip = item.get("client_ip") or (request.client.host if request.client else "127.0.0.1") forwarded = request.headers.get("x-forwarded-for") if forwarded: client_ip = forwarded.split(",")[0].strip() - random_suffix = "".join(random.choices(string.hexdigits.lower(), k=8)) - timestamp = int(time.time()) - order_id = f"{user_id}_{pay_type}_order_{timestamp}_{random_suffix}" type_map = { "book": "购买书籍", "meetup": "数字游民社区报名",