Намерение платежа не создается должным образом для «Стандартной» подключенной учетной записи

#ruby-on-rails #stripe-payments

Вопрос:

Я создаю платежное намерение в соответствии с документацией Stripe:

 payment_intent = Stripe::PaymentIntent.create({
  payment_method_types: ['card'],
  amount: '1000',
  currency: 'aud',
  application_fee_amount: '10', 
}, stripe_account: 'pi_1IwLlIJuxAkCMV')
 

Когда stripe_account это учетная запись Express, намерение платежа создается и отображается на панели мониторинга, как и ожидалось.

Но когда stripe_account это стандартная учетная запись, намерение платежа создается и отображается в консоли, но намерение платежа не отображается на панели мониторинга stripe и не может быть получено с помощью Stripe::PaymentIntent.retrieve(id) :

 Stripe::PaymentIntent.retrieve(payment_intent.id)
Stripe::InvalidRequestError: No such payment_intent: 'pi_1IwLlIJuxAkCMV'
from stripe-5.26.0/lib/stripe/stripe_client.rb:592:in `handle_error_response'
 

Вопрос

Почему создание платежного намерения работает для подключенных учетных записей express, но не для стандартных подключенных учетных записей?

Ответ №1:

В своем первоначальном фрагменте вы, вероятно, хотели включить идентификатор учетной записи, как acct_123 в необязательном stripeAccount заголовке (ссылка). Этот необязательный параметр также должен находиться внутри {} объекта/хэша, хотя, похоже, он не используется в примере, который вы связали.

Аутентификация в качестве одной из ваших подключенных учетных записей, подобная этой, создает намерение платежа в виде прямой оплаты за саму подключенную учетную запись (как описано ниже в документе, который вы связали).

После создания прямого заряда, подобного этому, вам необходимо включить тот же stripeAccount заголовок для аутентификации во время извлечения:

 Stripe::PaymentIntent.retrieve(payment_intent.id, { stripeAccount: 'acc'})
 

Отредактируйте, чтобы добавить: Подтверждение того, что этот curl пример работает должным образом:

 curl --request POST 
  --url https://api.stripe.com/v1/payment_intents 
  -u sk_test_123: 
  --header 'Stripe-Account: acct_123' 
  --data amount=10000 
  --data currency=usd 
  --data confirm=true 
  --data payment_method=pm_card_visa 
  --data application_fee_amount=500
 

Создает pi_456 , затем:

 curl --request GET 
  --url https://api.stripe.com/v1/payment_intents/pi_456 
  -u sk_test_123: 
  --header 'Stripe-Account: acct_123' 
 

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

1. Я попробовал ваше предложение (ранее в javascript, но только сейчас в ruby). Это не работает и выдает точное сообщение об ошибке, как в вопросе. Я думаю, проблема в том, что payment_intent неправильно хранится на конце полосы. Похоже , что он был создан, потому что информация о намерениях оплаты отображается в консоли, но она просто не отображается на панели мониторинга и нигде не отображается при попытке доступа с помощью таких методов, как Stripe::PaymentIntent.retrieve()

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

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

4. Большое спасибо за дополнительную помощь. Я еще не пробовал, но скоро сообщу о своих выводах и обновлю их. Еще раз спасибо, невероятно признательна!

5. Я еще не до конца разобрался во всем (веб-крючок все еще не работает). Но ваш комментарий о том, на какую панель мониторинга смотреть, имел огромное значение. Эти платежные намерения не только создавались, но и последующие платежи были даже успешными. Я все еще не заставил его работать полностью, но буду продолжать обновлять, чтобы не забыть, что я сделал. Это может однажды спасти кого-то другого.