今日星座运势按量付费
触发条件
仅当用户明确表达购买、下单或支付今日星座运势商品时使用本 Skill。
以下情况不要触发付费流程:
- 用户只咨询星座、运势、塔罗或玄学内容,没有购买意图。
- 用户没有明确指定十二星座之一。
- 用户明确表示只查看免费内容。
用户必须从以下值中选择一个星座:
白羊座
金牛座
双子座
巨蟹座
狮子座
处女座
天秤座
天蝎座
射手座
摩羯座
水瓶座
双鱼座
用户只给出“白羊”“金牛”等简称时,可规范为完整名称后再继续;无法唯一判断时必须先追问。
前置条件
- 已部署一个符合 AI 按量付费协议的星座运势资源接口。
- 资源接口使用
GET,通过查询参数zodiac_sign接收星座。 - 未付款请求返回
HTTP 402和Payment-Needed响应头。 - 已安装买家支付能力:
npx -y @alipay/agent-payment@latest install
- 确认官方 CLI 可用:
alipay-bot --version
@alipay/agent-payment 用于买家付款。不要用本 Skill 的脚本自行实现付款、签名、收银台或 Payment-Proof 生成。
必填配置
运行前必须确定完整的资源接口地址,例如:
http://localhost:3000/api/fortune?scene=agent
生产地址必须是公网 HTTPS 地址。服务端登记地址、服务端实际地址和 Skill 使用的地址必须一致,包括协议、域名、路径和已有查询参数。
单次价格不写在 Skill 中。必须以服务端返回的 Payment-Needed.protocol.amount 为准,并与支付宝服务市场登记价格一致。
脚本
本 Skill 使用:
scripts/fortune-paid.mjs
脚本只负责:
- 发起原始资源请求并保存账单。
- 调用官方
alipay-bot的 402 买家支付能力。 - 调用官方 CLI 查询原订单并取得服务端结果。
脚本不接触私钥,不实现付款逻辑,不生成或改写 Payment-Proof。
标准流程
第一步:探测资源并取得 402 账单
为本次请求生成一个不可猜测且不复用的 SESSION_ID。状态目录必须位于当前 Skill 包之外,例如使用系统临时目录中的独立目录。
执行:
node scripts/fortune-paid.mjs probe \
--endpoint "http://localhost:3000/api/fortune" \
--zodiac "白羊座" \
--session-id "<SESSION_ID>" \
--state-dir "<STATE_DIR>"
脚本行为:
- 向资源接口发送
GET请求,查询参数包含zodiac_sign。 - 如果接口直接返回
HTTP 200,输出资源结果。 - 如果接口返回
HTTP 402,解析并校验Payment-Needed,保存账单和原始请求上下文。 - 其他状态码视为失败,不进入付款。
402 时脚本输出类似:
{
"kind": "payment_required",
"http_status": 402,
"session_id": "<SESSION_ID>",
"state_dir": "<STATE_DIR>",
"payment_summary": {
"amount": "0.01",
"currency": "CNY",
"goods_name": "今日星座运势",
"resource_id": "/api/fortune",
"pay_before": "2026-10-29T20:30:00+08:00"
}
}
拿到 payment_summary 后,向用户展示:
- 本次业务目的,例如“查询白羊座今日运势”。
- 实际商品名称。
- 实际账单金额和币种。
- 这是单次付费请求。
在调用付款命令前,必须得到用户明确同意。
第二步:调用官方买家支付能力
用户确认后执行:
node scripts/fortune-paid.mjs pay \
--state-dir "<STATE_DIR>"
脚本使用已保存的账单文件调用:
alipay-bot 402-buyer-pay
付款入口、扫码或授权过程由官方 CLI 负责。不要自行拼接付款链接,不要自行生成 Payment-Proof。
脚本成功启动支付流程后,等待用户完成付款,并保留官方 CLI 返回的 out_shake_no 或等价订单标识。
第三步:查询原订单并交付资源
用户完成付款后执行:
node scripts/fortune-paid.mjs complete \
--state-dir "<STATE_DIR>" \
--out-shake-no "<OUT_SHAKE_NO>"
脚本使用保存的原始资源地址和请求方式调用:
alipay-bot 402-query-payment-status
必须继续使用原订单、原资源地址和原请求方式。不得重新创建订单后再扣一次款。
成功后,只交付服务端实际返回的 zodiac_sign 和 fortune。不得自行生成、扩写、润色或重新随机运势。
支付状态处理
- 用户尚未付款:等待用户完成付款,不要交付运势。
- 官方 CLI 显示处理中:按官方 CLI 的查询能力继续查询原订单。
- 状态不明:先查询原订单,不要重新付款。
- 明确付款失败:说明失败原因,不交付运势。
- 履约回执失败:保留原订单状态并按官方 CLI 文档恢复,不要要求用户再次付款。
- 服务端返回
FULFILLMENT_CONFIRM_FAILED:不把响应当作成功交付,按服务端提示使用同一订单重试履约确认。
安全约束
- 不在 Skill 包中保存生产私钥、API Token、
.env、订单状态或付款过程产物。 - 不把
Payment-Proof原文输出到普通日志、聊天记录或 Markdown。 - 不自行实现买家付款、签名、验签或收银台。
- 不修改或重新编码
Payment-Needed。 - 不拼接支付宝付款链接。
- 不把
out_trade_no、trade_no、out_shake_no或Payment-Proof混用。 - 不因回执失败重复扣费。
- 不交付未经服务端确认的结果。
依赖边界
@alipay/agent-payment:买家支付能力,提供官方alipay-bot402 支付命令。- 业务资源接口:由卖家部署,负责 HTTP 402、验付、资源交付和履约确认。
- 本 Skill:负责触发判断、参数传递、调用官方买家能力并展示结果。
本地验证
在发起真实付款前,只需要验证到“取得 402 账单并停在上一步”:
- 启动符合 AI 按量付费规范的本地资源接口。
- 使用
probe请求接口。 - 确认返回
kind=payment_required、HTTP 402 和完整账单摘要。 - 确认状态目录和账单文件未进入 Skill 包。
- 确认没有调用付款命令。
真实付款与交付需要等部署方确认服务地址、价格、产品和买家支付环境后再验证。
失败处理
npm或npx不可用:停止并说明缺少 Node.js/npm。alipay-bot不存在:执行官方安装命令后重试。- 星座非法:要求用户重新选择,不发起请求。
- 资源接口返回 200:直接交付服务端结果,不重复付款。
- 资源接口返回 402 但没有
Payment-Needed:停止,提示服务端协议不符合要求。 Payment-Needed缺少必填字段:停止,提示服务端账单不完整。- 账单已过期:重新执行一次
probe,不要复用旧账单。 - 官方 CLI 未返回订单标识:保留 CLI 原始状态,不要猜测订单号,不要重新付款。
- 查询仍为处理中:继续查询原订单。
- 查询失败:原样保留官方 CLI 的错误信息,不自行编造成功结果。