创建连接和客户用户 - 借记卡并将钱转入银行账户

我在 Stripe 中有两种类型的用户:

  • 最终客户(支付和接收产品/服务);

  • 连接用户(将拥有连接帐户并将提供产品/服务);

让我们假设在下面的例子中用户是一个模型实例(Django):

# Connect Account

instance = stripe.Account.create(

    type="custom",

    country="PL",

    email=user.email,

    default_currency="pln",

    business_type="individual",

    requested_capabilities=["card_payments", "transfers",],

    individual={

        "first_name": user.first_name.strip(),

        "last_name": user.last_name.strip(),

        "email": user.email,

        "dob": {

            "day": user.profile.date_of_birth.day,

            "month": user.profile.date_of_birth.month,

            "year": user.profile.date_of_birth.year,

        },

        "phone": user.profile.phone_number,

        "address": {

            "city": user.city.strip(),

            "postal_code": user.profile.postal_code.strip(),

            "country": "PL",

            "line1": user.profile.address.strip(),

        },

    },

)

# Customer Account

instance = stripe.Customer.create(

    email=user.email,

    description="desc",

    name=user.get_full_name.strip(),

    phone=user.profile.phone_number.strip(),

)

这两个 API 调用正常工作。然后我能够为新用户检索唯一的Stripe ID :


stripe_customer_id = instance.get("id")

对于stripe.Account类型,我需要提供身份验证:身份证正反面(作为示例):


document_images_data = [

   "data:image/png;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",

   "data:image/png;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",

]


_front = stripe.File.create(

    purpose="identity_document",

    file=Base64ImageField().to_internal_value(base64_data=document_images_data[0]),

    stripe_account=stripe_customer_id,

)


_back = stripe.File.create(

    purpose="identity_document",

    file=Base64ImageField().to_internal_value(base64_data=document_images_data[1]),

    stripe_account=stripe_customer_id,

)

慕莱坞森
浏览 89回答 1
1回答

慕少森

当您处理针对客户 ( ) 的付款时stripe.Charge.create,这会将资金添加到您的平台帐户的余额中。资金最初有pending一段时间(https://stripe.com/docs/payouts#standard-payout-timing)。调用 /v1/transfers ( stripe.Transfers.create) 尝试从您的余额中提取资金available并将其转移到目标 Stripe 帐户。如果你没有available余额,它就会失败,这里很可能就是这种情况。如果您的平台采用每日自动支付(默认设置),您实际上永远不会有available余额。那是因为 Stripe 会将资金直接从您的pending余额转移到您的支出中,这样您就可以尽快拿到这笔钱,这是大多数账户想要的(作为具有这种资金流的 Connect 平台,您更先进一些)。如果您想进行这种转移,我建议您按顺序执行以下操作:如果客户付款与关联账户付款之间的“延迟”(例如,提供服务需要多长时间)少于 7 天,您可以只使用目的地费用(https:// stripe .com/docs/connect/destination-charges)与 auth-and-capture(https://stripe.com/docs/payments/capture-later)。与单独收费和转账相比,工作量要少得多,而且您不必考虑太多余额。否则,您将需要:source_transaction调用时使用stripe.Transfer.create: https: //stripe.com/docs/connect/charges-transfers#transfer-availability。这样一来,转账就可以立即成功,收到费用中的资金将在可用时转移到关联账户。或者,将您的平台设置为手动支付: https://dashboard.stripe.com/settings/payouts 随着时间的推移,您将从available您的支付中积累余额。然后,您可以直接从该余额进行转账,就像您在问题中分享的 API 调用一样。在测试模式下,您可以使用特殊的测试卡来模拟余额,available而无需等待几天。为什么我在尝试 Stripe Transfers 时出现“资金不足”,即使我在我的账户中添加了 TEST 模式资金?最重要的问题是——这是一种正确的方法还是应该以不同的方式处理整个过程?这种模型(有一个市场,平台的每个用户都有一个 Stripe 客户和一个与之相关联的 Stripe 帐户,您将它们绑定在一起)很正常,但构建起来很棘手。同样,您实际上只是在构建标准的“单独收费和转账”集成:https://stripe.com/docs/connect/charges#separate-charges-transfers但您正在构建 Stripe 上最复杂的东西之一(Custom Connect + 单独收费和转账)所以这是一项艰巨的任务。我会尝试通过使用目的地费用来尽可能简化它,除非你绝对不能,并使用 Express 或 Stripe 的自定义帐户托管入职(https://stripe.com/docs/connect/connect-onboarding)除非你真的需要白标这个。此外,您应该使用 PaymentIntents( https://stripe.com/docs/payments/accept-a-payment ) 作为支付部分,而不是Charge.createTokens,因为它们不支持在欧洲很重要的 3D Secure,但是仅使用它们来测试事物的连接方面也许没问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python