96 lines
3.6 KiB
Python
96 lines
3.6 KiB
Python
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="风控",
|
||
)
|