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