ExtPay 浏览器扩展支付快速接入指南
【免费下载链接】ExtPayThe JavaScript library for ExtensionPay.com — payments for your browser extensions, no server needed.项目地址: https://gitcode.com/gh_mirrors/ex/ExtPay
ExtPay 是一个面向浏览器扩展的 JavaScript 支付库。它基于 Stripe,内置订阅管理、优惠券、免费试用三项能力,不用写一行后端代码就能向用户收费,适合想给自己的扩展做变现的 JS 开发者。
💰 浏览器扩展变现的三座大山
不少扩展作者想做收费功能,却卡在最前面一步:扩展只跑在用户机器上,没有服务器接收支付回调。第一座山是校验——Stripe 的支付链接和 webhook 验证都要后端配合,没有后端你没法确认用户真的付了款。
第二座山是订阅生命周期:自动续费、扣款失败后的重试、催款邮件,都需要一套计费系统。直接调 Stripe API,意味着每个状态都得自己维护。
第三座山是用户状态:谁付过款、谁的试用到期、谁的卡刚刚失效,这些状态要有地方存,还要跨浏览器同步。
ExtPay 的做法是把这三件事搬到云端。扩展端只调几个方法:getUser 拿支付状态、openPaymentPage 打开支付页、getPlans 拿套餐列表,省掉的是整个自建计费后端的工程量。
🚀 拿到项目后的前 10 分钟
先克隆仓库:
git clone https://gitcode.com/gh_mirrors/ex/ExtPay仓库里有两个示例扩展,sample-extension-mv3/ 和 sample-extension-mv2/。新项目选 MV3;你的扩展还停在 MV2 就直接用 MV2 那份,两者的接入方式几乎一致。
接着做三件事:先在 ExtensionPay 注册你的扩展,拿到一个扩展 ID;再把 background.js、popup.js、content.js 三个文件里的占位符 sample-extension 换成你自己的 ID;最后打开浏览器扩展开发者页面,开启开发者模式,用"加载已解压的扩展"选中示例目录。
manifest.json 里注意两处:加 "storage" 权限;Firefox 还要给 extensionpay.com 域加 host 权限,自定义了 CSP 的话补一条 connect-src。
🧭 用户从点"订阅"到付款成功的全链路
用户视角一共四步,开发者一页都不用搭。
第一步,扩展调用 openPaymentPage 打开新标签页的选套餐页面。套餐数据来自 getPlans,字段包含价格(美分)、币种和计费周期(月、年、一次性)。
第二步,用户点套餐后跳转 Stripe 结账页填卡,成功后生成一条 Stripe 订阅记录。
第三步,结账页下方有 Add promotion code 入口,用户输入折扣码,页面自动算出折后价。
第四步,付款成功后用户看到订阅管理页,可以换卡或取消订阅。扩展端用 getUser() 里的 user.paid 判断是否放开付费功能,也可以注册 onPaid 回调,在付款瞬间执行自己的逻辑。
MV3 有个坑:service worker 的回调里全局 extpay 实例会变成 undefined,要在回调里重新用 ExtPay('你的ID') 实例化,startBackground 只调一次。
🎫 让免费用户付费的三件套
免费试用。它省掉自建邮件确认和试用状态存储的活。浏览器扩展免费试用的流程是:openTrialPage 打开试用页,用户填邮箱,收到确认链接,点链接后试用才正式开始。平台只记录 trialStartedAt,时长由扩展自己判断——7 天试用就对比 trialStartedAt 与当前时间的差值。传 '7-day' 这样的参数,用户提交前就能看清试用周期。
优惠券。扩展优惠券在 Stripe 后台创建,支持固定金额和百分比两种类型,扩展端不用写折扣计算代码,结账时由 Stripe 自动算好折后价。关键是创建时勾上 Use customer-facing coupon codes,才会生成可发给用户的短码,详见 docs/discount_code_guide.md。
促销策略。定价结构本身就是策略:月费 $10 加年费 $99 的组合,让年付显得更划算,引导用户选年付。折扣码走邮件等渠道发放,再配一条试用到期提醒,就能拼出"试用 → 折扣码 → 首单"的转化路径。
⚙️ Stripe 后台与失败支付必配项
连上 Stripe 账号后,对照检查这几项:
- 支付方式:设置里能开的尽量都开,别漏掉用户本来能完成的支付。
- 3D Secure:保持开启,不要为了通过率关掉。
- 失败支付重试:Stripe 默认会再尝试扣款几次后才把订阅标记为取消,重试策略可按业务调整。
- 邮件通知:打开 Send emails when card payments fail,卡失效时由 Stripe 发邮件提醒用户换卡。
- 状态映射:扣款失败后订阅进入 past_due,paid 变为 false,扩展要识别这个状态并提示用户更新卡,细节见 docs/how_subscriptions_work.md。
✅ 上线前的自测路线
开发模式下,订阅管理页会换成开发者控制台,可以模拟各种订阅状态、重置试用。测试支付需要输入你的账号密码,用 Stripe 测试卡就能把整条流程走通。
自检项:
- 用测试卡支付一次,确认 user.paid 变 true,onPaid 回调触发。
- 用邮箱发起试用,确认 trialStartedAt 有值,到期时间与预期一致。
- 模拟一次扣款失败,确认扩展弹出更新卡片的提示。
- 取消订阅,确认周期内 paid 仍为 true 且 subscriptionCancelAt 有值,周期结束后变 false。
- 换一个浏览器,通过登录页用邮箱找回付费状态。
从个人小项目到商业扩展
ExtPay 是一个基于 Stripe、不需要自建服务器的浏览器扩展支付库。个人小项目拿它收月费,商业扩展跑在它上面,接入方式不随规模变化。
下一步:把你的扩展 ID 填进 MV3 示例加载运行,用测试卡跑一遍"试用 → 订阅 → 取消"的完整循环,再把它换成你自己的功能。
【免费下载链接】ExtPayThe JavaScript library for ExtensionPay.com — payments for your browser extensions, no server needed.项目地址: https://gitcode.com/gh_mirrors/ex/ExtPay
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考