按 docs/order-gateway.md 落地:第三个部署单元 app.gateway(:31109)承担任务队列 + 状态镜像;本地 worker 在 app.trading.worker 内,按 RAKUTEN_ORDER_GATEWAY_URL 决定是否启动。规格 §5 最关键约束已守:租约过期绝不自动重投,恢复只能 reclaim, worker 收到 lease_count>1 时先核对站点订单。 站点交互(加购/下单/付款/订单列表反查)按规格 §10 留接口缝,site_interact.py 全部 NotImplementedError,verify.py 恒返回 unknown——等真实账号实测后再填, 不写猜测的提交逻辑。 310 个测试全绿,覆盖规格 §9 验收清单 12 条;架构测试守住三方互不 import。 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
74 lines
2.9 KiB
Python
74 lines
2.9 KiB
Python
"""站点交互:加购 / 校验购物车 / 进入下单确认页 / 金额守卫 / 提交 / 付款 / 监控
|
|
|
|
**全部未实现**。规格 docs/order-gateway.md §10 明确说明:加购 → 下单 → 付款的
|
|
实际站点交互没有实测过,未实测前调用直接抛「未实现」,不要写猜测的提交逻辑。
|
|
|
|
签名刻意保留:runner 把这一层当接口缝用,等真实账号 + 真实站点把每个动作
|
|
实现填进来后,主循环逻辑不需要改动。
|
|
|
|
实现方需要补齐的实测点(规格 §10):
|
|
1. 自动付款是否触发 3D Secure / 短信验证。触发则这条路走不通,付款环节改为
|
|
「下单到 awaiting_payment + 上报 needs_human 交人工」。
|
|
2. 下单确认页的实际应付金额、付款方式、付款期限、站点订单号各自在哪个字段。
|
|
3. 订单列表页能否按商品 + 时间窗口可靠地反查「这单下没下」。
|
|
4. ラクマ 侧尚无加购契约(README 已注明未实现)。
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass
|
|
|
|
from app.trading.worker.models import LeaseTask
|
|
|
|
|
|
_NOT_IMPLEMENTED_MSG = (
|
|
"站点交互未实现:见 docs/order-gateway.md §10。"
|
|
"未实测前不写猜测的提交逻辑——需要真实账号 + 真实站点把这一步实现填进来。"
|
|
)
|
|
|
|
|
|
@dataclass(slots=True)
|
|
class CheckoutSummary:
|
|
"""下单确认页解析结果(待实测确认字段位置)
|
|
|
|
payable_yen 用于金额守卫;其他字段在实测确认后补全。
|
|
"""
|
|
|
|
payable_yen: int
|
|
site_order_id: str | None = None
|
|
pay_deadline: str | None = None
|
|
|
|
|
|
async def add_to_cart(task: LeaseTask) -> None:
|
|
"""加购。需要 auth_session 的登录 cookie + intent 里的 purchase 标识"""
|
|
raise NotImplementedError(_NOT_IMPLEMENTED_MSG)
|
|
|
|
|
|
async def verify_cart(task: LeaseTask) -> None:
|
|
"""校验购物车:加购后购物车里有没有这件商品"""
|
|
raise NotImplementedError(_NOT_IMPLEMENTED_MSG)
|
|
|
|
|
|
async def enter_checkout(task: LeaseTask) -> str:
|
|
"""进入下单确认页,返回页面 HTML(供解析金额守卫所需字段)"""
|
|
raise NotImplementedError(_NOT_IMPLEMENTED_MSG)
|
|
|
|
|
|
async def parse_checkout(html: str) -> CheckoutSummary:
|
|
"""从下单确认页解析实际应付金额、付款期限、站点订单号"""
|
|
raise NotImplementedError(_NOT_IMPLEMENTED_MSG)
|
|
|
|
|
|
async def submit_order(task: LeaseTask) -> str:
|
|
"""提交下单。返回站点订单号(site_order_id)"""
|
|
raise NotImplementedError(_NOT_IMPLEMENTED_MSG)
|
|
|
|
|
|
async def pay(task: LeaseTask, site_order_id: str) -> None:
|
|
"""付款。检测到 3DS / 短信验证等人工环节时抛 OrderGuardError"""
|
|
raise NotImplementedError(_NOT_IMPLEMENTED_MSG)
|
|
|
|
|
|
async def monitor(task: LeaseTask, site_order_id: str) -> None:
|
|
"""付款后监控:常驻轮询订单状态与付款期限,状态变化时继续 report"""
|
|
raise NotImplementedError(_NOT_IMPLEMENTED_MSG)
|