@35m/cli

35pay 的命令行工具,所有输出默认是 JSON(一行一个对象),方便 jq / shell 脚本 / AI agent(Claude Code / Aider 等)直接处理。底层就是 @35m/sdk 的薄封装。

安装

# 全局安装
npm i -g @35m/cli

# 或者一次性用,不安装
npx @35m/cli help

鉴权

用环境变量 PAY_KEY 提供 Secret Key(也可以用 --key 标志):

export PAY_KEY=sk_test_xxx          # 或 sk_live_xxx
PAY_KEY
env / --keyrequired
Secret Key。sk_test_ 自动 mock 不扣款,sk_live_ 真支付。
PAY_BASE_URL
env / --base-url
API 基址,默认 https://pay.35team.com。自部署 / 测试覆盖时填。

创建支付会话

35pay checkout create \
  --amount 9900 \
  --currency CNY \
  --description "顾问费" \
  --metadata '{"orderId":"o_001"}' \
  --success-url https://yoursite.com/done \
  --pretty

参数

--amount
integerrequired
金额,最小单位。CNY/USD/EUR 是分(¥99 → 9900),JPY/KRW 是整数本位(¥100 → 100)。详见 API 货币最小单位
--currency
string
默认 CNY。可选 CNY / USD / EUR / JPY / HKD
--description
string
商品描述(200 字内)。
--metadata
JSON string
透传给 webhook 的自定义字段,必须是合法 JSON 字符串。
--success-url
URL
支付成功跳转地址。不传落到 35pay 收据页;传了启用 sync 中转模式,落地时已 paid。
--expires-in
integer
会话有效期(秒),最多 86400。
--pretty
boolean
JSON 输出缩进(默认单行)。

查询会话

35pay checkout get sess_abc123

退款

# 全额退款
35pay refund rec_xyz789 --reason "客户要求"

# 部分退款(金额单位:分)
35pay refund rec_xyz789 --amount 5000 --reason "部分退款"

详细字段含义见 REST API · 退款,CLI 只是把 SDK 的 refund(recordId, amount?, reason?) 暴露成命令行。


脚本 / Agent 场景

所有命令成功时退出码 0,失败时 1,正常输出走 stdout,错误走 stderr,方便管道:

# 一行抓 url
URL=$(35pay checkout create --amount 9900 --currency CNY | jq -r '.url')

# 帮人发付款链接
LINK=$(35pay checkout create --amount 9900 --currency CNY --description "$1" | jq -r '.url')
echo "付款链接:$LINK" | mail -s "付款" customer@example.com

# 批量退款(从 CSV 读 record id)
while IFS=, read -r rec amt; do
  35pay refund "$rec" --amount "$amt" >> refunds.log
done < to-refund.csv
失败时输出形如 {"error":"HTTP 401: Invalid API key"} 到 stderr, 退出码 1。可以用 $?set -e 在脚本里拦截。

AI 编码场景

Claude Code / Aider / Cursor 的 shell 里直接让 agent 调用 35pay

prompt example
# 在 Claude Code 里说:
# "用 35pay 给客户 X 创建一个 99 元的付款链接,帮我把链接写到剪贴板"
#
# Claude Code 会自动调:
35pay checkout create --amount 9900 --currency CNY --description "客户 X 服务费" \
  | jq -r '.url' \
  | pbcopy

如果你用 Claude Desktop / Cursor / Zed(IDE 内对话,不是 shell)→ 用 @35m/mcp; 如果想让 AI 在写新项目时主动想到接 35pay → 装 @35m/skill


退出码与错误

  • 0 — 成功,stdout 是 JSON 结果
  • 1 — 用法错误 / 鉴权失败 / API 报错,stderr 是 {"error":"..."}