Chrome extension 在哪里接受订阅付款?
结论
Chrome Web Store 目前已经不能处理扩展订阅付款。它原有的付费扩展、订阅、License API 和 Payments API 都已停止使用。即使后台还保留着“订阅并提供免费试用”等定价选项,也无法生成有效的购买入口。
如果扩展需要收费,应在自己的网站或 SaaS 后台接入 Stripe、Paddle 等支付服务。用户登录网站并购买订阅后,扩展再向你的服务器查询该账号是否拥有有效权益。
为什么商店页面只有“安装”
在旧支付体系中,“订阅定价”用于销售扩展本身的 Chrome Web Store 授权,Payments API 的 SKU 则用于在扩展内销售附加功能。两者对应的不是同一类商品。
当时的流程大致如下:
- 用户从 Chrome Web Store 安装扩展。
- 商店创建试用许可证。
- License API 返回试用或正式授权状态。
- 试用结束后,商店页面才可能出现购买入口。
- 用户购买成功后,License API 返回正式授权。
因此,当时的文档会要求开发者将试用到期的用户引导回商店页面。在旧设计下,试用期间页面只显示安装按钮,并不一定是配置有误。
这套流程如今已经退役。即使某些旧页面或后台界面仍显示相关配置,也不能再将其视为可用的支付功能。
免费试用期到底多长
旧版 Chrome Web Store 支付体系的免费试用期由平台设定,开发者不能自由填写。历史文档和实际行为可能因时期、商品类型或账号状态而异,仅凭当前残留的后台界面,无法可靠判断具体天数。
现在也不应再根据 License API 的试用时间开发新业务。迁移到自有支付系统后,应由服务器明确保存以下信息:
trial_starttrial_endsubscription_statuscurrent_period_endcancel_at_period_end
试用期限应在支付平台或服务端设置,例如 7 天、14 天或 30 天,不要让扩展自行计算。
推荐的实现方式
可以采用以下流程:
- 扩展要求用户登录。
- 用户点击“升级”后,扩展打开你的网站。
- 网站创建支付平台的 Checkout Session。
- 支付平台通过 Webhook 通知你的服务器。
- 服务器更新用户的订阅权益。
- 扩展调用你的 API 查询授权状态。
- API 返回
active、trialing、expired等状态。
扩展可以这样打开订阅页面:
chrome.tabs.create({
url: "https://example.com/subscribe"
});
用户登录后,扩展查询其权益:
async function getEntitlement(accessToken) {
const response = await fetch("https://api.example.com/v1/entitlement", {
headers: {
Authorization: `Bearer ${accessToken}`
}
});
if (!response.ok) {
throw new Error(`Entitlement request failed: ${response.status}`);
}
return response.json();
}
const entitlement = await getEntitlement(accessToken);
if (
entitlement.status === "active" ||
entitlement.status === "trialing"
) {
enablePremiumFeatures();
} else {
disablePremiumFeatures();
}
服务器返回的数据可以保持简洁:
{
"status": "trialing",
"trialEnd": "2026-09-14T00:00:00Z",
"currentPeriodEnd": null,
"features": ["export", "sync", "advanced_filters"]
}
服务端可以按以下方式判断用户是否拥有高级功能:
function hasPremiumAccess(subscription, now = new Date()) {
if (subscription.status === "active") {
return true;
}
if (subscription.status === "trialing") {
return (
subscription.trialEnd &&
new Date(subscription.trialEnd).getTime() > now.getTime()
);
}
return false;
}
Payments API 与订阅定价原本有什么区别
在旧体系下,两者的用途不同:
- Chrome Web Store 的订阅定价:销售扩展本身的使用许可。
- Payments API 和 SKU:在扩展内部销售额外的产品或功能。
设置扩展级订阅后,不需要再为同一个订阅创建 SKU。商店的定价配置原本负责购买流程和许可证状态,Payments API 主要用于应用内购买。
现在,这两种方式都不适合用于新的收费方案。迁移时,也不要直接把旧 License API 的状态当作新支付平台的订阅记录。
注意事项
不要将支付平台的 Secret Key、Webhook Secret 或管理接口凭证写入扩展。扩展代码会被下载到用户设备,无法安全保存服务器密钥。
授权判断也不能只依赖 chrome.storage 中的布尔值,例如:
// 不安全:用户可以在本地篡改
await chrome.storage.local.set({ premium: true });
本地缓存可以用来改善离线体验,但最终权益应由服务器签发并定期校验。商店说明、隐私政策和付款页面还应明确披露价格、试用期限、自动续费规则、取消方式以及退款政策。
备注:内容仅供参考。
