рубин на рынке рельсов и полоса

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

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

Итак, что я сделал до сих пор:

.Отправка запроса. Создание нового запроса в БД (с логическим статусом). Пользователь может быть действительным или нет.

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

Кто-нибудь уже это сделал?


person Tomas    schedule 17.10.2016    source источник


Ответы (1)


Во-первых, вы должны создать платеж с capture установленным на false:

charge = Stripe::Charge.create({
  amount: 1000,
  currency: 'usd',
  destination: 'acct_...',
  application_fee: 200,
  capture: false,
})

В случае успешного списания вы должны сохранить идентификатор списания (charge.id) в своей базе данных.

Затем, если транзакция будет подтверждена, вы должны фиксировать платеж следующим образом:

# Retrieve charge_id from your database
charge = Stripe::Charge.retrieve(charge_id)
charge.capture

Если транзакция будет отменена, вы разблокируете авторизацию, возместив платеж:

# Retrieve charge_id from your database
refund = Stripe::Refund.create({
  charge: charge_id,
})

Обратите внимание, что неучтенные платежи автоматически сбрасываются через 7 дней.

В вышеизложенном я предполагал, что вы создаете платежи через платформу, т.е. с параметром destination. Если вместо этого вы взимаете плату напрямую с подключенных аккаунтов, вам потребуется измените запросы, чтобы использовать заголовок Stripe-Account:

# Create the charge directly on the connected account
charge = Stripe::Charge.create({
  amount: 1000,
  currency: 'usd',
  application_fee: 200,
  capture: false,
}, {stripe_account: 'acct_...'})
# Save charge.id in your database

# Capture the charge
charge = Stripe::Charge.retrieve(charge_id, {stripe_account: 'acct_...'})
charge.capture

# Release the uncaptured charge
refund = Stripe::Refund.create({
  charge: charge_id,
}, {stripe_account: 'acct_...'})
person Ywain    schedule 19.10.2016
comment
Спасибо за публикацию информации о процессе возврата. Это сработало и для меня. - person Dave; 08.11.2016