我正在致力于使用 Stripe Connect 为客户提供嵌入式支付解决方案。我可以使用以下服务器端代码成功创建结帐会话:
var options = new Stripe.Checkout.SessionCreateOptions
{
LineItems = new List<Stripe.Checkout.SessionLineItemOptions>
{
new Stripe.Checkout.SessionLineItemOptions
{
PriceData = new Stripe.Checkout.SessionLineItemPriceDataOptions
{
Currency = "aud",
ProductData = new Stripe.Checkout.SessionLineItemPriceDataProductDataOptions
{
Name = "Gift Voucher",
},
UnitAmount = 30000,
},
Quantity = 1,
},
},
PaymentIntentData = new Stripe.Checkout.SessionPaymentIntentDataOptions
{
ApplicationFeeAmount = 110,
},
Mode = "payment",
UiMode = "embedded",
ReturnUrl = "https://localhost:44389/blah/StripeCheckoutReturn",
ClientReferenceId = "12345"
};
var requestOptions = new RequestOptions
{
StripeAccount = "abcd..."
};
var service = new SessionService();
Session session = service.Create(options, requestOptions);
TempData["StripeSession"] = session.Id;
return Json(new { clientSecret = session.ClientSecret });
上面的代码运行良好,我能够在嵌入的 Stripe 付款表单上完成测试付款。
当我尝试在 ReturnUrl 端点中检索会话时,会出现问题。下面的代码失败并出现 Stripe 异常,提示 no such checkout.session.
[HttpGet]
[AllowAnonymous]
public async Task<ActionResult> StripeCheckoutReturn()
{
string session_id = TempData["StripeSession"].ToString();
var service = new SessionService();
Session session = service.Get(session_id);
if (session.PaymentStatus == "paid")
{
}
}
但是,如果我硬编码 Connect 客户端的帐户 ID,如下所示,错误就会消失,并且我成功获取会话。
[HttpGet]
[AllowAnonymous]
public async Task<ActionResult> StripeCheckoutReturn()
{
string session_id = TempData["StripeSession"].ToString();
var requestOptions = new RequestOptions
{
StripeAccount = "acct_12345..."
};
var service = new SessionService();
Session session = service.Get(session_id, requestOptions: requestOptions);
if (session.PaymentStatus == "paid")
{
}
}
这对我来说是先有鸡还是先有蛋的情况,因为据我所知,如果没有相关的客户帐号,我就无法获得会话。但只有在获得会话之后,我才能获得“ClientReferenceId”,这是我需要的并用于使会话与我们的内部系统协调一致。
我向 Stripe 支持提出了这个问题,他们最初回复我说问题是因为我没有设置 ApplicationFeeAmount。但是,当我回复他们的电子邮件支持时,表明我确实正确设置了金额,并且当我提供客户的帐户 ID 时会话解决得很好,我只是收到一封自动电子邮件回复,建议我使用他们的聊天联系 Stripe,这只是一个机器人人工智能助手。
我没有获得适当的支持票,并且我的仪表板上没有可以管理支持问题的“支持”部分。
您应该在
{CHECKOUT_SESSION_ID}
中包含 return_url
,例如:“https://localhost:44389/blah/StripeCheckoutReturn?session_id={CHECKOUT_SESSION_ID}”。完成结帐会话后,Stripe 会将 {CHECKOUT_SESSION_ID}
占位符替换为实际的结帐会话 ID,以便您的应用程序可以从查询参数中检索结帐会话 ID。您可以在此处找到示例代码