feat: add card rotation, customer lookup, and concurrent eligibility checks
Add encrypted card pool management, persisted card and outbound rotation, and per-card decline cooldowns. Improve customer and redemption-code lookup, recovery controls, and filtering; rebuild frontend assets and refresh mock screenshots. Give read-only eligibility checks four independent slots so payment processing no longer blocks them. Cover concurrency, slot cleanup, card rotation, and lookup behavior with tests.
This commit is contained in:
47 files changed
+3033
-501
No files matched your search
@@ -75,14 +75,25 @@ PY
|
||||
|
||||
包含 selector、urltest 等分组的订阅须先移除这些元素,仅保留独立代理节点。运行程序不自动拉取订阅,避免未经核验的订阅更新改变付款路径。
|
||||
|
||||
## 节点选择和订单绑定
|
||||
## 卡池轮换、节点选择和订单绑定
|
||||
|
||||
付款卡保存在加密的 `cards` 数组(兼容旧的单张 `card` 记录),Stripe 付款按「卡 × 节点」组合随机轮换:
|
||||
|
||||
- 每 3 个连续付款订单使用同一组合(不按客户,按提交顺序)。第 4 个订单重新随机选择卡和可用节点;同一张卡不会连续被选为相邻组合(可用卡足够时)。
|
||||
- 任一订单被银行拒付后,当前组合立即作废;下一次提交(包括管理员补单)自动换到另一张卡和一个可用节点。被拒的那张卡进入 30 分钟冷却,期间不再参与轮换;其他卡不够用时会自动回退重新启用。普通拒付不再因累计次数暂停全站,也不影响其他组合。
|
||||
- 只有支付方明确返回 `do_not_try_again` 时才永久封锁对应那张卡;其余卡继续轮换,全部卡都被永久封锁才暂停全站,可用 `xgift cards unblock` 显式解除(同时清除拒绝冷却)。
|
||||
- 旧单卡时代的已拒订单没有卡指纹记录,首次补单会按旧 `card` 记录给对应卡补上冷却,避免用旧卡反复重试。
|
||||
- 补单与普通付款共用同一套轮换逻辑;已被拒订单不会重复使用原卡重试,而未提交付款的订单重复尝试会继续沿用已绑定的组合,不重复占用轮换名额。
|
||||
- 卡池变化(增删卡)会形成新的集合指纹,自动重置支付保护状态和后台补单预览;仅轮换不会改变指纹。CLI 用 `xgift cards list|add|remove|unblock|rotate` 管理。
|
||||
|
||||
节点选择与旧版一致:
|
||||
|
||||
- 新绑定订单首次进入 Stripe 流程时,从未冷却的池内节点随机选择,`direct` 与代理均可参与。若有不同 `server` 的节点,会避开上一新订单的服务器;如果全部同服务器,则尽量避开上一节点。
|
||||
- 一次批量补单中的不同客户分别选择。随机选择不保证各节点次数相等;不同协议节点也可能共享同一公网 IP。
|
||||
- 选择发生在第一个 Stripe 请求前,所以“仅生成链接”中的 Stripe 核验也可能建立节点绑定。
|
||||
- `stripe-route:<recipient_id>` 保存加密的节点配置快照、节点指纹和时间,正常情况下持续沿用。节点因连接故障进入冷却后,可原子归档到 `stripe-route-history:*` 并切换到可用出口。后台显示 `direct` 或 `node-` 加指纹前 12 位,完整凭据不返回网页。
|
||||
- `stripe-route:<recipient_id>` 保存加密的节点配置快照、节点指纹、卡指纹和时间,正常情况下持续沿用。节点因连接故障进入冷却后,可原子归档到 `stripe-route-history:*` 并切换到可用出口;卡指纹保持不变。后台显示 `direct` 或 `node-` 加指纹前 12 位,完整凭据不返回网页。
|
||||
- 以前没有节点绑定的待处理订单,在功能启用后首次访问 Stripe 时建立绑定。绑定不代表已付款。
|
||||
- 明确银行卡拒付不会自动换节点重付。金额校验、幂等、付款间隔和支付方禁止重试指令继续生效;普通拒付不再因累计两次而触发全站暂停。
|
||||
- 明确银行卡拒付不会在同一个组合上重复扣款。金额校验、幂等、付款间隔和支付方禁止重试指令继续生效。
|
||||
|
||||
## 网络重试与 6 小时冷却
|
||||
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 215 KiB After Width: | Height: | Size: 238 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 214 KiB After Width: | Height: | Size: 238 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 64 KiB After Width: | Height: | Size: 93 KiB |
Reference in new issue
Block a user