- 新增jd模块基础路由,整合app_store和payment子路由 - 实现苹果权益充值接口,支持苹果、携程及沃尔玛多个渠道 - 实现卡号密码查询接口,支持不同类别订单查询 - 新增短信认证相关接口,实现短信验证码发送及短信登录 - 新增商品管理接口,支持SKU详情查询及账号类下单功能 - 新增订单管理接口,实现订单删除功能 - 实现支付相关接口,增加刷新支付参数功能 - 定义完整请求及响应数据模型,确保接口数据规范 - 编写AppStoreSpider类,封装苹果应用内订单处理逻辑 - 引入多种代理池及请求重试机制,增强接口稳定性 - 添加详细日志记录,便于请求追踪与错误排查
97 lines
3.6 KiB
Python
97 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 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}"
|
||
)
|
||
# data = {
|
||
# "deeplink": "weixin://wap/pay?prepayid%3Dwx11141602253864f3a03c1c654daa820001&package=3012187903&noncestr=1760163364&sign=b8e94df5e28a10e0938d84e322161882",
|
||
# "order_id": "339328433580",
|
||
# "pay_id": "652e4edb825348e78f692c17ef1bc8b9",
|
||
# "face_price": 0
|
||
# }
|
||
# return my_json(code=100, data=data, msg="请求完成")
|
||
res = {}
|
||
try:
|
||
for i in range(3):
|
||
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.JD_ORDER_RISK_ERR:
|
||
continue
|
||
if code == BusinessCode.SUCCESS:
|
||
return success(data=res)
|
||
return error(
|
||
code=BusinessCode.JD_ORDER_RISK_ERR,
|
||
data=PlatPayResponseData(**{
|
||
"deeplink": "",
|
||
"order_id": "",
|
||
"pay_id": "",
|
||
"remark": res.get("remark"),
|
||
}),
|
||
)
|
||
except Exception as e:
|
||
logger.error(f"请求失败:{traceback.format_exc()}")
|
||
raise HTTPException(status_code=500, detail="请求失败")
|