开发者/快速开始
CardV 商户 API
CardV 面向企业批发礼品卡、游戏充值、eSIM 等预付数字商品。通过商户 API,你的系统可以自动完成采购:查余额、找商品、看价格、下单,然后拿到卡密。货款从你在 CardV 的预付钱包中扣除。加款、查看历史订单等其他操作,都在商户后台完成。
#文档目录
| 文档 | 内容 |
|---|---|
| 认证与签名 | 请求头、请求签名、API Key 管理 |
| 商品与下单 | 余额、汇率、商品、价格、下单、卡密 |
| 话费充值 | 手机充值:运营商、报价、充值订单 |
| 通用约定 | 金额、时间、编号、频率限制、错误 |
| Webhook 通知 | 订单完成后推送到你服务器的通知 |
| 沙盒环境 | 联调测试与上线检查清单 |
| 安全 | 如何保护密钥和卡密 |
#环境
| 正式环境(Live) | 沙盒环境(Sandbox) | |
|---|---|---|
| API 地址 | https://b2b.cardv.net/api/v1 | https://sandbox.cardv.net/api/v1 |
| 商户后台 | https://b2b.cardv.net/portal/ | 同一个后台,顶部切换到 Sandbox |
沙盒是一套独立的测试环境,里面用的是测试金。两个环境的 API Key、余额、订单和商品编号都互不相通。
#快速开始
注册:在商户后台申请商户账号,并验证邮箱。
等待审核:CardV 审核你的企业资料,通过后你会拿到商户号(Merchant ID),例如
M00000001。进入沙盒:登录商户后台,在顶部切换到 Sandbox。系统会送你 1,000 USD 测试金。
创建 API Key:在后台进入 Integrations → API keys。创建一个 Key。后台只会显示一次 Key ID 和签名密钥,请把签名密钥保存到你的密钥管理系统里。
查询余额:
export CARDV_BASE=https://sandbox.cardv.net export CARDV_KEY_ID=ck_test_... # shown in the Portal export CARDV_SIGNING_SECRET=cs_test_... # from your secret store cardv_get() { # every call is signed, see Authentication local ts nonce sig ts=$(date +%s); nonce=$(openssl rand -hex 16) sig=$(printf 'GET\n%s\n%s\n%s\n%s' "$1" "$ts" "$nonce" \ e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 \ | openssl dgst -sha256 -hmac "$CARDV_SIGNING_SECRET" -hex | sed 's/^.*= //') curl -sS "$CARDV_BASE$1" -H "X-Key-Id: $CARDV_KEY_ID" \ -H "X-Timestamp: $ts" -H "X-Nonce: $nonce" -H "X-Signature: $sig" } cardv_get "/api/v1/balance"查找商品:
cardv_get "/api/v1/skus?search=steam&limit=20"选一个
"availability": "available"(可售)的商品,记下它的sku_id。获取价格:
cardv_get "/api/v1/skus/S000001/quote?quantity=1"记下
merchant_price,这就是你购买一件的价格。下单:和所有请求一样,需要签名。用认证与签名里的示例代码,发送下面的内容:
{ "external_order_id": "TEST-0001", "items": [ {"sku_id": "S000001", "quantity": 1, "expected_unit_price": "9.25"} ] }成功后返回 HTTP 201,以及 CardV 订单号,例如
O-00001234。获取卡密:调用
GET/api/v1/orders/O-00001234,直到订单状态变为succeeded。卡密在items[].deliveries[]里:card_number、pin_code和redeem_url。你也可以配置 Webhook,在订单完成时收到通知。上线:完成沙盒测试清单后切换到正式环境。
以上编号和价格只是示例,请以你账户实际返回的数据为准。
#接口一览
API 一共只有 16 个接口,路径都以 /api/v1 开头。
| 接口 | 用途 | 需要签名 |
|---|---|---|
GET/account | 查看企业信息和 API 开通状态 | 否 |
GET/balance | 查看可用余额 | 否 |
GET/fx-rates | USD 汇率(店铺用其他币种标价时) | 否 |
GET/products | 商品列表,每个商品带全部 SKU | 否 |
GET/products/{product_id} | 单个商品,含 SKU 与完整说明 | 否 |
GET/skus | 可购买的商品列表(含你的价格) | 否 |
GET/skus/{sku_id} | 单个商品详情 | 否 |
GET/skus/{sku_id}/quote | 按数量查询当前价格 | 否 |
POST/orders | 下单,从钱包扣款 | 是 |
GET/orders/{order_id} | 查询订单状态和卡密 | 否 |
GET/recharge/countries | 可以充值的国家 | 否 |
GET/recharge/operators | 某个国家的运营商和金额 | 否 |
POST/recharge/quote | 查询一笔话费充值的价格 | 是 |
POST/recharge/orders | 给手机号充值,从钱包扣款 | 是 |
GET/recharge/orders | 充值订单列表 | 否 |
GET/recharge/orders/{order_id} | 查询充值订单状态 | 否 |
用 API Key 调用其他任何接口,都会返回 HTTP 403:
{"detail": "This operation is only available in the Merchant Portal."}话费充值的说明见话费充值。
#编号说明
| 编号 | 示例 | 说明 |
|---|---|---|
| 商户号(Merchant ID) | M00000001 | 你的商户编号,永久不变。 |
| SKU 编号(可购买的商品) | S000456 | 报价和下单都用它。 |
| CardV 订单号 | O-00001234 | 请和你自己的订单一起保存。 |
| 商户订单号 | SHOP-10001 | 由你自己生成,对应字段 external_order_id。 |
编号请按文本保存,不要去解析其中的数字。详见通用约定。
#在商户后台完成的操作
- 钱包加款,以及余额不足提醒
- 历史订单查询和导出
- 订单发票
- 资金流水与对账
- Webhook 配置、推送记录和重新推送
- API Key 管理
- IP 白名单
- 团队成员与角色
- 操作日志
- 两步验证(2FA)
- 在正式环境和沙盒之间切换
#兼容性与支持
我们可能会在不另行通知的情况下,新增返回字段和新的状态值。遇到不认识的字段请直接忽略;遇到不认识的订单状态,一律按"尚未完成"处理。不要依赖错误信息的具体措辞。
如需帮助,请发邮件至 [email protected],写明商户号、环境、相关订单号、发生时间(UTC)和 HTTP 状态码。切勿在邮件中发送 API Key、签名、Webhook 密钥或卡密。
接入遇到问题?请发送邮件至 [email protected],并附上 Merchant ID 与订单号或请求 ID。