为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕莱坞森 2023-03-22 16:26:17
我在 Stripe 中有两种类型的用户:最终客户(支付和接收产品/服务);连接用户(将拥有连接帐户并将提供产品/服务);让我们假设在下面的例子中用户是一个模型实例(Django):# Connect Accountinstance = 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 Accountinstance = 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,)
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

当您处理针对客户 ( ) 的付款时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,但是仅使用它们来测试事物的连接方面也许没问题。


查看完整回答
反对 回复 2023-03-22
  • 1 回答
  • 0 关注
  • 88 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信