如何在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_xxxID传递到后端确认页面 - 输出用户输入的信息时,用
htmlspecialchars()防止XSS攻击
内容的提问来源于stack exchange,提问作者Daniel T Sasser II
相关产品推荐
相关产品推荐

