当前位置: 首页 > 知识库问答 >
问题:

将Stripe平台客户克隆到连接帐户客户-没有这样的payment_intent:'pi_abc... zyx'

胡国兴
2023-03-14

我使用的是React组件。js尝试并处理连接帐户的付款,并从每次付款中收取费用。我不确定我的客户和服务器之间的流程是否正确地选择了我的克隆客户和付款方式。当我的测试客户试图付款时,我得到“没有这样的付款意图:'pi_abc…zyx'”。我已确保在客户端和服务器上使用了正确的专用测试密钥。我的关联账户是快递账户。当我进入Stripe仪表板查看“连接”下的“客户”选项卡时,我看到的是:

每次我尝试付款时,似乎都会创建一个空白条目。

以下是我目前正在采取的让平台客户支付连接帐户的步骤:

  1. 当客户第一次在我的网站上注册时,我安装的Stripe-fire base扩展会自动生成一个客户ID。这些现在被认为是我的平台客户
  2. 我允许平台客户创建快速连接帐户,这非常好。我现在有他们的Stripe帐户ID ex:'acct_abc... xyz'。
  3. 现在是平台客户尝试向连接帐户付款时的流程:

React/Client Side-loadStripe仅使用测试密钥,而不使用Stripe连接帐户Idconst stripePromise=loadStripe('pk_test_abc...');。我将此提供给

React/客户端-用户填写付款单并按submit。从客户端/平台创建paymentMethodReq:

const paymentMethodReq = await stripe.createPaymentMethod({
                type: 'card',
                card: cardElement,
                billing_details: billingDetails
            });

节点/服务器端-客户端然后向我的服务器发出请求,尝试将平台支付方式克隆到连接的帐户:

const serverPaymentMethod = await stripe.paymentMethods.create({
            customer: data.customerStripeId, // Customer ID of the customer paying (platform customer)
            payment_method: data.paymentMethodId, // Using the payment method Id generated from 'paymentMethodReq' on the client side
        }, {
            stripeAccount: connectedAccountStripeAccountId, // Using the Connected Account
        });

节点/服务器端-然后客户端向我的服务器发出请求,从平台创建/克隆一个新客户,并将其链接到连接的帐户

const customer = await stripe.customers.create({
            payment_method: data.paymentMethodId, //Payment method id generated from 'serverPaymentMethod' above
        }, {
            stripeAccount: connectedAccountStripeAccountId, // Using the same Connected Account
        });

节点/服务器端——然后,客户机向我的服务器发出请求,以使用链接到连接帐户的客户id以及从服务器生成的支付方法创建支付意图

const intent = await stripe.paymentIntents.create({
        amount: data.price * 100,
        currency: 'usd',
        payment_method_types: ['card'],
        payment_method: data.paymentMethodId, // Payment method id generated from 'serverPaymentMethod' above
        customer: data.customerStripeId, // Customer Id generated from 'customer' above
        description: data.desc,
        capture_method: 'manual',
        application_fee_amount: (data.price * 100) * 0.15,

    }

反应/客户端-我尝试确认卡付款,这导致“无此类付款意图:'pi_abc…zyx'”错误

const confirmedCardPayment = await stripe.confirmCardPayment(paymentIntentResult?.data?.client_secret, {
                payment_method: serverPaymentMethod?.data.id //Payment method id generated from 'serverPaymentMethod' above
            });

我尝试用调用我的服务器来替换客户端上的stripe.confirmCardPayment,而不是像这样确认付款意图:

const confirmPaymentIntent = await stripe.paymentIntents.confirm(
data.paymentIntentId, // Payment intent id generated from 'intent' above
{ 
payment_method: data.paymentMethodId // Payment method id generated from 'serverPaymentMethod' above
});

这也导致“没有此类支付意图‘pi_3K…9Rx’”

如果有人能帮我找出这个过程中的错误,我将不胜感激。非常感谢。


共有1个答案

艾俊晖
2023-03-14

该错误表示PaymentIntent属于您当前呼叫使用的密钥的不同帐户。它可能是:

  1. 您在平台上创建了PaymentIntent帐户,然后从您的连接帐户确认它

虽然我看到PaymentIntent创建和确认调用都没有使用stripeAccount参数,但我怀疑您在某个地方错过了代码,并且PaymentIntent实际上是在您的连接帐户中创建的,这导致了上面的#2可能性。

要对此进行调试,您可以通过在仪表板的搜索框中搜索其ID来检查PaymentIntent属于哪个帐户,或者只需使用ID写入Stripe Support,他们就可以为您进行检查。

 类似资料:
  • 我正在使用Laravel出纳和Stripe开发一个web应用程序订阅。 我正在使用stripev3javascriptapi,并使用card元素生成stripetoken。正在生成条带标记,如果您查看条带仪表板,将创建一个客户。此外,正在用户数据库中保存条带id。但是,当我尝试使用以下代码向用户订阅计划时: 它失败了,错误是:“没有这样的客户:cus_xxxxxx”。$PlanId变量是Strip

  • 我知道我可以在Stripe中为客户保存一张卡片,供以后使用。我的问题是,我可以用主Stripe登录帐户上的卡保存客户,并将该客户用于所有子帐户(连接帐户)吗。还是必须在每个连接的帐户上创建并保存客户才能工作。 条纹付款:保存代币和客户,稍后从代币付款

  • 我想向使用关联账户的客户收费。这是我的流程,我在< code>charge响应中收到< code>customer: null,但客户并未被收取费用,尽管交易已经完成。 我正在使用客户ID在服务器端创建令牌。https://stripe.com/docs/connect/shared-customers

  • 我在我的API中使用条带连接,我想更新和处理现有的paymentIntent。使用NodeJS条带包创建paymentIntent成功 这将成功返回一个paymentIntent对象,该对象具有id('pi_yyy')、客户端密码('pi_yyy_secret_zzz')、状态('requires_payment_method')和更多字段。 但是,当使用返回的支付意图id进一步更新支付意图或使用

  • 我想使用贝宝来允许我的客户用信用卡或借记卡付款,我已经允许用贝宝付款,我知道在登录贝宝表单的按钮下,它的一个按钮上写着“用信用卡或借记卡付款”,但我想让用户直接从脚本到贝宝客人结账。 我使用PayPal SDK,这是我的代码: 我需要这个地方 而不是这个

  • 我可以使用Stripe API接收客户付款,但我希望它应该使用客户ID发送给其他客户。 我已经编写了接收付款的代码,但我希望付款应使用他的客户ID发送给其他客户。 它应该发送给其他客户,但我不知道要在这里添加哪些其他代码片段。