条纹支付链接创建新客户

3
我们必须使用付款链接,因为我们正在使用MacOS和Windows上的本机桌面应用程序,Stripe在这里没有支持。
本机桌面应用程序没有web视图。
使用以下API和URL参数: https://stripe.com/docs/payments/payment-links#url-parameters
const paymentLink = await stripe.paymentLinks.create({
    line_items: [
        {
            price: price.id,
            quantity: 3,
            //
        },
    ],
});

前端的URL如下(请注意“client_reference_id”):
final url = link + "?client_reference_id=$customerId&prefilled_email=${stripeCustomer!.email}";

关键的URL参数已经添加。
问题在于,“client_reference_id”被忽略了,而且在Stripe仪表盘上创建了一个新客户,这对于进行付款来说不好,因为我们是针对在数据库中创建的特定帐户生成付款。
你有什么想法吗?
我们尝试了结账会话,但没有办法从链接中打开。:-/

当您说应用程序缺乏Web访问时,这是否意味着它没有与Stripe或您控制的服务器进行交互的方式?付款链接文档解释了client_reference_id是一个唯一的字符串,用于在您的系统中映射付款,它不相关于现有的Stripe对象,如客户。https://stripe.com/docs/payments/payment-links#url-parameters结帐会话似乎更适合,但如果您的应用程序无法与服务器交互,则可能无法利用它们。 - toby
它可以与互联网和服务器进行交互。但是它无法打开 Web 视图,因此无法访问链接。看起来付款链接相当无用,不确定接下来该怎么做。 - Oliver Dixon
不确定你怎么会认为在这种情况下它是无用的,它只是不适合你的用例,对吧?你需要做的是直接使用Checkout。您向服务器发出请求,在其中创建具有正确客户ID(存储在数据库中)的会话。 PaymentLinks更多地用于共享URL以让多个客户支付相同的东西的能力。 - koopajah
@koopajah 很遗憾,检查会话对于本地桌面应用程序没有网络/选项卡接受器或链接生成器。 - Oliver Dixon
@OliverDixon 我不知道您所说的“Web / Tab接受器”是什么,但Checkout Session有一个url属性,该属性是重定向顾客到达的URL。这与具有URL的PaymentLink没有任何区别,您可以访问该URL,然后为您创建Checkout Session。 - koopajah
2个回答

3
我找到了这个问题的答案。因此通用支付链接无法使用客户ID,但是您可以创建一个会话并将客户ID附加到其中。会话对象将返回一个URL。
例如:
    const session = await stripe.checkout.sessions.create({
        line_items: [{ price: price_id, quantity: 1 }],
        mode: 'subscription',
        success_url: 'https://app.seedscout.com',
        cancel_url: 'https://app.seedscout.com',
        customer: cus_id,
    });

您可以在此处查看其文档以获取更多信息。

https://stripe.com/docs/api/checkout/sessions/create


2
重要提示:Stripe对customer_reference_id的格式有要求:

client_reference_id可以由字母数字、破折号或下划线组成,最多可达200个字符。无效值会被静默丢弃,您的支付页面将继续正常工作。

我为了弄清楚为什么client_reference_id没有传递而苦恼不已,结果发现是这个问题——我用句点分隔了两个值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接