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

Stripe订阅后发送发票时出现PHP非对象上下文使用$this错误

问题分析与解决

错误核心原因

你遇到的「非对象上下文中使用$this」错误,本质是错误地以静态方法方式调用了Stripe SDK的实例方法。Stripe PHP SDK里的sendInvoice是Invoice类的实例方法,必须在已实例化的Invoice对象上调用;直接用\Stripe\Invoice::sendInvoice()静态调用时,没有对应的对象实例,自然会触发$this不存在的错误。

同时你的代码顺序完全颠倒:先调用sendInvoice再创建订阅,这会导致$stripe_subscription未初始化,即使没触发当前错误,也会传入无效的发票ID。

修正后的代码

// 第一步:先创建订阅,获取有效的latest_invoice
$stripe_subscription = \Stripe\Subscription::create([
    'customer' => $stripe_customer->id,
    'payment_behavior' => 'allow_incomplete',
    'items' => [['price' => $price->id]],
    'metadata' => ['Address' => "address"],
]);

// 第二步:通过retrieve方法获取Invoice实例
$invoice = \Stripe\Invoice::retrieve($stripe_subscription->latest_invoice);

// 第三步:调用实例方法sendInvoice
$invoice->sendInvoice([]);

关键说明

  • Stripe SDK中,大部分操作资源的方法都是实例方法,比如发送发票、更新资源等,必须先通过retrieve或create方法获取对象实例后再调用
  • 确保代码执行顺序正确:依赖某个资源的操作,必须放在该资源创建/获取之后

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:25:22