如何在stripe php-slim中检索客户名称



服务器端

<?php
$app->get('/order', function (Request $request, Response $response) {
$id = $_GET['sessionId'];
$checkout_session = StripeCheckoutSession::retrieve($id);
$customer = StripeCustomer::retrieve($checkout_session->customer);
echo json_encode($customer);
});
$app->run();
客户端代码

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Order Confirm</title>
</head>
<body>
<div id="main">
<div id="checkout">
<div id="payment-forum">
<h1>Success</h1>
<section class="order">
<li>name <span id="customer_name"></span></li>
</section>
payment status: <span id="payment-status"></span>
<pre>

</pre>
</div>
</div>
</div>
</body>
<script>
var paymentStatus = document.getElementById('payment-status');
var customer = document.getElementById('customer_name');
var urlParams = new URLSearchParams(window.location.search);
var sessionId = urlParams.get("session_id")
if (sessionId) {
fetch("/order?sessionId=" + sessionId).then(function(result){
return result.json()
}).then(function(session){
var sessionJSON = JSON.stringify(session, null, 2);
document.querySelector("pre").textContent = sessionJSON;
paymentStatus.innerText = session.payment_status;
}).catch(function(err){
console.log('Error when fetching Checkout session', err);
});
}
</script>
</html>

hi

我在成功页面上工作,我确实在屏幕上看到了整个付款意向,但我只想选择客户的名字和付款状态,为什么它会打印整个付款意向。

提前感谢您帮助

编辑------------------------------

paymentStatus.innerText = session.payment_status;

我设法获得付款状态,但如果我将$customer更改为$checkout_session

但正如一位绅士所说,调用$checkout_session是有风险的,如果我使用$customer,那么支付状态的javascript是

paymentStatus.inerText=session.payment_status;

以及我将如何处理其他不属于客户的东西,如元数据、价格、电子邮件

编辑2--------------------------------------------

就像我为了额外的安全性做了一些更改,比如如果我在后台发送这些值,那么整个意图就不会暴露出来,所以我得到了另一个问题

$app->get('/order', function (Request $request, Response $response) {
$id = $_GET['sessionId'];
$checkout_session = StripeCheckoutSession::retrieve($id);
$amount = $checkout_session->amount_total;
$payment_status = $checkout_session->payment_status;

echo json_encode([$payment_status,$amount]);
});

我在前端只得到了这个数量,我做了一些改变,比如

<script>
var paymentStatus = document.getElementById('payment-status');
var amount = document.getElementById('amount1');
var urlParams = new URLSearchParams(window.location.search);
var sessionId = urlParams.get("session_id")
if (sessionId) {
fetch("/order?sessionId=" + sessionId).then(function(result){
return result.json()

}).then(function(session){
var sessionJSON = JSON.stringify(session, null, 2);
document.querySelector("pre").textContent = sessionJSON;
amount.innerText = session;
paymentStatus.innerText = session;
}).catch(function(err){
console.log('Error when fetching Checkout session', err);
});
}
</script>
</html>

但现在的问题是,我只能有一个值,我如何在中添加支付状态

echo json_encode([$amount,$payment_status](

dosent工作,如果它也工作,将如何在客户端中为单独的id设置两个值

好的,这里有几件事。首先,我会记录$id$checkout_session,以便在将其发送到客户端之前,100%确定您在服务器端检索的数据。您的代码在任何时候都不应该返回付款意向。您可能会返回整个Checkout会话,在这种情况下,将所有检索到的值记录在服务器上应该有助于识别哪些变量在运行时包含哪些值。

AFAIK Stripe维护的唯一PHP客户端就是这个。如果这不是你正在使用的版本,我会考虑切换。

另一件需要考虑的事情是如何检索Customer对象。您可以展开Customer属性,以便返回完整的对象,而不仅仅是id。你可以在这里阅读关于扩大回应的内容。在您的情况下,请求看起来像这样(根据当前语法修改了Stripe库的实例化(:

$stripe = new StripeStripeClient("sk_test_XXXXXXXXXXXX");
$checkout = $stripe->checkout->sessions->retrieve(
'cs_test_XXXXXXXXXXX',
['expand' => ['customer']]
);

从这里,您可以直接从$checkout->customer返回Customer对象。

最新更新