如何按price id筛选所有Stripe订阅,对应可用Node.js API有哪些?
基于Price ID筛选Stripe Subscription的实现方案
可用API说明
Stripe官方原生提供了订阅列表查询的过滤能力,无需自行全量拉取订阅后再做筛选,直接通过stripe.subscriptions.list接口传入对应过滤参数即可实现按Price ID筛选订阅,属于官方原生的Subscription Filter API能力。
Node.js 实现参考
前置依赖
安装Stripe Node.js SDK,建议使用v10.0.0及以上版本:
npm install stripe --save
代码实现
const Stripe = require('stripe'); // 密钥建议存放在环境变量中,不要硬编码在代码里 const stripe = new Stripe(process.env.STRIPE_SECRET_KEY, { apiVersion: '2022-11-15', // 替换为你Stripe账号后台配置的API版本即可 }); /** * 根据Price ID筛选匹配的Stripe订阅 * @param {string} priceId 目标Price ID * @param {string} [subscriptionStatus='all'] 订阅状态过滤,可选值:active/canceled/past_due/unpaid/trialing/all * @param {number} [limit=100] 单次返回最大数量,最高支持100 * @returns {Promise<Array>} 匹配到的订阅列表 */ async function getSubscriptionsByPriceId(priceId, subscriptionStatus = 'all', limit = 100) { // 单次拉取逻辑,适合匹配订阅数量少于100的场景 const result = await stripe.subscriptions.list({ price: priceId, // 核心过滤参数,直接指定目标Price ID status: subscriptionStatus, limit: limit, }); // 若匹配的订阅数量可能超过100,使用下方分页拉取逻辑替换上面的单次拉取即可 /* let allSubscriptions = []; let lastId = null; do { const batch = await stripe.subscriptions.list({ price: priceId, status: subscriptionStatus, limit: 100, starting_after: lastId, }); allSubscriptions = allSubscriptions.concat(batch.data); lastId = batch.data.length ? batch.data[batch.data.length - 1].id : null; } while (lastId); return allSubscriptions; */ return result.data; } // 调用示例 const TARGET_PRICE_ID = 'price_xxxxxxxxxxxxxx'; // 替换为你需要筛选的Price ID getSubscriptionsByPriceId(TARGET_PRICE_ID, 'active') .then(matchedSubscriptions => { console.log('匹配到的活跃订阅:', matchedSubscriptions); }) .catch(error => { console.error('订阅查询失败:', error); });
注意事项
- 上述过滤逻辑会返回所有任意订阅项包含目标Price ID的订阅,若你需要严格匹配订阅仅包含该Price ID的场景,可在拿到返回结果后二次校验
subscription.items.data中所有条目的price.id是否和目标ID一致 - 调用接口使用的Stripe密钥需要有订阅的读取权限,禁止在前端环境暴露该密钥
- 如果需要同时筛选多个Price ID,可以多次调用接口合并结果即可
内容的提问来源于stack exchange,提问作者Aayush Bhankale
相关产品推荐
相关产品推荐

