diff --git a/app/routers/__pycache__/_digital_base.cpython-312.pyc b/app/routers/__pycache__/_digital_base.cpython-312.pyc index 5ab043f..5cafe26 100644 Binary files a/app/routers/__pycache__/_digital_base.cpython-312.pyc and b/app/routers/__pycache__/_digital_base.cpython-312.pyc differ 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": "数字游民社区报名",