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

如何在PHP中从Stripe PaymentIntent响应获取receipt_url

如何从Stripe PaymentIntent中用PHP获取receipt_url

你的代码问题在于charges下的data是数组类型(即使只有一条Charge记录),不能直接通过["data"]["receipt_url"]访问,必须指定数组索引(比如第一个元素用[0])。

正确的实现方式

1. 当$response是JSON解码后的关联数组时

如果你的Webhook是直接解码原始JSON得到的关联数组,正确写法如下:

// 先校验PaymentIntent状态为成功,避免处理无效数据
if ($response['status'] === 'succeeded' && !empty($response['charges']['data'])) {
    // 获取第一条Charge记录中的receipt_url
    $receipt_url = $response['charges']['data'][0]['receipt_url'];
    
    // 后续可将该链接发送给客户,比如通过邮件
    // 示例邮件逻辑:
    // mail($customer_email, "你的支付收据", "点击查看收据:{$receipt_url}");
}

2. 当使用Stripe PHP SDK解析Webhook时

如果采用Stripe官方SDK处理Webhook(推荐方式),PaymentIntent是Stripe对象,需通过对象属性访问:

// 初始化Stripe SDK(提前配置好密钥)
\Stripe\Stripe::setApiKey('你的Stripe密钥');

// 解析Webhook请求内容
$payload = @file_get_contents('php://input');
$event = \Stripe\Event::constructFromJson($payload);

// 仅处理支付成功的事件
if ($event->type === 'payment_intent.succeeded') {
    $paymentIntent = $event->data->object;
    
    // 获取第一条Charge对象
    $charge = $paymentIntent->charges->data[0];
    $receipt_url = $charge->receipt_url;
    
    // 执行发送收据给客户的逻辑
}

注意事项

  • 必须先确认payment_intent的status为succeeded,只有成功支付才会生成有效收据链接
  • 要判断charges->data是否非空,避免数组索引越界报错
  • 若存在多笔Charge记录(比如部分退款后再次捕获的场景),需根据业务逻辑选择对应Charge获取收据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 01:25:24