分条目标费用,如何设置关联帐户的说明

时间:2018-10-24 12:41:46

标签: stripe-payments

我们为卖家和客户建立了平台。

  • 客户应该能够使用不同的付款方式。
  • 卖方应收到发票的款项,但不会查看客户数据。

在Stripe中,这称为destination charge,其中平台向客户收费,但实际的钱却转给了卖家。然后,卖方会看到已向他付款,但不是由谁(除了通过“通过我们的平台”)向谁付款。

我在C#ASP.NET后端中使用Stripe.NET,但我的问题与技术无关。

我可以create a charge完全按照上述说明进行操作。

示例代码:

var stripeCharge = stripeChargeService.Create(
                new Stripe.ChargeCreateOptions
                    {
                        Amount = (int)(price * multiplier),
                        Currency = currency,
                        CustomerId = stripeCustomer.Id,
                        SourceId = source,
                        Destination = new Stripe.ChargeDestinationCreateOptions 
                                      {
                                          Account = stripeSellerId 
                                      },
                        StatementDescriptor = "PLATFORM: " + invoiceNumber,
                        Description = "PLATFORM Payment for invoice number " + invoiceNumber,
                        Metadata = new Dictionary<string, string> 
                                   {
                                        { "InvoiceNumber", invoiceNumber } 
                                   }
                    });

当我这样做时,它会起作用。我可以在平台帐户中看到费用。我可以在卖方帐户中看到付款。但是卖家没有得到我提供的任何信息。 “描述”和“元数据”仅显示在我的平台帐户的费用中。卖方付款只说“ 123.45€”。嗯...太好了...谁支付了发票?事实上,我不在乎。但是,已付款的发票似乎是每个构建平台或在其上进行销售的人的核心要求

我检查了Stripe.NET的文档,并检查了它是否早于Stripe API本身。但是没有可以设置的参数。我无法设置ChargeDestinationCreateOptions中的任何内容(例如,类似于DestinationDescription)。

卖家的描述字段存在,我可以在信息中心中看到它,但是它是空的。那我想念什么呢?

如何设置卖方在执行“目的地费用”时可以在其帐户中看到的付款的描述或元数据?

1 个答案:

答案 0 :(得分:4)

使用Stripe创建目标费用时,将创建三个对象:

  • 平台帐户上的费用对象(ch_xxx
  • 平台帐户上的转移对象(tr_xxx),代表转移到目标关联帐户。
  • 关联帐户上的付款对象(在API级别上相当于费用对象的py_xxx,代表从转帐到该帐户的资金。

从您的描述中,听起来这是您要在其中设置元数据或描述的第三个对象?没错,您无法直接在创建目标费用的参数中执行此操作。但是,一旦创建了费用,您就可以轻松获得对所创建付款的引用,并使用所需字段进行更新:

var chargeService = new StripeChargeService();
chargeService.ExpandTransfer = true;

var chargeOptions = new StripeChargeCreateOptions
{
    Amount = 1000,
    Currency = "usd",
    SourceTokenOrExistingSourceId = "tok_visa",
    Description = "Payment for Invoice #42",
    Destination = "acct_1DHFyLAXrgjEhAUx",
    DestinationAmount = 800
};
var charge = chargeService.Create(chargeOptions);
var paymentId = charge.Transfer.DestinationPaymentId;
var paymentUpdateOptions = new StripeChargeUpdateOptions
{
    Description = "Payment for Invoice #42"
};
chargeService.Update(paymentId, paymentUpdateOptions, new StripeRequestOptions
{
    StripeConnectAccountId = "acct_1DHFyLAXrgjEhAUx"
});

此处的关键点是,收费对象链接到transfer,转移对象链接到payment。因此,通过将其与API的expanding object feature结合使用,您可以访问付款并进行更新!