API REFERENCE
开发者 API 文档
商品查询、余额采购与订单发货 · 卡密兑换与订阅核查
基础地址 https://gpt.fkphp.com
更新 2026-10-21 · 发卡金额 CNY · 开通费 USDT · 全部接口 POST
1. 接入与业务流程
注册本站账号,在开发者中心创建 USDT 开通订单,默认开通费20 USDT(以页面当前后台配置为准),加不超过0.999 USDT的识别尾差。仅支持 TRC20,20分钟内一次性准确转账;链上确认后自动开通,验证登录密码领取首次密钥。开通费不计入拿货余额;异常付款及退款联系客服人工核实。
商户使用人民币预存余额拿货。开通后在开发者中心发起 USDT 自助充值,使用 TRC20 按订单显示的三位小数金额在20分钟内准确转账,到账核验后自动增加人民币余额。汇率以创建充值订单时后台配置为准,含识别尾差的实收 USDT 全部折算,人民币向下取整到分;后续汇率变化不影响原单。异常收款由客服核实真实链上流水,重复扫描和重试不会重复入账。开发者中心可查看余额与流水,凭本站登录密码重置 API 密钥。已有商户无需重复支付开通费。
你的程序负责向自己的买家展示商品、设置零售价并收款;再用自己的商户余额调用本站采购接口。拿货按本站当前售价计费,你可以在此基础上自行加价。本站不会代你的程序向买家收款。
先拉取商品 → 查询实际规格总价 → 你的程序确认买家付款 → 以固定 request_no 采购 → 保存本站 tradeNo 并查单 → 领取卡密 → 按卡密类型提交兑换。价格、库存以下单重新核查为准。建议传 max_amount 限制本次可接受的拿货总金额。
接口只开放当前上架、有效、可识别规格的自动发货商品;预选卡、自定义设备和优惠券暂未开放。基础路径与上游常用协议相同,使用本站凭据和本站商品编码。不要填写其他销售站点的编码或卡密。
2. 请求与鉴权
所有机器接口仅接受 POST application/x-www-form-urlencoded;包括兑换接口。Session 对象请先 JSON 编码成 session_info 字符串。不要在 URL、浏览器、日志、公开仓库或聊天截图中放 app_key、签名、卡密或账号凭据。
每次请求带 app_id、sign_type、timestamp、nonce、sign。timestamp 为 Unix 秒时间戳,与服务器相差不超过300秒;nonce 为16~64位字母数字、下划线或短横线,每次 HTTP 请求重新生成。相同 nonce 会拒绝;采购重试只换 nonce/timestamp,request_no 和全部业务参数保持原样。
推荐 HMAC-SHA256:去掉 sign,按顶层键名排序,删除值严格为空字符串的字段(保留0),使用 PHP http_build_query 的 RFC1738 表单编码,以 app_key 为密钥计算小写 HMAC-SHA256。不要 URL 解码。嵌套 sku/fields 数组的顺序与发送内容保持一致。
兼容 MD5(sign_type=MD5 或省略):排序和空串处理同上,编码后追加 &key=app_key,再整体 urldecode 后计算小写 MD5。该旧算法存在分隔符歧义,因此 MD5 参数值不允许 &、= 或控制字符;包含这类 Session/Token 的请求必须使用 HMAC-SHA256。
timestamp/nonce 是相对原常用协议增加的必填防重放字段。inventory.config 返回 JSON 字符串,并额外标明 config_format=json;不是 INI。兑换也需商户签名及卡密归属校验。这些差异需要接入方适配,不能直接当作原站的全部协议替换。
| 公共字段 | 类型 | 说明 |
|---|---|---|
| app_id | string | 本站开通的商户 App ID |
| sign_type | string | 推荐 HMAC-SHA256;兼容 MD5 |
| timestamp | string | Unix 秒时间戳 |
| nonce | string | 每次请求不同的16~64位随机值 |
| sign | string | 小写十六进制签名;不要提交 app_key |
3. 商品与采购接口
code 类似 TS-P4,是本站商品编码;不要把分类 ID、卡密或供应商编码当作商品编码。列表价格仅作参考,具体规格和数量以 valuation 和 trade 的金额为准。inventory.factory_price 是你在本站的拿货参考价,不是本站供应商成本。
item 字段包括 id、code、name、description、price、user_price、stock、delivery_way、contact_type、password_status、minimum、maximum、config、widget、draft_status。当前 draft_status 固定为0。config.category、sku_price、wholesale/category_wholesale 中的价格均转换为本站售价。
contact_type:0不限、1手机号、2邮箱、3QQ。password_status=1 时提交6~64位 password(订单查单密码,不能填账号登录密码)。widget 项含 name/title/required,建议按 fields[控件name] 提交,也兼容非保留名称的顶层控件字段。sku 使用 sku[规格名]=选项;不传 JSON 字符串。
| 路径(全部 POST) | 额外参数 | 返回要点 |
|---|---|---|
| /shared/authentication/connect | 无 | shopName、可用 balance、currency=CNY |
| /shared/commodity/items | 无 | 分类数组,每项 name、children 商品数组 |
| /shared/commodity/item | code | 商品详情、本站售价、规格 config 和 widget |
| /shared/commodity/stock | code;可选 race、sku | 实时 stock;不预留库存 |
| /shared/commodity/inventoryState | shared_code、num;可选 race、sku | available=true 表示当时检查通过,不预留库存 |
| /shared/commodity/inventory | sharedCode;可选 race、sku | count、price、user_price、factory_price、config、config_format |
| /shared/commodity/valuation | code、num;可选 race、sku | price 为本次数量和规格的人民币总价;price_scope=total |
| /shared/commodity/trade | shared_code、num、request_no;其余按商品要求 | 本站 tradeNo、实际扣款 amount、secret、state、settlement |
| /shared/commodity/query | tradeNo 或原 request_no | 仅查询当前商户自己的订单;不重新购买 |
连接商户与查询余额
/shared/authentication/connect鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
验证本站商户凭据,返回店铺名称和人民币可用余额。开通费用不会加入此余额。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 无额外参数 | — | — | 只需公共鉴权字段 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/shared/authentication/connect', array (
));响应示例
{
"code": 200,
"error": "",
"msg": "success",
"data": {
"shopName": "Token Store",
"balance": "500.00",
"currency": "CNY"
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| shopName | string | 本站店铺名 |
| balance | string | 可用于采购的人民币余额,两位小数 |
| currency | string | 固定 CNY |
- 不扣款。可用于接入时测试签名;余额以采购事务内实际检查为准。
获取商品分类列表
/shared/commodity/items鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
返回当前上架且可通过接口采购的自动发货商品,按分类分组。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| 无额外参数 | — | — | 只需公共鉴权字段 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/shared/commodity/items', array (
));响应示例
{
"code": 200,
"error": "",
"msg": "success",
"data": [
{
"name": "AI 订阅",
"children": [
{
"id": 4,
"code": "TS-P4",
"name": "示例 AI 订阅商品",
"description": "请核对商品及账号要求",
"price": "151.80",
"user_price": "151.80",
"stock": "10",
"delivery_way": 0,
"draft_status": 0,
"draft_premium": "0.00",
"contact_type": 2,
"password_status": 0,
"minimum": 1,
"maximum": 1000,
"config": {},
"widget": [],
"currency": "CNY"
}
]
}
]
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| data | array | 分类数组,每项 name 和 children |
| children | array | 商品对象,字段含义见商品详情接口 |
- 列表来自本站同步缓存,通常每10分钟刷新。生成采购订单时仍实时核价与查库存。
获取商品详情与规格
/shared/commodity/item鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
实时读取商品并返回本站售价、规格与必填信息。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| code | string | 是 | 本站商品编码,如 TS-P4,从商品列表获得 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/shared/commodity/item', array (
'code' => 'TS-P4',
));响应示例
{
"code": 200,
"error": "",
"msg": "success",
"data": {
"id": 4,
"code": "TS-P4",
"name": "示例 AI 订阅商品",
"description": "请核对商品及账号要求",
"price": "151.80",
"user_price": "151.80",
"stock": "10",
"delivery_way": 0,
"draft_status": 0,
"draft_premium": "0.00",
"contact_type": 2,
"password_status": 0,
"minimum": 1,
"maximum": 1000,
"config": {},
"widget": [],
"currency": "CNY"
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| code | string | 本站唯一商品编码,下单使用此值 |
| name / description | string | 商品名称及购买说明 |
| price / user_price | string | 本站人民币参考单价,具体规格/数量需询价 |
| stock | string | 库存参考值;不表示已预留 |
| delivery_way / draft_status | integer | 当前均为0:自动发货、不开放预选卡 |
| contact_type | integer | 0不限、1手机号、2邮箱、3QQ |
| password_status | integer | 1时采购必须提交6~64位 password |
| minimum / maximum | integer | 商品允许的购买数量范围 |
| config | object | 种类 category、规格 sku / sku_price、阶梯价 wholesale / category_wholesale |
| widget | array | 自定义填写项 name、title、required;采购填 fields[name] |
| currency | string | 固定 CNY |
- config.category 的键用于 race;config.sku 的维度和选项用于 sku。涉及 sku_price 的组合键由商品定义,不能猜测价格或漏选规格。
- wholesale 为数量门槛对应单价;category_wholesale 为按种类区分的阶梯价。展示值仅参考,请用 valuation 得到总价。自定义控件按 fields[控件名] 传入。
查询实时库存
/shared/commodity/stock鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
检查指定商品/规格当前库存。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| code | string | 是 | 本站商品编码,如 TS-P4,从商品列表获得 |
| race | string | 按商品 | config.category 的键名;无种类时省略 |
| sku | array | 按商品 | 表单数组 sku[规格名]=选项,不是 JSON 字符串 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/shared/commodity/stock', array (
'code' => 'TS-P4',
));响应示例
{
"code": 200,
"error": "",
"msg": "success",
"data": {
"stock": "10"
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| stock | string | 当前库存值;保持原始库存表示,不把非数字状态当成无限库存 |
- 只读取、不锁定库存;库存可能在采购之前变化。
检查购买数量是否可用
/shared/commodity/inventoryState鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
按商品、数量、种类及规格检查当前能否购买。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| shared_code | string | 是 | 本站商品编码,注意下划线 |
| num | integer | 建议 | 默认1;1~1000且满足商品 minimum / maximum |
| race | string | 按商品 | config.category 的键名;无种类时省略 |
| sku | array | 按商品 | 表单数组 sku[规格名]=选项,不是 JSON 字符串 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/shared/commodity/inventoryState', array (
'shared_code' => 'TS-P4',
'num' => '1',
));响应示例
{
"code": 200,
"error": "",
"msg": "success",
"data": {
"available": true,
"num": 1
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| available | boolean | true 表示本次检查通过 |
| num | integer | 本次检查的数量 |
- 失败返回业务错误而非一定返回 available=false。此接口不会创建订单、扣款或预留库存。
获取库存与定价配置
/shared/commodity/inventory鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
获取库存摘要和商品配置,适合服务端刷新缓存。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| sharedCode | string | 是 | 本站商品编码;此接口使用驼峰 sharedCode |
| race | string | 按商品 | config.category 的键名;无种类时省略 |
| sku | array | 按商品 | 表单数组 sku[规格名]=选项,不是 JSON 字符串 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/shared/commodity/inventory', array (
'sharedCode' => 'TS-P4',
));响应示例
{
"code": 200,
"error": "",
"msg": "success",
"data": {
"count": 10,
"delivery_way": 0,
"draft_status": 0,
"price": "151.80",
"user_price": "151.80",
"factory_price": "151.80",
"config": "{}",
"config_format": "json",
"is_category": false
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| count | integer | 数字库存;非数字库存表示会转换为0,请结合 stock 使用 |
| price / user_price / factory_price | string | 均为本站拿货参考价,不是供应商成本 |
| config | string | JSON 字符串,解析一次得到配置对象 |
| config_format | string | 固定 json,不是 INI |
| is_category | boolean | 是否存在种类配置 |
- 配置中的价格已经按本站售价规则计算;不要再使用其他站点的商品编码或售价。
计算本次采购总价
/shared/commodity/valuation鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
按当前数量与规格实时询价,不扣款。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| code | string | 是 | 本站商品编码,如 TS-P4,从商品列表获得 |
| num | integer | 建议 | 默认1;1~1000且满足商品 minimum / maximum |
| race | string | 按商品 | config.category 的键名;无种类时省略 |
| sku | array | 按商品 | 表单数组 sku[规格名]=选项,不是 JSON 字符串 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/shared/commodity/valuation', array (
'code' => 'TS-P4',
'num' => '1',
));响应示例
{
"code": 200,
"error": "",
"msg": "success",
"data": {
"price": "151.80",
"currency": "CNY",
"price_scope": "total"
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| price | string | 本次数量合计人民币金额,不是单价 |
| currency | string | CNY |
| price_scope | string | 固定 total |
- 报价不预留库存和价格。建议把核对后的总价作为 trade.max_amount 上限;超出时采购会被拒绝且不扣余额。
使用余额采购发卡
/shared/commodity/trade鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
先预扣商户人民币余额,再采购并返回订单。由你的程序先向买家收款,本站不代你收款。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| shared_code | string | 是 | 本站商品编码,注意下划线 |
| num | integer | 建议 | 默认1;1~1000且满足商品 minimum / maximum |
| request_no | string | 是 | 8~64位字母数字或 _ . : -,独立购买唯一,重试固定不变 |
| race | string | 按商品 | config.category 的键名;无种类时省略 |
| sku | array | 按商品 | 表单数组 sku[规格名]=选项,不是 JSON 字符串 |
| contact | string | 按商品 | 满足 contact_type 的联系方式,最长128字符 |
| password | string | 按商品 | 订单查询密码6~64位,不是目标账号密码 |
| fields | array | 按商品 | 一层表单数组 fields[widget.name]=填写内容 |
| max_amount | decimal | 推荐 | 人民币总额上限,如151.80;两位小数 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/shared/commodity/trade', array (
'shared_code' => 'TS-P4',
'num' => '1',
'request_no' => 'YOUR_ORDER_20261021_0001',
'contact' => 'customer@example.com',
'max_amount' => '151.80',
));响应示例
{
"code": 200,
"error": "",
"msg": "success",
"data": {
"tradeNo": "20261021000000EXAMPLE",
"request_no": "YOUR_ORDER_20261021_0001",
"amount": "151.80",
"order_amount": "151.80",
"status": 1,
"state": "delivered",
"settlement": "charged",
"refunded": false,
"secret": "YOUR_DELIVERED_CARD",
"balance": "348.20",
"cards": {
"available": true
}
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| tradeNo | string | 本站订单号,请保存;不是供应商订单号 |
| request_no | string | 你的原始业务订单号,同一商户幂等 |
| amount | string | 本单实际扣款,已退款时为0.00 |
| order_amount | string | 最初订单总额,退款后仍保留 |
| status | integer | 1表示本站已用余额支付,不表示已兑换成功 |
| state | string | waiting / processing / delivered / failed / manual / unknown |
| settlement | string | reserved预扣、charged交付、refunded退回余额 |
| refunded | boolean | 是否已经退回商户余额 |
| secret | string|null | 仅已付款且 delivered 时返回交付内容;可能是多行卡密或实际发货内容 |
| balance | string | 调用时可用人民币余额 |
| cards.available | boolean | 本站是否已识别可通过兑换 API 使用的卡密 |
- 同一 request_no 和同一组业务参数只创建一单、预扣一次。重复请求只返回原订单,不会再次采购。参数变化返回 request.conflict;nonce / timestamp 每次仍必须更新。
- 余额不足或超出 max_amount 时不创建采购单。超时或 unknown 必须先查原单;禁止改请求号盲目重买。明确失败会自动退回原扣款,原请求号仍指向失败单。
- 未开放 coupon、非零 card_id、非零 device 与 draftCard/draft 预选卡功能;请勿提交未知字段。
查询原采购订单
/shared/commodity/query鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
通过本站订单号或原业务请求号查单,不产生新的采购。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| tradeNo | string | 二选一 | trade 返回的本站订单号 |
| request_no | string | 二选一 | 采购时原业务请求号;两者同时传入时优先 tradeNo |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/shared/commodity/query', array (
'request_no' => 'YOUR_ORDER_20261021_0001',
));响应示例
{
"code": 200,
"error": "",
"msg": "success",
"data": {
"tradeNo": "20261021000000EXAMPLE",
"request_no": "YOUR_ORDER_20261021_0001",
"amount": "151.80",
"order_amount": "151.80",
"status": 1,
"state": "delivered",
"settlement": "charged",
"refunded": false,
"secret": "YOUR_DELIVERED_CARD",
"balance": "348.20",
"cards": {
"available": true
}
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| tradeNo | string | 本站订单号,请保存;不是供应商订单号 |
| request_no | string | 你的原始业务订单号,同一商户幂等 |
| amount | string | 本单实际扣款,已退款时为0.00 |
| order_amount | string | 最初订单总额,退款后仍保留 |
| status | integer | 1表示本站已用余额支付,不表示已兑换成功 |
| state | string | waiting / processing / delivered / failed / manual / unknown |
| settlement | string | reserved预扣、charged交付、refunded退回余额 |
| refunded | boolean | 是否已经退回商户余额 |
| secret | string|null | 仅已付款且 delivered 时返回交付内容;可能是多行卡密或实际发货内容 |
| balance | string | 调用时可用人民币余额 |
| cards.available | boolean | 本站是否已识别可通过兑换 API 使用的卡密 |
- 只能查当前商户的订单。建议至少5秒查一次,超过速率限制须退避。
- delivered 且 secret 非空才取得发货内容;manual / unknown 请人工核实。已失败并退余额的订单仍返回原数据,但外层 code=0、error=trade.failed。
- cards.available=false 可稍后查询原单重试卡密识别,不重复扣费;仅成功识别且属于当前商户的卡密可调用兑换接口。
4. 采购字段与金额
同一商户的相同 request_no 只创建一个本站订单、预扣一次余额,并且不允许改变商品、数量、规格、联系方式等业务参数。重复请求会返回原订单的最新结果,不再次采购。不同商户的相同 request_no 相互隔离。不要把网络重试当作一笔新的购买。
| 字段 | 必填 | 规则 |
|---|---|---|
| shared_code | 是 | 本站商品编码,例如 TS-P4 |
| num | 是 | 1~1000整数,并满足商品最小/最大数量 |
| request_no | 是 | 8~64位字母数字或 _ . : -;你的每次独立购买使用唯一值 |
| contact | 按商品要求 | 有效联系方式,最长128字符 |
| race / sku | 按商品要求 | 选择 item.config 中的种类和规格,键名与选项保持原值 |
| password | 按商品要求 | 订单查询密码,不是 GPT/Claude 登录密码 |
| fields | 按商品要求 | 一层表单数组,填入 widget 定义的填写项 |
| max_amount | 推荐 | 本次人民币总额上限;超过则不创建订单、不扣余额 |
app_id=YOUR_APP_ID
sign_type=HMAC-SHA256
timestamp=YOUR_UNIX_TIMESTAMP
nonce=YOUR_FRESH_RANDOM_NONCE
shared_code=TS-P4
num=1
request_no=YOUR_ORDER_20261021_0001
max_amount=200.00
contact=customer@example.com
sign=YOUR_CALCULATED_SIGNATURE5. 响应、查单与余额处理
发卡接口检查 JSON code=200;HTTP 200 不等于业务成功。业务失败 code=0,并有稳定 error、msg;查已失败订单时 data 仍可能含原 tradeNo 和退款状态。鉴权/格式/限流/服务错误可能同时使用 HTTP 4xx/503,程序须保留原 request_no。
采购先在事务内预扣商户可用余额,settlement=reserved;实际发货后为 charged,不再次扣钱。waiting/processing/manual/unknown 不代表已经交付,secret 可能为 null。status=1 只表示本站订单已用余额支付,不表示卡密已激活或订阅已到账。
上游明确采购失败时,在同一事务内将原金额退回商户余额,settlement=refunded、refunded=true、amount=0.00,order_amount 保留原订单金额。相同请求号仍返回这个失败订单,不会重新扣费。如确需重新购买,应先确认原单已明确失败且已退回余额,再用新的业务请求号发起独立订单。
HTTP 超时、503、响应损坏或 state=unknown 时,可能已经扣款或采购。请使用原 request_no 或已取得的本站 tradeNo 查询,等待原订单处理;不能换新请求号重买,也不能假设已退款。人工发货待核实同样不自动退余额。
只有 state=delivered 且 secret 非空时才取得发货内容。secret 可能是完整卡密、多行卡密、实际礼品链接或发货说明;不要把任何字符串都当成可充值卡密。cards.available=false 时可稍后查原单重试识别,不会再次采购。
| error / state | 含义 | 程序处理 |
|---|---|---|
| balance.insufficient | 商户余额不足,未采购 | 补充余额后重试原请求 |
| price.changed | 超过 max_amount,未采购 | 重新核对报价与买家订单 |
| request.conflict | 原请求号业务参数发生变化 | 恢复原参数,不新建重复订单 |
| auth.replay / auth.expired | nonce 重复或时间超窗 | 生成新 nonce、timestamp,业务请求号不变 |
| trade.failed / refunded | 采购明确失败且余额已退 | 按原单完成售后;新购买须单独确认 |
| unknown / manual | 采购结果未知或已接单未交付 | 查询原单,人工核实,禁止盲目重买 |
| rate.limited | 调用过于频繁 | 遵循 Retry-After,建议查单间隔至少5秒 |
{
"code": 200,
"error": "",
"msg": "success",
"data": {
"tradeNo": "20261021000000EXAMPLE",
"request_no": "YOUR_ORDER_20261021_0001",
"amount": "151.80",
"order_amount": "151.80",
"status": 1,
"state": "delivered",
"settlement": "charged",
"refunded": false,
"secret": "YOUR_DELIVERED_CARD",
"balance": "348.20",
"cards": {"available": true}
}
}6. 兑换接口与账号风险
兑换响应使用 success 布尔值、稳定字符串 code、msg、data,区别于发卡接口的数字 code。鉴权、归属和格式失败仍可能返回数字 code=0 的公共错误结构,程序应先检查 HTTP 与 error。卡密必须完整,不能猜测固定分段格式。
gpt 支持 Session JSON字符串或 account.id 的标准 UUID;不要使用 user.id 或 workplace 工作空间 UID。claude 支持 SessionKey 或 Organization ID;claude_s 只支持 SessionKey;grok 支持 uid。所有调用均需本站商户签名,不能直接使用其他商户、普通商城订单或其他渠道的卡密。
提交前你的程序必须让买家确认卡密、套餐、目标账号和对应风险,再传 confirm=1。GPT force=1 还需单独确认放弃剩余会员时间,传 force_confirm=1;force 不绕过冷却或重复充值限制。
Claude UID 方式无法完整预检账号封禁、订阅和账务状态,错误账号可能消耗卡密但无法到账。建议 SessionKey。Max 商品需按商品和兑换要求核对注册时长、身份认证、账务及账号可用状态。
activation.processing 只查询原卡密,不能反复 activate;activation.verify_failed 表示仍需买家重新登录核实,不能仅凭 use_status=1 判断最终到账。in_cooldown=true 且剩余秒数0表示未知,不代表冷却已结束。查询和刷新不等于重新充值。
如发货内容已取得但卡密尚未识别,先查询原采购订单以重试识别,再调用 check。账号 Session/Token 仅用于本次请求转发,本站不会写入订单、数据库或普通日志;接入方也应采用相同保密措施。
| 路径(全部 POST) | 额外字段 | 说明 |
|---|---|---|
| /api/check | cdkey | 仅当前商户通过本接口购买并交付的卡密 |
| /api/activate | cdkey、confirm=1;session_info 或 uid | 有 Session 时优先 Session,不在 Session 失败后自动降级 UID |
| /api/service_status | cdkey;可选 product | product 若提供必须匹配卡密的 service_product |
| /api/claude_refresh | cdkey、session_info | Claude 的原 SessionKey 刷新;遵循 retry_after |
| /api/refresh-subscription | cdkey、session_info | GPT 的原 Session / Token 查询刷新 |
查询卡密状态与适用产品
/api/check鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
兑换前和提交后查询同一卡密,判断账号类型、冷却及处理进度。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cdkey | string | 是 | 当前商户通过余额采购获得并已识别的完整卡密,最长2000字节 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/api/check', array (
'cdkey' => 'YOUR_DELIVERED_CARD',
));响应示例
{
"success": true,
"code": "activation.ready",
"msg": "可提交兑换",
"data": {
"app": "gpt",
"gift_name": "示例订阅",
"service_product": "EXAMPLE_PRODUCT",
"use_status": 0,
"status_code": "activation.ready",
"status_hint": "请核对目标账号",
"in_cooldown": false,
"cooldown_remaining": 0
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| success | boolean | 请求业务结果,不等于订阅到账 |
| code | string | 稳定状态码,例如 activation.ready / processing / completed / verify_failed |
| data.app | string | gpt / claude / claude_s / grok,决定提交账号方式 |
| data.gift_name / service_product | string | 卡密套餐名和服务产品标识 |
| data.use_status | integer | 0未使用,1已使用,-1等其他状态须结合 status_code 核实 |
| data.status_code / status_hint | string | 当前阶段与操作提示 |
| data.in_cooldown / cooldown_remaining | boolean / integer | 冷却标记及秒数;冷却中且0秒表示时长未知 |
| data.account / completed_at | string,可选 | 领取账号标识和完成时间,是否返回取决于阶段 |
- 示例仅展示部分字段,实际字段随商品及阶段变化。不能仅凭 use_status=1 判断套餐最终到账;verify_failed 需用户重新登录目标账号核实。
查询产品服务状态
/api/service_status鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
检查该卡密对应服务是否正常,不提交充值。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cdkey | string | 是 | 当前商户通过余额采购获得并已识别的完整卡密,最长2000字节 |
| product | string | 否 | 若提供,必须与 check.data.service_product 一致 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/api/service_status', array (
'cdkey' => 'YOUR_DELIVERED_CARD',
));响应示例
{
"success": true,
"data": {
"level": "normal"
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| data.level | string | normal正常、unstable不稳定、abnormal异常、unknown未知 |
- 即便查询服务状态也必须传所属卡密并签名;不能匿名按 product 查询。缺少服务产品标识时返回 unknown。服务状态不等于库存或到账保证。
提交账号兑换充值
/api/activate鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
把已取得的卡密兑换至买家明确确认的目标账号。此步骤可能消耗卡密,不能当作报价或试调用。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cdkey | string | 是 | 当前商户通过余额采购获得并已识别的完整卡密,最长2000字节 |
| confirm | string | 是 | 固定1,调用前由你的程序展示套餐、账号及风险并获得确认 |
| session_info | string | 按方式 | GPT:Session JSON 字符串或支持的 Token,最长262144字节;Claude:sk-ant-sid 开头 SessionKey,最长2000字节 |
| uid | string | 按方式 | GPT account.id 标准UUID;Claude Organization ID 标准UUID;Grok uid |
| force | string | 否 | 仅 GPT Session 方式,1代表申请覆盖剩余套餐 |
| force_confirm | string | force=1时 | 固定1,必须另行确认剩余会员时间损失风险 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/api/activate', array (
'cdkey' => 'YOUR_DELIVERED_CARD',
'confirm' => '1',
'session_info' => '{"YOUR_SESSION_FIELD":"YOUR_SESSION_VALUE"}',
));响应示例
{
"success": true,
"code": "activation.processing",
"msg": "正在处理,请查询原卡密",
"data": {
"status_code": "activation.processing"
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| code / data.status_code | string | 处理阶段,后续必须通过 check 查询 |
| data.submitted_uid / redeemed_uid | string,可选 | 提交与领取账号,用于核对;是否返回视产品而定 |
- app=gpt:优先 Session 信息;UID 必须为 account.id,不可填 user.id 或工作空间ID。app=claude:推荐 SessionKey,也支持 Organization ID;claude_s 只支持 SessionKey;grok 只支持 uid。
- 有 session_info 时优先 Session,失败后不会自动降级 UID。Claude SessionKey 支持 sk-ant-sid… 或 sessionKey=sk-ant-sid…,不要提交浏览器整段 Cookie。
- Claude UID 无法完整预检封禁/账务/套餐,错误账号可能消耗卡密但无法到账。购买前应核对商品对注册时长、身份认证等要求。
- ready 且未冷却才允许提交。processing 或请求超时后仅查原卡密,勿循环 activate。force 不绕过冷却或重复充值限制。示例 Session 为占位值,必须换成真实有效结构。
Claude 刷新订阅
/api/claude_refresh鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
已领取后的原账号使用原 SessionKey 同步/核查订阅,不重新购买。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cdkey | string | 是 | 当前商户通过余额采购获得并已识别的完整卡密,最长2000字节 |
| session_info | string | 是 | 原领取账号的 Claude SessionKey,最长2000字节 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/api/claude_refresh', array (
'cdkey' => 'YOUR_DELIVERED_CARD',
'session_info' => 'sk-ant-sid-YOUR_ORIGINAL_SESSION_KEY',
));响应示例
{
"success": true,
"msg": "刷新请求已处理",
"data": {
"retry_after": 60
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| success / msg | boolean / string | 本次处理结果及说明 |
| data.retry_after | integer,可选 | 再次请求前建议等待的秒数 |
- 仅 claude / claude_s 卡密可用,必须是原领取账号。本站先设置60秒并发保护,再按返回 retry_after 更新等待时间(5~86400秒)。响应超时后也应等待后再查询。
GPT 查询订阅到账情况
/api/refresh-subscription鉴权:商户签名 · 请求体:application/x-www-form-urlencoded · 必须携带公共鉴权参数
按原账号 Session / Token 查询当前订阅,用于到账核对。
请求参数
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cdkey | string | 是 | 当前商户通过余额采购获得并已识别的完整卡密,最长2000字节 |
| session_info | string | 是 | 原领取账号 GPT Session JSON 字符串或支持的 Token,最长262144字节 |
调用示例
以下是 PHP SDK 的业务参数示例;SDK 自动添加签名、时间戳和随机数。请用真实商品要求替换占位值。
$client->call('/api/refresh-subscription', array (
'cdkey' => 'YOUR_DELIVERED_CARD',
'session_info' => '{"YOUR_SESSION_FIELD":"YOUR_SESSION_VALUE"}',
));响应示例
{
"success": true,
"msg": "查询完成",
"data": {
"verify_result": [
true,
[
"示例套餐",
"EXAMPLE_EXPIRY",
"EXAMPLE_ACCOUNT"
]
],
"retry_after": 60
}
}返回字段
| 返回字段 | 类型 | 含义 |
|---|---|---|
| data.verify_result | array,可选 | [true,[套餐,到期时间,账号]];失败可能为 [false,原因] |
| data.retry_after | integer,可选 | 再次查询前等待秒数 |
- 本站必须传 cdkey 做归属和类型检查;此接口仅支持 gpt 卡密。当前订阅查询不能单独证明本次目标档位已到账,需结合套餐、账号和实际到期时间。Session/Token 不写入本站订单或普通日志。
7. PHP 服务端示例
下载下方 PHP SDK,保存于你自己程序的服务端;SDK 每次自动生成防重放字段和 HMAC 签名,不会自动重试采购。自己的零售价、买家付款和买家售后由自己的程序管理。示例中的商品编码、金额上限、账号信息均须替换为实际核对结果。
require 'MerchantClient.php';
$client = new TokenStoreMerchantClient(
'https://YOUR_STORE_DOMAIN',
getenv('STORE_APP_ID'),
getenv('STORE_APP_KEY')
);
$items = $client->call('/shared/commodity/items');
$quote = $client->call('/shared/commodity/valuation', [
'code' => 'TS-P4', 'num' => '1'
]);
// Save your business order and fixed request_no BEFORE requesting purchase.
$result = $client->call('/shared/commodity/trade', [
'shared_code' => 'TS-P4', 'num' => '1',
'request_no' => 'YOUR_ORDER_20261021_0001',
'max_amount' => '200.00', 'contact' => 'customer@example.com'
]);
// Timeout / unknown: query using the SAME business request number.
$status = $client->call('/shared/commodity/query', [
'request_no' => 'YOUR_ORDER_20261021_0001'
]);
// After presenting account risks and receiving the buyer's confirmation:
$check = $client->call('/api/check', ['cdkey' => 'YOUR_DELIVERED_CARD']);
// Session object must be encoded as a string for the form protocol.
$activation = $client->call('/api/activate', [
'cdkey' => 'YOUR_DELIVERED_CARD', 'confirm' => '1',
'session_info' => json_encode($targetSession, JSON_UNESCAPED_UNICODE)
]);复制文档会包含完整发卡与兑换接口说明、本站基础地址及示例,不包含你的密钥或账号凭据。