首页 > 解决方案 > 在 Stripe API 调用中扩展 Source 对象到 StripeBalenceService 不会返回任何客户信息

问题描述

我正在对Stripe.net API进行 ac# 调用,以获取已连接帐户的余额历史记录。我正在尝试扩展余额交易对象以查看费用的来源(例如进行收费的客户),因为我平台上已连接帐户的所有费用都来自具有目标属性的费用对象到已连接帐户

这是我的代码和扩展源代码的屏幕截图,但我认为我应该看到收费 id 或客户或某处将我介绍给初始客户的东西,但我不...

var balanceService = new StripeBalanceService();
balanceService.ExpandSource = true;
var list = new List <string> () {
  "data.source.source_transfer"
};
StripeList <StripeBalanceTransaction> balanceTransactions 
  = balanceService.List(
  new StripeBalanceTransactionListOptions() {
      Limit = 20,
      Type = "payment",
      Expand = list
  },
  new StripeRequestOptions() {
    StripeConnectAccountId = accountId
  }
);

foreach(var transaction in balanceTransactions) {
  var test = transaction;
}

在此处输入图像描述

我觉得我应该看到一个费用 ID(例如 ch_xxx)或一个客户值(它为空)我看到的所有相关性都是一个付款 ID(例如 py_xxx)

标签: c#stripe-paymentsstripe-connectstripe.net

解决方案


可以得到charge object( ch_xxx),只是有点牵扯!

当您使用目的地费用时,费用(ch_xxx)发生在平台帐户上,然后转帐tr_xxx)到连接的帐户。该转账会在关联账户上创建一个支付(py_xxx),从而产生余额交易(txn_xxx)。

随着您的代码扩展这些余额交易的来源,您将获得 payment( py_xxx)。支付相当于一笔费用,所以它有一个source_transfer字段。您也可以扩展此字段!这将为您提供传输对象(tr_xxx)。最后,转移有一个source_transaction字段,可以扩展它以给出原始费用(ch_xxx)!

将所有这些放在一起,您将需要扩展"data.source.source_transfer.source_transaction".

如果您在动态语言中使用 Stripe 库,您可以看到这一点……不幸的是,现在stripe-dotnet有一个未解决的问题,这意味着您不能直接执行此操作。相反,您需要通过调用RetrieveID 上的各种函数来手动进行 API 调用,而不是进行单个扩展。它看起来像这样:

var paymentId = transaction.Source.Id;
var chargeService = new StripeChargeService();
var payment = chargeService.Get(
    paymentId,
    new StripeRequestOptions()
    {
        StripeConnectAccountId = accountId
    }
);
var transferService = new StripeTransferService();
transferService.ExpandSourceTransaction = true;
var transfer = transferService.Get(payment.SourceTransferId);
var charge = transfer.SourceTransaction;
Console.WriteLine(charge.Id);

推荐阅读