V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
jybox
V2EX  ›  分享创造

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

  •  2
     
  •   jybox ·
    jysperm · 32 天前 · 2317 次点击
    这是一个创建于 32 天前的主题,其中的信息可能已经有所发展或是发生改变。

    省流: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 的文档 查看,或者直接 点击这里 来试一试(如果不希望真的扣钱的话请不要在钱包里同意交易)。

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

    这个服务甚至没有一个独立的法人,这种情况下,怎么让用户信任这个支付服务
    jybox
        22
    jybox  
    OP
       31 天前
    @chesha1 其实恰恰是小的项目才需要接第三方的支付服务呀,可能我这个产品的受众里会有一些是无法接入 Stripe 等「靠谱」服务的开发者。
    imlonghao
        23
    imlonghao  
       31 天前   ❤️ 1
    这个产品感觉也挺适合合租的场景,车主方便收款和统计到期日;乘客可以授权一年的费用,按月划扣给车主,对乘客来说也省事。(于是乎我发起了一个合租贴)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   803 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 22:03 · PVG 06:03 · LAX 14:03 · JFK 17:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.