跳转到内容

API 概览

API 是基于 HTTPS 的 JSON 接口,地址为 https://api.kasskeep.com。所有路径都以 /v1 开头;v1 内的变更只增不改。

本参考依据服务的路由定义编写。OpenAPI 规范规划中。

分组 调用方 认证
客户端 API 你的 App 或网页 X-Kasskeep-Key: pk_...
服务端 API 你的后端 Authorization: Bearer sk_...
入站回调 商店和广告网络 路径中的 app id 加上渠道自己的签名
管理 API 你本人、CLI、自动化脚本 Authorization: Bearer kks_...(会话)或 kkp_...(个人访问 token)

错误使用 HTTP 状态码和如下响应体:

{ "error": { "code": "invalid_public_key", "message": "invalid_public_key" } }

code 是稳定的;message 给人看,可能会变。

状态码 常见错误码
400 invalid_json、invalid_request(message 会列出每个不合法的字段)、invalid_app_user_id、invalid_environment、invalid_cursor
401 invalid_public_key、invalid_secret_key、invalid_admin_token、invalid_credentials
403 tenant_suspended、forbidden、test_store_disabled、test_ads_disabled
404 not_found、app_not_found、tenant_not_found
409 冲突,比如 already_subscribed、external_id_in_use、ad_unit_id_in_use
422 缺少配置,比如 android_not_configured、stripe_not_configured
429 rate_limited
502 上游商店 API 暂不可用;可以放心重试

客户端 API 和服务端 API 按租户用令牌桶限流,超限返回 429 rate_limited。商店的入站回调从不限流,所以不会丢失任何通知。

同一笔商店交易提交两次,只记录一次,并返回相同的客户状态。恢复购买同样是幂等的。入站回调按各渠道自己的 id 去重。

浏览器只有在 origin 位于 App 的 cors_origins 中时,才能直接调用 Kasskeep(网页结账、在网页里使用测试商店、查询客户)。该列表默认为空。

终端窗口
npx @kasskeep/cli apps update --id app_xxx --cors-origins "https://game.example.com,*.example.com"
  • 完整的 origin,比如 https://game.example.com(非默认端口要带上端口)。
  • *.example.com 匹配任意层级的 https:// 子域名,但不匹配 example.com 本身、http:// 或带端口的 origin。
  • http://localhost:* 和 http://127.0.0.1:* 只在 App 处于非正式模式时允许:apple_environment 为 sandbox,或开启了测试商店或测试广告。

只有以下使用公钥的接口会发送 CORS 头:POST /v1/receipts、POST /v1/checkout、GET /v1/customers/:id、POST /v1/customers/:id/restore、POST /v1/test-store/purchases、GET /v1/test-store/products、GET /v1/customers/:id/ad-rewards、POST /v1/ads/test/rewards。

响应会原样回显具体的 origin 并带 Vary: Origin,从不设置 Access-Control-Allow-Credentials。预检请求不带密钥,所以只要有任何一个 App 列出了该 origin 就会通过;随后真正的请求再按对应 App 自己的列表检查。密钥校验失败时不返回 CORS 头,在浏览器里会表现为 CORS 错误,所以请先检查密钥。

GET /health 返回 {"ok": true}。