一笔付款,变成一封私有仓库邀请。

Pay2Clone 监听付款,解析出谁买了什么,然后把买家加为你私有 GitHub 仓库的协作者。授权到期,再把人移除。自托管在 Cloudflare 上,一个部署,管你要卖的所有仓库。

你的渠道发来的 webhook
{
  "eventType": "checkout.completed",
  "object": {
    "order": {
      "id": "ord_6wqYhx4Us6GmkKrhQmj9y",
      "product": "prod_3Nle5C6vSYfqRnNMjGboIn",
      "amount": 2900,
      "currency": "USD",
      "status": "paid"
    },
    "customer": { "email": "buyer@example.com" }
  }
}
它变成的那次协作者调用
PUT /repos/acme/widget-pro/collaborators/octocat

{
  "permission": "pull",
  "invitation": {
    "id": 1782043391,
    "expired": false
  }
}

购买授权 看它怎么跑

四个环节,没有胶水代码

每一步各自可靠:webhook 丢了会重放,GitHub 调用失败会重试,每天一次的对账把 GitHub 上的实际状态和数据库认为应该的状态对齐。

  1. 验签

    签名校验的是原始字节,不是解析后的对象。原始报文在别的事情发生之前就已归档。

  2. 记账

    事件和它意味着的工作写在同一个事务里,幂等键是渠道的事件 id。同一个事件重放十次,还是一笔订单。

  3. 授权

    买家用 GitHub 登录,然后被邀请进他买的那个仓库。不用手工邀请,不用共享账号,不用发压缩包。

  4. 对账

    权限是一个期望态,所以退款、拒付、到期的收敛路径和购买完全一样。每晚一次的对账修补偏移。

两边都试一遍

这个站本身就是一个部署。给你看这个页面的同一个 Worker,跑着一个可以走完的在线 demo:先当顾客,再当运营者——真实的测试付款、真实的 webhook、真实私有仓库的真实邀请。

demo 里的一切——订单、账号、仓库权限——每小时整点清空一次。请不要往里面放任何真实的东西。

每个支付渠道,同一套契约

每个适配器都是对着真实抓到的报文或厂商 SDK 写的,不是对着文档页写的。它们的事件列表来自跑起来的产品——因为我们查过的文档页没有一份是对的。

Free 组织下的外部协作者是不要钱的

大多数人以为私有仓库的协作者是按席位计费的。在 GitHub Free 组织下并不是。卖给一百个买家和卖给一个,成本一样。

GitHub 套餐 私有仓库 外部协作者 每协作者
Free 组织 不限 不限 $0
Team 组织 不限 不限 $4/月

对照 GitHub 公布的套餐限制核对过。列出 Team 只是作对比:卖仓库权限并不需要它。

一个价,不按量计费

买一次,想部署多少次就部署多少次,想接多少个仓库就接多少个。你的买家从头到尾看不到 Pay2Clone 的账号——他们看到的是你的仓库。

$29 一次性

购买授权 定价