Stripe Connect — Создайте несколько токенов для нескольких назначений

Я пытаюсь создать несколько клиентских токенов для отправки на сервер, чтобы сделать несколько назначенных платежей в Stripe Connect.

Я не могу использовать объект «Клиент», потому что для Платежей за назначение Клиент должен быть подключенной учетной записью на платформе, поэтому проверка гостей не будет работать.

Поэтому мне нужно вызвать Stripe.createToken ‘x’ раз и сохранить токены в количестве ‘x’ скрытых входов, используя функцию stripeResponseHandler, которые затем отправляются на сервер для обработки платежей.

Вот так мне удалось сделать это за 2 токена очень очень вручную:

Stripe.createToken( {
number:     card,
cvc:        cvc,
exp_month:  month,
exp_year:   year,
name:       name,
address_line1: address_line1,
address_line2: address_line2,
address_state: address_state,
address_city: address_city,
address_zip: address_zip,
address_country: address_country
}, stripeResponseHandler1 );

Stripe.createToken( {
number:     card,
cvc:        cvc,
exp_month:  month,
exp_year:   year,
name:       name,
address_line1: address_line1,
address_line2: address_line2,
address_state: address_state,
address_city: address_city,
address_zip: address_zip,
address_country: address_country
}, stripeResponseHandler2 );

function stripeResponseHandler1( status, response ) {
var $form = jQuery("form.checkout, form#order_review");

if ( response.error ) {
jQuery('.woocommerce_error, .woocommerce-error, .woocommerce-message, .woocommerce_message, .stripe_token').remove();
jQuery('#dokan-stripe-connect-card-number').closest('p').before( '<ul class="woocommerce_error woocommerce-error"><li>' + response.error.message + '</li></ul>' );

$form.unblock();

} else {
var token = response['id'];
wc_stripe_connect_params.token_done = true;

jQuery( '.stripe_token').remove();

$form.append("<input type='hidden' class='stripe_token' name='stripe_token1' value='" + token + "'/>");
}
}

function stripeResponseHandler2( status, response ) {
var $form = jQuery("form.checkout, form#order_review");

if ( response.error ) {
jQuery('.woocommerce_error, .woocommerce-error, .woocommerce-message, .woocommerce_message, .stripe_token').remove();
jQuery('#dokan-stripe-connect-card-number').closest('p').before( '<ul class="woocommerce_error woocommerce-error"><li>' + response.error.message + '</li></ul>' );

$form.unblock();

} else {
var token = response['id'];
wc_stripe_connect_params.token_done = true;

$form.append("<input type='hidden' class='stripe_token2' name='stripe_token2' value='" + token + "'/>");

$form.submit();
}
}

Очевидно, что это не то, как что-то должно быть закодировано, поэтому я думаю, что мне нужно сделать что-то вроде:

var vendor_count = jQuery(".vendor_count").first().data("count");
for(i = 1; i <= vendor_count; i++ ) {
Stripe.createToken( {
number:     card,
cvc:        cvc,
exp_month:  month,
exp_year:   year,
name:       name,
address_line1: address_line1,
address_line2: address_line2,
address_state: address_state,
address_city: address_city,
address_zip: address_zip,
address_country: address_country
}, stripeResponseHandler );
}

Но я не могу понять, как передать индекс vendor_count в stripeResponseHandler, чтобы создать дополнительные скрытые поля ввода для отправки.

Я все об этом говорю неправильно? Я чувствую, что исходя из моих соображений в начале этого поста, у меня есть причина требовать создания нескольких токенов таким образом.

0

Решение

Когда вы используете место назначения сборы, клиент должен существовать на платформе а не на подключенном аккаунте. Причина в том, что в качестве платформы вы создаете платеж в своем аккаунте и говорите Stripe, чтобы автоматически переводить часть средств на подключенный аккаунт. Поскольку заряд создается на платформе, именно здесь должен жить клиент.

Если вы действительно используете плату за назначение, то вам нужен только один токен. Затем вы можете создать плату за каждую подключенную учетную запись, передав идентификатор своей учетной записи acct_XXX в destination[account] параметр.

В PHP код выглядит так:

$charge = \Stripe\Charge::create(array(
'amount' => 1000,
'currency' => 'usd',
'customer' => "cus_AAAAA",
'destination' => array(
"account" => "acct_1234,
"amount" => 900
)
));

С другой стороны, если вы создаете прямые сборы тогда он будет жить прямо на подключенной учетной записи. В этом случае вы не можете выставить счет клиенту, созданному на платформе, но вам все равно не нужно создавать несколько токенов на стороне клиента.

Идея вместо этого заключается в использовании Общие клиенты. Это означает, что вы сохраняете данные карты в платформе на клиенте один раз. И затем, каждый раз, когда вы хотите зарядить эту карту на подключенной учетной записи, вы используете эту функцию для создания нового токена на стороне сервера для этого клиента и одной из его сохраненных карт. Вы получаете новый токен карты и затем используете этот токен для создания платежа на подключенной учетной записи.

В PHP код выглядит так:

// Create a new token for the saved card
$token = \Stripe\Token::create(
array(
"customer" => "cus_AAAAA",
"card" => "card_BBBBB"),
array("stripe_account" => "acct_AAAAAA")
);

// Charge that new token on the connected account
$charge = \Stripe\Charge::create(
array(
"amount" => 1000,
"currency" => "USD",
"source" => $token->id,
),
array("stripe_account" => "acct_AAAAAA")
);

Stripe также только что запустил возможность разделить средства между несколькими получателями. Это позволяет создать один платеж на платформе, а затем разделить средства на несколько подключенных учетных записей, используя transfer_group, Вероятно, это лучшее решение для вас, если предположить, что ваша платформа и ваши подключенные учетные записи находятся в тех странах, где это поддерживается.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]