Files
danial 95f949c79f 函数中异常处理及proxy池相关代码结构,提升容错性
- 优化XiechengCardSpider初始化调用顺序,提前获取x_token
- 修正部分日志打印格式,统一异常日志输出
- 更新代理服务器默认请求地址,移除多余参数
2025-11-04 14:24:32 +08:00

96 lines
3.6 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import traceback
from fastapi import APIRouter, HTTPException
from starlette.concurrency import run_in_threadpool
from apps.jd.schemas.models import (
PlatPayRequest,
PlatPayResponseData,
RefreshPaymentRequest,
)
from apps.jd.services.app_store import AppStoreSpider
from apps.jd.services.ctrip import XiechengCardSpider
from apps.shared.proxy_pool.proxy_pool import ProxyPoolFactory
from core.config import ProxyPoolType
from core.exceptions import JDServiceException
from core.responses import ApiResponse, BusinessCode, success, error
from observability.logging import get_logger_with_trace
router = APIRouter(prefix="/order", tags=["支付"])
logger = get_logger_with_trace(__name__)
# @router.post("/plat_pay_channel", response_model=ApiResponse)
# async def plat_pay_channel(request_data: PlatPayRequest):
# """获取微信app端支付参数"""
# # 接收参数
# order_id = request_data.order_id
# jd_order_id = request_data.jd_order_id
# face_price = float(request_data.face_price)
# pay_id = request_data.pay_id
# cookies = request_data.cookies.strip()
# # 打印日志
# logger.info(
# f"获取微信app端支付参数 cookie{cookies} order_id{order_id} face_price{face_price} pay_id{pay_id}"
# )
# try:
# apple_store_spider = AppStoreSpider(
# cookies=cookies,
# order_num=order_id,
# face_price=face_price,
# )
# code, deeplink = await run_in_threadpool(
# apple_store_spider.ios_pay, jd_order_id, pay_id
# )
# data = PlatPayResponseData(
# deeplink=deeplink, order_id=order_id, pay_id=pay_id, face_price=face_price
# )
# return success(code=getattr(code, "value", code), data=data, msg="请求成功")
# except Exception as e:
# logger.error("请求失败" + traceback.format_exc(), exc_info=True)
# raise HTTPException(status_code=500, detail="请求失败")
@router.post("/refresh-payment", response_model=ApiResponse[PlatPayResponseData])
async def refresh_payment(request_data: RefreshPaymentRequest):
"""获取微信app端支付参数"""
# 打印日志
logger.info(
f"获取微信app端支付参数 cookie{request_data.cookies} order_id{request_data.order_id} pay_id{request_data.pay_id} user_order_id{request_data.user_order_id}"
)
res = {}
for i in range(3):
try:
c_trip_spider = XiechengCardSpider(
cookies=request_data.cookies,
order_num=request_data.user_order_id,
sku_id="",
)
code, res = await run_in_threadpool(
c_trip_spider.refresh_payment_url,
request_data.pay_id,
request_data.order_id,
)
if code == BusinessCode.SUCCESS:
return success(data=res)
except JDServiceException as e:
if e.code == BusinessCode.JD_ORDER_RISK_ERR:
proxy_pool = ProxyPoolFactory.get_proxy_pool(
ProxyPoolType.EXPIRING, expire_time=60
)
proxy = proxy_pool.get_proxy(order_id=request_data.user_order_id)
if proxy:
proxy_pool.remove_invalid_proxy(proxy)
continue
raise e
except Exception as e:
logger.error(f"请求失败:{traceback.format_exc()}")
raise HTTPException(status_code=500, detail="请求失败")
return error(
code=BusinessCode.JD_ORDER_RISK_ERR,
message="风控",
)