TokenSubs: 为你的独立项目接入基于 ERC20 的订阅付费

32 天前
 jybox

省流:tokensubs.io

早在 10 年前我就开始在我的网站上支持比特币支付了 https://www.v2ex.com/t/131432 当时使用了一个第三方的服务,每次调用会返回一个地址 ,如果用户向这个地址转账,我的网站就会收到一个 Webhook 回调。

这么多年之后,我们现在有了基于 ERC20 的繁荣生态,各类软件和服务也都纷纷转向订阅制,我就想能不能基于 ERC20 预授权的机制,来实现基于密码货币的订阅付费呢?

其实已经有很多服务在提供这种订阅的接口了,但我觉得他们和十年前这种体验相比实在过于复杂 —— 需要注册帐号、完成 KYC 、阅读冗长的 API 文档、接入 SDK 并配置 API Key 等等。

于是我以「接入简单」为目标开发了 TokenSubs ,它简单到了你甚至不需要注册帐号,只需拼出一个包含收款地址的 URL (我们有个 URL Builder),然后将用户重定向到这里即可:

https://tokensubs.io/checkout?merchant=0x8d4c362BD64E4C0a547430B8d9066491627259C8&pricing=1.99USDC/30days

然后在你的网站接收回调:

app.post('/webhook', async (req, res, next) => {
  const {eventId} = req.body
  // arbitrum/0x488f2bd0d55f0ccf86903577c24427944c586fea8ecfdde4d92d7497f23d4642/1
  const res = await fetch(`https://tokensubs.io/api/events/${eventId}`)

  console.log(await res.json())

  /*
    {
      "chain": "arbitrum",
      "subscriptionId": "arbitrum/0xef580637c4fe1f55bbe72d6049a59569b5f262e3",
      "merchant": "0x8d4c362BD64E4C0a547430B8d9066491627259C8",
      "subscriber": "0x269c07a1D560F7C5bfb781c0118f5049a1e006e6",
      "intervalDays": 30,
      "receiveTokenAddress": "0xaf88d065e77c8cC2239327C5EDb3A432268e5831",
      "price": 1.99,
      "pricing": "1.99USDC/30days",
      "expiredAt": "2024-08-12T15:02:32.000Z",
      "txId": "0x488f2bd0d55f0ccf86903577c24427944c586fea8ecfdde4d92d7497f23d4642",
      "eventId": "arbitrum/0x488f2bd0d55f0ccf86903577c24427944c586fea8ecfdde4d92d7497f23d4642/1",
      "eventName": "SubscriptionCreated",
      // ...
    }
  */
})

不需要注册帐号、不需要配置 API Key 、不需要提现(会实时转到你填写的地址上),其核心逻辑通过一个智能合约来完成(可在各个 Block Explorer 上查看其代码),合约保证了按约定好的时间和价格进行扣费,任何人都无法干预。

作为用户看到的支付页面是这样的(不需要注册帐号,直接使用 MetaMask 之类的钱包进行付款):

开发者可以指定一种 Token 作为定价和收款货币,而用户则可以在多种主流 Token 中选择自己持有的 Token ,TokenSubs 会自动调用 Uniswap 完成兑换。

更多细节和额外功能可以来 TokenSubs 的文档 查看,或者直接 点击这里 来试一试(如果不希望真的扣钱的话请不要在钱包里同意交易)。

2319 次点击
所在节点    分享创造
23 条回复
Livid
32 天前
如果你 Demo 网站跑在测试网上,那么就可以让大家试试完整流程了。
loveshuyuan
32 天前
为啥不支持 TRC20
344457769
32 天前
我喜欢你的头像。
liangdi
32 天前
@loveshuyuan 可能有程序员洁癖?哈哈
jybox
32 天前
@loveshuyuan 只是我一直在用 EVM 生态,还不太了解 TRON
loveshuyuan
32 天前
@jybox ERC20 手续费太高了
thoo61871
32 天前
@loveshuyuan TRC20 不租用能量,手续费已经很高了,孙哥吃相难看。
shanghaojia
32 天前
能不能支持下 sol
zmxnv123
32 天前
主要问题是面向国内用户的话支付方式太小众了,适合海外玩家
jybox
32 天前
@loveshuyuan 我支持的这几个 Ethereum Layer 2 网络交易费通常在 0.1 人民币以下,对比大部分支付服务的费率我觉得还是可接受的。其他的网络后面当然是可以考虑支持的,只是如果和 EVM 不完全兼容的话需要花比较多的时间。
@zmxnv123 确实是这样,所以我也只做了英文版本。
imnpc
32 天前
TRC20 不是手续费更高? ERC20 的收费比较低了
guoooo00oohao
32 天前
很不错的一个工具 支持一下
lairdnote
32 天前
独数卡。接点支付就好了啊。tokenpay 这些 。。
guoooo00oohao
32 天前
认真看了一下交互,如果用户按照月进行订阅,但是参数只有 d ,有时候一个月 28 天,29 天,30 天,31 天。
这个参数设计的好反直觉。
onichandame
32 天前
@guoooo00oohao #14 常规做法是 31 天视为一月
wantstark
32 天前
不是很安全
guoooo00oohao
32 天前
@onichandame 好像也行,只要不让客户感觉吃亏就行。
drymonfidelia
32 天前
@zmxnv123 海外也不适合,我们公司网站就支持 USDT 支付,一个月下来只有个位数人用,大部分人用信用卡因为有优惠
8863824
32 天前
需要 approve 你们合约的话,不安全
jybox
32 天前
@8863824 这是一个不可升级的合约,所有者也没有除了收取手续费之外其他的特权,在不存在漏洞的情况下要比信任一个传统的服务商更安全,我也找专门做智能合约审计的朋友审计过合约代码。
@guoooo00oohao 我是觉得基于一个精确的天数而不是长度会变化的「月」更简单一些 ...

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1080782

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX