批量购买

This commit is contained in:
2026-07-15 12:00:05 +08:00
parent 2e130b98f5
commit 1a9db9328e
3 changed files with 603 additions and 0 deletions

View File

@@ -0,0 +1,88 @@
# 批量购买套餐脚本
该脚本读取只有一列的 CSV逐条调用 `POST /api/admin/orders`,为一批资产购买同一个套餐。
脚本仅使用 Python 标准库,不需要安装依赖。默认只预演,必须增加 `--execute` 才会真实下单。
## CSV 格式
首行表头可选,每行填写一个 ICCID 或虚拟号:
```csv
identifier
89860000000000000001
VIRTUAL000001
```
脚本会在请求前检查空文件、多列和重复资产。发现重复资产时整批终止,避免同一资产被重复购买。
## 预演
```bash
python3 scripts/batch_package_purchase/batch_purchase.py \
--base-url https://cmp-api.example.com \
--csv scripts/batch_package_purchase/assets.example.csv \
--package-id 123
```
预演只校验 CSV 并展示请求示例,不需要 Token也不会调用接口。
## 使用已有 Token 执行
推荐通过环境变量传递 Token避免进入命令历史
```bash
JUNHONG_ADMIN_TOKEN='<后台Access Token>' \
python3 scripts/batch_package_purchase/batch_purchase.py \
--base-url https://cmp-api.example.com \
--csv /path/to/assets.csv \
--package-id 123 \
--execute
```
## 使用账号自动登录后执行
未提供 Token 时,可以使用后台账号调用 `/api/admin/login` 自动获取 Token
```bash
JUNHONG_ADMIN_USERNAME='<后台账号>' \
JUNHONG_ADMIN_PASSWORD='<后台密码>' \
python3 scripts/batch_package_purchase/batch_purchase.py \
--base-url https://cmp-api.example.com \
--csv /path/to/assets.csv \
--package-id 123 \
--execute
```
也可以使用 `--token``--username``--password` 参数。密码优先通过环境变量或交互输入,避免保存在 Shell 历史中。
## 结果文件
默认在输入 CSV 同目录生成:
```text
原文件名_购买结果_YYYYMMDD_HHMMSS.csv
```
结果包含资产标识、成功或失败状态、HTTP 状态码、业务错误码、错误消息、订单 ID、订单号和订单金额。每处理一条都会立即刷新文件中途中断时已完成的结果不会丢失。
为避免覆盖历史结果,`--output` 指定的文件已经存在时脚本会直接报错。
可通过 `--output` 指定结果路径:
```bash
python3 scripts/batch_package_purchase/batch_purchase.py \
--base-url https://cmp-api.example.com \
--csv /path/to/assets.csv \
--package-id 123 \
--output /path/to/result.csv \
--execute
```
## 其他参数
- `--timeout`:单次请求超时秒数,默认 `30`
- `--interval`:每次下单后的等待秒数,默认 `0.2`
- `--execute`:显式开启真实下单。
脚本固定使用 `wallet` 钱包支付,每个资产单独创建一个订单。脚本不会自动重试 POST 请求,避免服务端已成功但客户端未收到响应时重复下单。失败项可根据结果 CSV 人工确认后单独重跑。