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

如何在PHP中展示Stripe API获取的PaymentIntent输出信息?

解决Stripe PaymentIntent数据获取与展示问题

问题根源

你调用Stripe的paymentIntents->retrieve()方法时没有接收返回值,导致$paymentIntents变量未定义,自然无法输出数据;而var_dump($stripe)只能得到Stripe客户端对象本身,不是PaymentIntent的返回结果。


核心修正步骤

必须接收retrieve()方法的返回值,才能拿到包含收货地址、邮箱等信息的PaymentIntent对象。以下是完整的PHP代码示例:

// 初始化Stripe客户端(替换为你的API密钥)
$stripe = new \Stripe\StripeClient('sk_test_xxxxxxxxxxxxxxxxxxxxxxxx');

// 关键:接收PaymentIntent的返回结果
try {
    $paymentIntent = $stripe->paymentIntents->retrieve(
        'pi_xxxxxxxxxxxxxx', // 替换为实际的PaymentIntent ID
        []
    );
} catch (\Stripe\Exception\ApiErrorException $e) {
    // 处理API调用错误(比如无效的PaymentIntent ID)
    echo "获取支付信息失败:" . $e->getMessage();
    exit;
}

提取并展示所需信息

从返回的$paymentIntent对象中提取收货地址、客户邮箱等字段,直接在确认页面输出:

<!-- 展示收货地址 -->
<div class="order-shipping">
    <h3>收货信息</h3>
    <?php if (isset($paymentIntent->shipping)): ?>
        <p>收货人:<?= htmlspecialchars($paymentIntent->shipping->name) ?></p>
        <p>地址:<?= htmlspecialchars($paymentIntent->shipping->address->line1) ?></p>
        <p>城市:<?= htmlspecialchars($paymentIntent->shipping->address->city) ?></p>
        <p>邮编:<?= htmlspecialchars($paymentIntent->shipping->address->postal_code) ?></p>
        <p>国家:<?= htmlspecialchars($paymentIntent->shipping->address->country) ?></p>
    <?php else: ?>
        <p>未填写收货地址</p>
    <?php endif; ?>
</div>

<!-- 展示联系邮箱 -->
<div class="order-email">
    <h3>联系邮箱</h3>
    <?php 
    // 优先使用支付时提供的receipt_email
    if (!empty($paymentIntent->receipt_email)) {
        echo htmlspecialchars($paymentIntent->receipt_email);
    } 
    // 如果关联了Stripe客户,从客户对象获取邮箱
    elseif (!empty($paymentIntent->customer)) {
        $customer = $stripe->customers->retrieve($paymentIntent->customer);
        echo htmlspecialchars($customer->email);
    } else {
        echo "未提供邮箱信息";
    }
    ?>
</div>

注意事项

  • 确保使用对应环境的API密钥:测试环境用sk_test_xxx,生产环境用sk_live_xxx
  • PaymentIntent必须包含shipping字段才能获取收货地址,若支付流程中未收集地址,该字段会为null
  • 若PaymentIntent是前端创建的,需确保将生成的pi_xxx ID传递到后端确认页面
  • 输出用户输入的信息时,用htmlspecialchars()防止XSS攻击

内容的提问来源于stack exchange,提问作者Daniel T Sasser II

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 20:22:26