241 lines
10 KiB
Python
241 lines
10 KiB
Python
from typing import Any
|
||
|
||
|
||
import traceback
|
||
|
||
from fastapi import APIRouter
|
||
from fastapi.concurrency import run_in_threadpool
|
||
|
||
from apps.jd.schemas.models import (
|
||
AppStoreRequest,
|
||
AppleStoreRequestCategoryEnum,
|
||
PlatPayResponseData,
|
||
QueryCardRequest,
|
||
QueryCardResponseData,
|
||
)
|
||
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, error, success
|
||
from observability.logging import LoggerAdapter, get_logger_with_trace
|
||
|
||
router = APIRouter(tags=["苹果权益充值"])
|
||
logger: LoggerAdapter = get_logger_with_trace(__name__)
|
||
|
||
|
||
@router.post("/app/store", response_model=ApiResponse[PlatPayResponseData])
|
||
async def app_store(
|
||
request_data: AppStoreRequest,
|
||
) -> ApiResponse[PlatPayResponseData] | ApiResponse[Any]:
|
||
"""苹果权益充值"""
|
||
# 接收参数
|
||
order_num = request_data.order_num
|
||
cookies = request_data.cookies.strip()
|
||
res = {}
|
||
|
||
try:
|
||
match request_data.category:
|
||
case AppleStoreRequestCategoryEnum.Apple:
|
||
return error(code=BusinessCode.NOT_IMPLEMENTED)
|
||
# app_store_ = AppStoreSpider(
|
||
# cookies=cookies,
|
||
# face_price=request_data.face_price,
|
||
# order_num=order_num,
|
||
# )
|
||
# code, res, msg = await run_in_threadpool(app_store_.run)
|
||
# logger.info(msg=f"订单ID:{order_num},最终返回日志:{res}")
|
||
# return success(data=res, message=msg)
|
||
case AppleStoreRequestCategoryEnum.CTrip:
|
||
# 100:10164405229636
|
||
# 200:10164405699325
|
||
# 300:10164405273963
|
||
# 500:10164404344795
|
||
# 200:10155862962901
|
||
# 300:10155867355510
|
||
# 500:10155863307550
|
||
# 1000:10155867606890
|
||
# 1000:10164403489305
|
||
# 1000:10157256668464
|
||
# 500:10157256668463
|
||
# 300:10157256668462
|
||
# 200:10157256668461
|
||
# 100:10157256668460
|
||
|
||
skus = {
|
||
10.0: "10186761790338",
|
||
20.0: "10157199199546",
|
||
100.0: "10157256668460",
|
||
200.0: "10155862962901",
|
||
300.0: "10164405273963",
|
||
500.0: "10164404344795",
|
||
1000.0: "10155867606890",
|
||
102.0: "10157256668460",
|
||
308.0: "10155867355510",
|
||
520: "10155863307550",
|
||
1026: "10155867606890",
|
||
}
|
||
if request_data.face_price not in skus:
|
||
return error(
|
||
code=BusinessCode.JD_ORDER_FACE_PRICE_ERR,
|
||
data=PlatPayResponseData(
|
||
**{
|
||
"deeplink": "",
|
||
"order_id": "",
|
||
"pay_id": "",
|
||
"remark": "不支持的充值面额",
|
||
"face_price": 0,
|
||
}
|
||
),
|
||
message="不支持的充值金额",
|
||
)
|
||
err = None
|
||
for _ in range(2):
|
||
try:
|
||
c_trip_spider = XiechengCardSpider(
|
||
cookies=cookies,
|
||
order_num=order_num,
|
||
sku_id=skus[request_data.face_price],
|
||
)
|
||
code, res = await run_in_threadpool(c_trip_spider.run)
|
||
if code == BusinessCode.SUCCESS:
|
||
return success(data=res)
|
||
return error(code=code, data=res, message="请求完成")
|
||
except JDServiceException as e:
|
||
err = 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=order_num)
|
||
if proxy:
|
||
proxy_pool.remove_invalid_proxy(proxy)
|
||
continue
|
||
raise
|
||
except Exception as e:
|
||
logger.error(f"请求失败:{traceback.format_exc()}")
|
||
return error(code=BusinessCode.INTERNAL_ERROR, message=str(e))
|
||
return error(
|
||
code=BusinessCode.JD_ORDER_RISK_ERR,
|
||
message=err.message if err else "风控",
|
||
)
|
||
case AppleStoreRequestCategoryEnum.Walmart:
|
||
skus = {
|
||
100.0: "10140177420168",
|
||
200.0: "10140177579817",
|
||
300.0: "10140177668026",
|
||
500.0: "10140177784201",
|
||
1000.0: "10140177806944",
|
||
}
|
||
if request_data.face_price not in skus:
|
||
return error(
|
||
code=BusinessCode.JD_ORDER_FACE_PRICE_ERR,
|
||
data={},
|
||
message="不支持的充值金额",
|
||
)
|
||
err = None
|
||
for _ in range(2):
|
||
try:
|
||
c_trip_spider = XiechengCardSpider(
|
||
cookies=cookies,
|
||
order_num=order_num,
|
||
sku_id=skus[request_data.face_price],
|
||
)
|
||
code, res = await run_in_threadpool(c_trip_spider.run)
|
||
if code == BusinessCode.SUCCESS:
|
||
return success(data=res)
|
||
return error(code=code, data=res, message="请求完成")
|
||
except JDServiceException as e:
|
||
err = 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=order_num)
|
||
if proxy:
|
||
proxy_pool.remove_invalid_proxy(proxy)
|
||
continue
|
||
raise
|
||
except Exception as e:
|
||
logger.error(f"请求失败:{traceback.format_exc()}")
|
||
return error(code=BusinessCode.INTERNAL_ERROR, message=str(e))
|
||
return error(
|
||
code=BusinessCode.JD_ORDER_RISK_ERR,
|
||
message=err.message if err else "风控",
|
||
)
|
||
except JDServiceException:
|
||
raise
|
||
except Exception as e:
|
||
return error(
|
||
code=BusinessCode.INTERNAL_ERROR,
|
||
message=str(e),
|
||
)
|
||
|
||
|
||
@router.post("/query/card", response_model=ApiResponse[QueryCardResponseData])
|
||
async def query_card(request_data: QueryCardRequest):
|
||
"""查卡密"""
|
||
cookies = request_data.cookies.strip()
|
||
|
||
# 打印参数日志
|
||
logger.info(f"订单:{request_data}")
|
||
|
||
try:
|
||
match request_data.category:
|
||
case AppleStoreRequestCategoryEnum.Apple:
|
||
app_store_ = AppStoreSpider(
|
||
cookies=cookies, order_num=request_data.jd_order_id
|
||
)
|
||
code, res = await run_in_threadpool(
|
||
app_store_.query_card, request_data.jd_order_id
|
||
)
|
||
logger.info(
|
||
f"订单号:{request_data.order_id},订单ID:{request_data.jd_order_id},最终返回日志:{res}"
|
||
)
|
||
if code == BusinessCode.SUCCESS:
|
||
return success(data=res)
|
||
return error(code=code, data=res, message="查询完成")
|
||
case (
|
||
AppleStoreRequestCategoryEnum.CTrip
|
||
| AppleStoreRequestCategoryEnum.Walmart
|
||
):
|
||
err = None
|
||
for _ in range(2):
|
||
try:
|
||
c_trip_spider = XiechengCardSpider(
|
||
cookies=cookies,
|
||
order_num=request_data.jd_order_id,
|
||
sku_id=request_data.order_id,
|
||
)
|
||
code, res = await run_in_threadpool(
|
||
c_trip_spider.get_locdetails, request_data.jd_order_id
|
||
)
|
||
logger.info(
|
||
f"订单号:{request_data.order_id},订单ID:{request_data.jd_order_id},最终返回日志:{res}"
|
||
)
|
||
if code == BusinessCode.SUCCESS:
|
||
return success(data=res)
|
||
except JDServiceException as e:
|
||
err = 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.order_id)
|
||
if proxy:
|
||
proxy_pool.remove_invalid_proxy(proxy)
|
||
continue
|
||
except Exception as e:
|
||
logger.error(f"请求失败:{traceback.format_exc()}")
|
||
return error(
|
||
code=BusinessCode.INTERNAL_ERROR,
|
||
)
|
||
return error(
|
||
code=BusinessCode.JD_ORDER_RISK_ERR,
|
||
message=err.message if err else "风控",
|
||
)
|
||
except Exception as e:
|
||
logger.error(f"查询卡密失败: {traceback.format_exc()}")
|
||
return error(code=BusinessCode.INTERNAL_ERROR, data=None, message="查询异常")
|