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

使用Stripe PHP SDK通过Customer ID获取订阅ID遇属性错误求助

问题分析与解决方案

错误原因

你遇到的「Trying to get property 'data' of non-object」报错,核心问题有两个:

  1. 调用\Stripe\Customer::retrieve()时,传入的$customer->id是未初始化的变量值——此时$customer还未通过API获取到有效数据,这个参数无效,导致返回的客户对象中subscriptions属性不存在或为null,访问->data自然触发报错。
  2. 即使客户ID有效,也可能该客户没有任何订阅,subscriptions为空集合,同样会引发类似问题。

修正后的代码方案

方案一:通过展开客户资源获取订阅

先将收集到的有效客户ID存入变量,再调用API,同时增加安全判断避免报错:

// 替换为你实际收集到的Customer ID
$customer_id = 'cus_xxxxxx';

// 获取客户并展开订阅列表
$customer = \Stripe\Customer::retrieve(
    $customer_id,
    ['expand' => ['subscriptions']]
);

// 安全获取第一个订阅ID
if (isset($customer->subscriptions) && is_object($customer->subscriptions) && !empty($customer->subscriptions->data)) {
    $first_sub_id = $customer->subscriptions->data[0]->id;
    var_dump($first_sub_id);
} else {
    echo "该客户无有效订阅或无法获取订阅数据";
}

方案二:直接查询客户的订阅列表

这种方式更直接,无需展开客户资源,直接通过订阅API筛选指定客户的订阅:

$customer_id = 'cus_xxxxxx';

// 查询该客户的所有订阅
$subscriptions = \Stripe\Subscription::all(['customer' => $customer_id]);

if (!empty($subscriptions->data)) {
    $first_sub_id = $subscriptions->data[0]->id;
    var_dump($first_sub_id);
} else {
    echo "该客户没有订阅记录";
}

注意事项

  • 确保$customer_id是格式正确的Stripe客户ID(通常以cus_开头)。
  • 建议添加Stripe API的异常捕获(比如try-catch),处理网络错误、权限不足等其他潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 07:52:47