如何通过使用共享客户创建直接收费?

时间:2018-07-12 16:01:22

标签: c# stripe-payments stripe.net

我正在尝试从我的平台直接向关联帐户创建费用。 Stripe支持我建议我通过使用共享客户来执行此操作,但这只是造成了更多问题。

如果可以的话,代码本身非常简单。它使用iOS应用提供的src_...令牌更新平台客户。这可行。然后,它尝试使用StripeTokenService()创建共享客户。尽管遵循the documentation to the letter,但这仍然行不通。我收到的错误是:

  

您提供的客户没有指定来源。客户的默认来源是来源,无法与现有客户共享。

我看不到Stripe .Net SDK中向共享客户提供源的方法。我所能提供的只是一个CardBankAccount,我都不愿意这样做,因为API不应与敏感的用户信息保持联系。

我在这里到底在做什么错?

StripeConfiguration.SetApiKey(Settings.Stripe.SecretKey);
var businessRequestOptions = new StripeRequestOptions { StripeConnectAccountId = businessOwner.StripeAccountId };

var customerService = new StripeCustomerService();
customerService.Update(userDetail.StripeCustomerId, new StripeCustomerUpdateOptions
{    
  SourceToken = stripeToken // = 'src_...'
});

var tokenService = new StripeTokenService();
// this is the call that generates the error I mentioned above \/ \/ 
var token = tokenService.Create(new StripeTokenCreateOptions
{
  CustomerId = userDetail.StripeCustomerId // = 'cus_...'
}, businessRequestOptions);

// create a direct charge to the business account (taking out application fee)
var chargeService = new StripeChargeService();
var stripeCharge = chargeService.Create(new StripeChargeCreateOptions
{
  Amount = Convert.ToInt32(fee),
  Currency = currency,
  Description = $"Payment to {businessOwner.BusinessName} through Service X",
  ApplicationFee = applicationFee,
  SourceTokenOrExistingSourceId = token.Id, // use shared customerId here
}, businessRequestOptions);

1 个答案:

答案 0 :(得分:3)

使用来源时,您必须使用此处记录的另一种方法:https://stripe.com/docs/sources/connect#shared-card-sources

这个想法是,您要将源从平台“克隆”到连接的帐户。在创建新源时,使用original_source完成此操作。然后,您将获得一个具有不同ID src_XXXX的新Source对象,然后可以直接在已连接的帐户中收费。