使用 Stripe SDK 时如何检索结帐信息
How to retrieve checkout information when using Stripe SDK
这是我的网络应用程序中的购物车和结帐流程
我的目的是在结帐后检索交易 ID 或付款参考等付款信息
在我的 ASP.NET MVC 5 应用程序中,我在购物车视图中有以下代码
<div>
@using (Html.BeginForm("", "Cart", FormMethod.Post))
{
... here I show products in cart ...
... NOTE that I don't have any action in my form ...
<input type="submit" id="stripe-checkout-button" value="Checkout" />
}
</div>
<script type="text/javascript">
var stripe = Stripe('@ViewBag.StripePublishKey');
var checkoutButton = document.getElementById('stripe-checkout-button');
checkoutButton.addEventListener('click', function () {
fetch('https://localhost:44323/Cart/CreateCheckoutSession', {
method: 'POST'
})
.then(function(response) {
return response.json();
})
.then(function(session) {
return stripe.redirectToCheckout({ sessionId: session.id });
})
.then(function(result) {
if (result.error) {
alert(result.error.message);
}
})
.catch(function(error) {
console.error('Error:', error);
});
});
</script>
在购物车控制器中我有以下操作
[HttpPost]
public ActionResult CreateCheckoutSession()
{
var cart = (ShoppingCart)Session["cart"];
var options = new SessionCreateOptions
{
PaymentMethodTypes = new List<string> { "card" },
Mode = "payment",
SuccessUrl = Url.Action("CheckoutSuccessful", "Cart", null, Request.Url.Scheme),
CancelUrl = Url.Action("CheckoutCancelled", "Cart", null, Request.Url.Scheme),
PaymentIntentData = new SessionPaymentIntentDataOptions
{
CaptureMethod = "manual"
},
LineItems = new List<SessionLineItemOptions>()
};
foreach (var item in cart.Items)
{
// here I add the purchased product. I remove the code for simplification
}
var service = new SessionService();
Session session = service.Create(options);
ViewBag.SessionId = session.Id;
return Json(new { id = session.Id });
}
public ActionResult CheckoutSuccessful(string sessionId)
{
// sessionId is null here. I'm even not sure if I need this parameter
ShoppingCart cart = (ShoppingCart)Session["cart"];
return RedirectToAction("Index", "Checkout");
}
public ActionResult CheckoutCancelled()
{
return RedirectToAction("Index", "Cart");
}
当我点击结帐按钮时,应用程序重定向到 Stripe 支付页面,我可以输入电子邮件和账单信息并点击支付。它运行良好,付款成功。
根据我的设置,应用程序会在之后重定向到 CheckoutSuccessful 操作。
我在这里缺少的是,在 CheckoutSuccessful 操作中,我需要检索电子邮件地址和账单地址以及付款或交易 ID。我不知道该怎么做。
在 CheckoutSuccessful 中,参数 sessionId
为空。我不知道我在这里做错了什么或遗漏了什么。
感谢您的帮助。
您可以通过将 {CHECKOUT_SESSION_ID
附加到成功 URL 来确保新创建的结帐会话 ID 包含在您的成功 URL 中:https://stripe.com/docs/payments/checkout/custom-success-page#modify-success-url
然后在您成功后 URL 您可以从查询参数中获取会话 ID 并检索结帐会话。
经过几天的研究和尝试,我想通了。
创建 session
后,我需要将 session.Id
存储在 Http Session 和 CheckoutSuccessful
方法(不需要任何参数)中,我需要调用几个 API检索会话和付款信息,如下所示:
var service = new SessionService();
var session = service.Get(the stored session.Id);
var custService = new CustomerService();
var customer = custService.Get(session.CustomerId);
var paymentService = new PaymentIntentService();
var payment = paymentService.Get(session.PaymentIntentId);
然后,我将在 session
、customer
和 payment
对象中获得所有必需的信息。
这是我的网络应用程序中的购物车和结帐流程
我的目的是在结帐后检索交易 ID 或付款参考等付款信息
在我的 ASP.NET MVC 5 应用程序中,我在购物车视图中有以下代码
<div>
@using (Html.BeginForm("", "Cart", FormMethod.Post))
{
... here I show products in cart ...
... NOTE that I don't have any action in my form ...
<input type="submit" id="stripe-checkout-button" value="Checkout" />
}
</div>
<script type="text/javascript">
var stripe = Stripe('@ViewBag.StripePublishKey');
var checkoutButton = document.getElementById('stripe-checkout-button');
checkoutButton.addEventListener('click', function () {
fetch('https://localhost:44323/Cart/CreateCheckoutSession', {
method: 'POST'
})
.then(function(response) {
return response.json();
})
.then(function(session) {
return stripe.redirectToCheckout({ sessionId: session.id });
})
.then(function(result) {
if (result.error) {
alert(result.error.message);
}
})
.catch(function(error) {
console.error('Error:', error);
});
});
</script>
在购物车控制器中我有以下操作
[HttpPost]
public ActionResult CreateCheckoutSession()
{
var cart = (ShoppingCart)Session["cart"];
var options = new SessionCreateOptions
{
PaymentMethodTypes = new List<string> { "card" },
Mode = "payment",
SuccessUrl = Url.Action("CheckoutSuccessful", "Cart", null, Request.Url.Scheme),
CancelUrl = Url.Action("CheckoutCancelled", "Cart", null, Request.Url.Scheme),
PaymentIntentData = new SessionPaymentIntentDataOptions
{
CaptureMethod = "manual"
},
LineItems = new List<SessionLineItemOptions>()
};
foreach (var item in cart.Items)
{
// here I add the purchased product. I remove the code for simplification
}
var service = new SessionService();
Session session = service.Create(options);
ViewBag.SessionId = session.Id;
return Json(new { id = session.Id });
}
public ActionResult CheckoutSuccessful(string sessionId)
{
// sessionId is null here. I'm even not sure if I need this parameter
ShoppingCart cart = (ShoppingCart)Session["cart"];
return RedirectToAction("Index", "Checkout");
}
public ActionResult CheckoutCancelled()
{
return RedirectToAction("Index", "Cart");
}
当我点击结帐按钮时,应用程序重定向到 Stripe 支付页面,我可以输入电子邮件和账单信息并点击支付。它运行良好,付款成功。
根据我的设置,应用程序会在之后重定向到 CheckoutSuccessful 操作。
我在这里缺少的是,在 CheckoutSuccessful 操作中,我需要检索电子邮件地址和账单地址以及付款或交易 ID。我不知道该怎么做。
在 CheckoutSuccessful 中,参数 sessionId
为空。我不知道我在这里做错了什么或遗漏了什么。
感谢您的帮助。
您可以通过将 {CHECKOUT_SESSION_ID
附加到成功 URL 来确保新创建的结帐会话 ID 包含在您的成功 URL 中:https://stripe.com/docs/payments/checkout/custom-success-page#modify-success-url
然后在您成功后 URL 您可以从查询参数中获取会话 ID 并检索结帐会话。
经过几天的研究和尝试,我想通了。
创建 session
后,我需要将 session.Id
存储在 Http Session 和 CheckoutSuccessful
方法(不需要任何参数)中,我需要调用几个 API检索会话和付款信息,如下所示:
var service = new SessionService();
var session = service.Get(the stored session.Id);
var custService = new CustomerService();
var customer = custService.Get(session.CustomerId);
var paymentService = new PaymentIntentService();
var payment = paymentService.Get(session.PaymentIntentId);
然后,我将在 session
、customer
和 payment
对象中获得所有必需的信息。