ASP.NET Stripe Connect 嵌入式付款 - 无法在没有帐户 ID 的情况下获取会话

问题描述 投票:0回答:1

我正在致力于使用 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,这只是一个机器人人工智能助手。

我没有获得适当的支持票,并且我的仪表板上没有可以管理支持问题的“支持”部分。

c# asp.net stripe-payments
1个回答
0
投票

您应该在

{CHECKOUT_SESSION_ID}
中包含
return_url
,例如:“https://localhost:44389/blah/StripeCheckoutReturn?session_id={CHECKOUT_SESSION_ID}”。完成结帐会话后,Stripe 会将
{CHECKOUT_SESSION_ID}
占位符替换为实际的结帐会话 ID,以便您的应用程序可以从查询参数中检索结帐会话 ID。您可以在此处

找到示例代码
© www.soinside.com 2019 - 2024. All rights reserved.