kasskeep

功能

本页列出的都是当前版本已经提供的能力。还没做完的在路线图里。

商店渠道

每个支付渠道是一个插件,并声明自己支持的能力。所有渠道产出同样的交易、订阅和事件。

渠道用在哪里Kasskeep 负责什么
Apple App StoreiOS AppStoreKit 2 JWS 验签、App Store 服务器通知 V2、订阅状态、交易历史、退款消费信息回报
Google PlayAndroid AppPlay Developer API 验单、代为确认与消耗、经 Pub/Sub 推送的 RTDN(OIDC 校验)、退款记录
Stripe网页版、桌面版托管 Checkout、回查 API 的 webhook、退款、拒付、每小时事件对账
测试商店开发与测试购买、续订、宽限期、退款、撤销、升降级和时间推进,全部标记为 environment: test

一套事件模型

各商店的原生信号归一成固定的事件类型。不管来自苹果、Google、Stripe 还是测试商店,续订事件都长一个样。

  • purchase
  • subscription.started
  • subscription.renewed
  • subscription.product_changed
  • subscription.canceled
  • subscription.uncanceled
  • subscription.billing_issue
  • subscription.grace_period_expired
  • subscription.expired
  • subscription.paused
  • refund
  • refund.reversed
  • refund.consumption_requested
  • revoked
  • chargeback
  • chargeback.closed
  • ad.reward
  • test

签名回调

  • 每个事件 POST 到你的回调地址,带 Kasskeep-Signature 请求头:对时间戳和原始请求体做 HMAC-SHA256。
  • 投递失败后依次在 1 分钟、5 分钟、30 分钟、2 小时、12 小时、24 小时、24 小时后重试。
  • 事件 id 由商店事件本身算出:同一次续订不管是通知、客户端提交还是对账带来的,都是同一个 id。
  • GET /v1/events 按顺序返回全部事件并带游标,用来补拉和恢复。
  • 测试接口会向你的回调地址发一条签名的测试事件,并把响应展示给你。

对账

  • 苹果:每小时拉一次通知历史,与上次重叠一小时。
  • Google:每小时调用 Voided Purchases API,另外回查临近到期或处在宽限期、账户保留、暂停中的订阅。
  • Stripe:从事件 API 补拉,走与 webhook 相同的处理。
  • Google 的确认与消耗失败后自动退避重试,赶在 Google 3 天自动退款的期限之前完成。

账号、角色与审计

  • 你的账号就是一个租户。每条业务记录都带租户 id,并由 Postgres 行级安全兜底,任何查询都碰不到别的账号的数据。
  • 商店凭据和回调签名密钥用 AES-256-GCM 加密,密钥为你的账号单独派生,写入后无法再读出。
  • 团队成员分所有者、管理员、开发者、只读四种角色。登录必须密码加 TOTP。
  • 每个管理操作写审计日志,记录前后差异,密钥类字段打码。
  • 按账号限流、按账号公平调度定时任务,别的账号再忙也不会拖慢你的回调。

激励广告

  • 接收 AdMob(SSV,ECDSA 验签)、AppLovin MAX(S2S event token)、Unity LevelPlay(签名 S2S、时间窗口、可选来源 IP 白名单)的服务端奖励回调。
  • 每次验证通过的观看生成一条 ad.reward 事件,签名和投递方式与购买事件相同。
  • 用你自己的广告位名映射各网络的 ad unit id,iOS 和安卓共用一个名字。
  • 没映射过的广告位回调默认拒收,并列出来方便你补配置。
  • 测试模式不加载真实广告也能产生 ad.reward 事件。

客户端 SDK

  • React Native 与 Expo:configure、getProducts、purchase、restore、getCustomer、监听、补交未完成交易、网页结账和激励广告。
  • WebView 桥:让原生壳里的网页游戏调用内购,带来源白名单和方法白名单。
  • kasskeep-web.js:零依赖的浏览器模块,支持 WebView 桥、测试商店和 Stripe 结账。

运维

  • 服务、数据库、商店轮询和回调投递都由 Kasskeep 负责运行。
  • 数据库连续归档、支持时间点恢复,每天加密备份到异地,每周自动做一次恢复演练。
  • 服务用受行级安全约束的数据库角色连库,行级安全不生效就拒绝启动。
  • 接口路径按 /v1 分版本,只做增量修改。

查看文档