我的平台使用 Stripe Connect。 我的平台负责确保向相关税务机关收取、征收和支付适当数额的税款。 我的问题是 Stripe 正确计算税款,正确向客户收取费用……但它不是将收取的税费与申请费一起转移到平台帐户,而是将收取的税款转移到关联帐户。
这是我设置结账会话的代码
require APPPATH .'third_party/stripe-php/init.php'; // Include the Stripe PHP bindings library
\Stripe\Stripe::setApiKey($this->CI->config->item('stripe_api_key')); // Set API key
$reg_id = $this->input->post('reg_id');
$stripe_price_id = $this->input->post('stripe_price_id'); //this gets connected account number 'inst' is creator id value hidden in button
$stripeAccount = $this->Profiles_model->fetch_stripe_account_by_id($reg_id);
$email = $this->session->userdata('email');
$stripeCustomerID = $this->Profiles_model->fetch_stripe_customerID($email);
$session = \Stripe\Checkout\Session::create([
'customer' => $stripeCustomerID,
'customer_update' => [
'address' => 'auto',
],
'payment_method_types' => ['card'],
'mode' => 'subscription',
'metadata' => ['creator_id' => $reg_id],
"line_items" => [
['price' => $stripe_price_id,
'quantity' => 1,
],
],
'automatic_tax' => [
'enabled' => true,
],
'subscription_data' => [
// 'application_fee_percent' => 25,
'transfer_data' => [
'destination' => $stripeAccount,
'amount_percent' => 75,
],
],
'success_url' => 'https://example.com/purchasesuccess',
'cancel_url' => 'https://example.com/privatemember',
]);
Stripe 建议我增加申请费来支付税额,但是当收取的税额因客户位置而异时,我该怎么办? 我想也许我可以使用类似的方法来解决它:
'application_fee_amount' => ($fee+'line_items.data.amount_total'-'line_items.data.amount_subtotal'),
或
'application_fee_amount' => ($fee+'amount_total'-'amount_subtotal'),
或使用
'amount_percent' => 75,
文档说“amount_percent”是基于小计,但它转移了总额的 75%(即基本价格 + 税)。
想法?
所以我正在与 Stripe 合作解决这个问题,这是他们写的:
我理解您的观点,即税额应留给 平台,其余的则转移到关联帐户, 然而,从本质上讲,这并不是 Billing and Connect 产品的运作方式 操作。
创建订阅时,订阅对象会生成 发票,这将生成 payment_intents :
订阅 发票 - 付款意图
发票-Payment_intent
payment_intent 包含一系列属性,其中包括 金额、货币、客户(如果有的话)等。但是, 没有产品、折扣或税收的概念,因为这些是 订阅和发票对象的属性。
连接费用(即直接费用、目的地费用和单独费用以及 转账)在 payment_intent 级别处理,而不是订阅/ 发票级别。他们也没有产品、折扣的概念 和税收。当您从结账会话设置连接流程时
- 在您的情况下,使用 subscription_data.transfer_data 属性,amount_percent 无法与小计相关,因为这 payment_intent 级别不存在小计金额。
这是他们建议的解决方案。 我能够毫不费力地实现这个,所以它有效。
- 创建一个没有任何 Connect 属性的 Checkout 会话。有一个可以为结账会话设置的transfer_group参数,但它 不可订阅。然而,省略它并不 防止您以后处理 SCT。
-保存发票成功付款中的费用 ID ch_xxx。您可以从 charge.succeeded 事件或 payment_intent.succeeded 事件。您可能还想听 获取小计的invoice. payment_succeeded或invoice.paid事件 金额。
- 创建转账,以连接帐户的 acct_id 作为目的地,以发票小计作为金额,以费用的 ch_id 作为源交易: https://stripe.com/docs/connect/charges-transfers#transfer-availability source_transaction 参数在这里至关重要 - 它将链接 转移到收费处,这将确保资金即使转移 如果您的余额尚不可用,并将创建 自动缺少transfer_group。