Интеграция iDeal с Stripe Connect для разделения платежей

#stripe-payments #dokan

#stripe-платежи #dokan

Вопрос:

Я запускаю веб-сайт Marketplace с помощью Dokan Pro, в который я интегрировал Stripe Connect. Теперь я хочу интегрировать iDeal с ним, но у них его нет официально, поэтому я следую документации Stripe, чтобы выполнить некоторые пользовательские кодировки, но пока я ничего не могу добиться.

Stripe предоставила мне эту документацию:

https://stripe.com/docs/connect/direct-charges#create-a-charge

В Stripe есть официальный плагин для Woocommerce, который также имеет опцию iDeal, но проблема в том, что он не разделяет платежи, потому что он не работает с Stripe Connect. Я пытался отредактировать его код, но при отправке параметра application_fee выдает ошибку. Вот код:

 public function create_source( $order ) {
    $currency              = $order->get_currency();
    $return_url            = $this->get_stripe_return_url( $order );
    $post_data             = array();
    $post_data['amount']   = WC_Stripe_Helper::get_stripe_amount( $order->get_total(), $currency );
    $post_data['currency'] = strtolower( $currency );
    $post_data['type']     = 'ideal';
    $post_data['application_fee_amount']     = '10';
    $post_data['owner']    = $this->get_owner_details( $order );
    $post_data['redirect'] = array( 'return_url' => $return_url );

    if ( ! empty( $this->statement_descriptor ) ) {
        $post_data['statement_descriptor'] = WC_Stripe_Helper::clean_statement_descriptor( $this->statement_descriptor );
    }

    WC_Stripe_Logger::log( 'Info: Begin creating iDeal source' );

    return WC_Stripe_API::request( apply_filters( 'wc_stripe_ideal_source', $post_data, $order ), 'sources' );
}
  

Любая помощь будет оценена.

Комментарии:

1. Можете ли вы поделиться информацией об ошибках, которые вы получаете, и подробнее рассказать о том, что вы подразумеваете под «разделением платежей»? Я собираюсь сделать некоторые предположения и ответить ниже, но при необходимости обновлю.

Ответ №1:

Предположение: я предполагаю, что для «разделенных платежей» вы имеете в виду обработку, когда клиент выполняет один заказ / платеж на вашей платформе, который включает товары / услуги более чем от одного поставщика. Вам необходимо распределить платеж и отправить часть его более чем на одну учетную запись назначения.

Пара пунктов, которые, я думаю, усложняют вам задачу:

  • Вместо источников я бы рекомендовал посмотреть обновленное руководство по намерениям оплаты для iDEAL. Вы должны найти, что это намного лучше согласуется со всей последней документацией по API Stripe.
  • Если вы собираетесь разделить платежи нескольким получателям, вы не сможете сделать это с помощью прямых платежей. Вместо этого вы должны использовать «Отдельные платежи и переводы», чтобы позволить вам отправлять части платежа нескольким поставщикам товаров / услуг.

На сервере:

 // Create a PaymentIntent:
$paymentIntent = StripePaymentIntent::create([
  'amount' => 10000,
  'currency' => 'eur',
  'payment_method_types' => ['ideal'],
  'transfer_group' => 'YOUR_ORDER_ID_123',
]);

// Send $paymentIntent->client_secret to the client
  

На клиенте:

 //HTML
<div id="ideal-bank-element">
  <!-- A Stripe Element will be inserted here. -->
</div>

//JS
// Create an instance of the idealBank Element
var idealBank = elements.create('idealBank', options);

// Add an instance of the idealBank Element into
// the `ideal-bank-element` <div>
idealBank.mount('#ideal-bank-element');
...
    stripe.confirmIdealPayment(
    '{{PAYMENT_INTENT_CLIENT_SECRET}}',
    {
      payment_method: {
        ideal: idealBank,
        billing_details: {
          name: accountholderName.value,
        },
      },
      return_url: 'https://your-website.com/checkout/complete',
    }
  );
  

На сервере, позже:

 // Create a Transfer to a connected account (later):
$transfer = StripeTransfer::create([
  'amount' => 7000,
  'currency' => 'eur',
  'destination' => 'acct_123',
  'transfer_group' => 'YOUR_ORDER_ID_123',
]);

// Create a second Transfer to another connected account (later):
$transfer = StripeTransfer::create([
  'amount' => 2000,
  'currency' => 'eur',
  'destination' => 'acct_456',
  'transfer_group' => 'YOUR_ORDER_ID_123',
]);
  

Комментарии:

1. Я ценю ваш подробный ответ. Позвольте мне дать вам некоторое объяснение. Итак, я использую Dokan Pro на своем веб-сайте, и с ним интегрирован модуль Stripe Connected. Он поддерживает платежи по картам и правильно распределяет их на подключенный Stripe connect. Я хочу ту же функциональность через iDeal, которую Dokan не интегрировал. Я поговорил с Stripe, они предоставили мне документацию, которой я поделился выше, поэтому мне просто нужна подсказка, где должно происходить разделение в коде, чтобы у меня была идея и интегрировать то же самое с iDeal.

2. Да, тогда то, что я ответил, это то, что вам нужно. Разделение платежей и переводов — это способ разделения платежей.