You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Stripe API获取产品与优惠券的关联关系?

问题:如何通过Stripe API获取优惠券与产品的关联关系?

Stripe控制台支持将优惠券/促销活动与产品(及对应的价格)进行关联,例如可将5折优惠券关联至特定的年度订阅产品。

我的使用场景是:用户在结账UI中输入优惠券代码(如50OFFANNUAL),我需要验证该优惠券是否存在、其所有限制条件(是否单次使用、是否限时、是否限使用次数等),并确认客户购买的产品/订阅是否与该优惠券关联。

我已通过以下PHP代码获取优惠券代码:

$stripeCouponList = $stripe->promotionCodes->all([
    'limit' => 1,
    'code' => $upperCode,
    'active' => true,
]);

但返回结果中并无products或prices对象,尝试使用expand扩展属性时会报错(不存在该可扩展属性)。同样,从产品或价格接口也无法找到promotion_code或promotion_codes属性。

请问如何通过API获取优惠券与产品的关联关系?


解决方案

你混淆了Stripe里**促销码(Promotion Code)和优惠券(Coupon)**的核心区别:

  • 促销码是用户输入的可兑换代码(比如50OFFANNUAL),仅作为优惠券的分发入口,本身不存储产品关联规则。
  • 产品/价格的关联限制,是定义在**优惠券(Coupon)**对象的applies_to字段中的。

正确的操作步骤如下:

  1. 通过促销码代码找到对应的促销码对象,从中取出关联的coupon ID。
  2. 调用优惠券接口获取该优惠券的详情,即可拿到applies_to字段,里面包含关联的products或prices列表。

对应的PHP代码示例:

// 1. 获取目标促销码
$promotionCodes = $stripe->promotionCodes->all([
    'limit' => 1,
    'code' => $upperCode,
    'active' => true,
]);

if (empty($promotionCodes->data)) {
    // 促销码不存在或已失效
    exit('Invalid promotion code');
}

$promotionCode = $promotionCodes->data[0];
$couponId = $promotionCode->coupon; // 提取关联优惠券的ID

// 2. 获取优惠券详情,包含产品关联信息
$coupon = $stripe->coupons->retrieve($couponId);

// 读取关联的产品/价格列表
$appliesTo = $coupon->applies_to;
if (isset($appliesTo->products)) {
    $allowedProductIds = $appliesTo->products;
    // 此处可验证客户购买的产品ID是否在允许列表内
}
if (isset($appliesTo->prices)) {
    $allowedPriceIds = $appliesTo->prices;
    // 此处可验证客户购买的价格ID是否在允许列表内
}

// 同时从促销码对象读取使用限制
$isSingleUse = $promotionCode->restrictions->first_time_transaction;
$redeemDeadline = $promotionCode->expires_at;
$maxRedemptions = $promotionCode->max_redemptions;

如果想减少API请求次数,可以在查询促销码时直接通过expand参数展开关联的优惠券对象:

$promotionCodes = $stripe->promotionCodes->all([
    'limit' => 1,
    'code' => $upperCode,
    'active' => true,
    'expand' => ['data.coupon'], // 直接获取完整的优惠券详情
]);

$promotionCode = $promotionCodes->data[0];
$coupon = $promotionCode->coupon; // 已展开的优惠券对象
$appliesTo = $coupon->applies_to;

注意:产品与优惠券的关联是单向的——优惠券关联产品,但产品不会反向存储关联的优惠券列表,因此无法通过产品接口直接查询关联的优惠券。

内容的提问来源于stack exchange,提问作者Mike

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 00:22:39