Method: capture

Инициирует движение денег между счетом клиента в Google и платежной системой. Комбинация requestId в заголовке и paymentIntegratorAccountId является ключом идемпотентности и уникально идентифицирует эту транзакцию. Все изменения в этой транзакции (возвраты) заполняют значение requestId в поле captureRequestId .

Если конечная точка обнаруживает ошибку при обработке запроса, тело ответа от этой конечной точки должно иметь тип ErrorResponse .

Пример запроса выглядит так:


{
  "requestHeader": {
    "protocolVersion": {
      "major": 1,
      "minor": 0,
      "revision": 0
    },
    "requestId": "bWVyY2hhbnQgdHJhbnNhY3Rpb24gaWQ",
    "requestTimestamp": "1502220196077"
  },
  "paymentIntegratorAccountId": "InvisiCashUSA_USD",
  "googlePaymentToken": "ZXhhbXBsZSB1bmlxdWUgcGF5bWVudCB0b2tlbiB2YWx1ZQ",
  "transactionDescription": "Google - Music",
  "currencyCode": "INR",
  "amount": "728000000",
  "captureContext": {}
}

Пример ответа выглядит так:


{
  "responseHeader": {
    "responseTimestamp": "1481900013178"
  },
  "result": "SUCCESS",
  "paymentIntegratorTransactionId": "aW50ZWdyYXRvciB0cmFuc2FjdGlvbiBpZA"
}

HTTP-запрос

POST https://www.integratorhost.example.com/v1/capture

Тело запроса

Тело запроса содержит данные следующей структуры:

JSON-представление
{
  "requestHeader": {
    object (RequestHeader)
  },
  "paymentIntegratorAccountId": string,
  "transactionDescription": string,
  "currencyCode": string,
  "amount": string,
  "captureContext": {
    object (CaptureContext)
  },

  // Union field fopDetails can be only one of the following:
  "googlePaymentToken": string,
  "mandateDetails": {
    object (MandateDetails)
  },
  "mandateWithNotificationDetails": {
    object (MandateWithNotificationDetails)
  }
  // End of list of possible types for union field fopDetails.

  // Union field account_verification can be only one of the following:
  "authenticationRequestId": string,
  "otpVerification": {
    object (OtpVerification)
  }
  // End of list of possible types for union field account_verification.
}
Поля
requestHeader

object ( RequestHeader )

ОБЯЗАТЕЛЬНО : общий заголовок для всех запросов.

paymentIntegratorAccountId

string

ОБЯЗАТЕЛЬНО : это идентификатор учетной записи платежного интегратора, который определяет договорные ограничения, связанные с этой транзакцией.

transactionDescription

string

ОБЯЗАТЕЛЬНО : это описание транзакции, которое можно указать в выписке клиента. Локализовано для userLocale, найденного в requestHeader . Этот формат может быть изменен без предварительного уведомления, и его ни в коем случае нельзя анализировать.

currencyCode

string

ТРЕБУЕТСЯ : трехбуквенный код валюты ISO 4217.

amount

string ( Int64Value format)

ОБЯЗАТЕЛЬНО : Сумма покупки в микро валютной единице.

captureContext

object ( CaptureContext )

ОБЯЗАТЕЛЬНО : Контекст этого захвата.

Поле объединения fopDetails . ОБЯЗАТЕЛЬНО : данные FOP для этой транзакции Capture. fopDetails может быть только одним из следующих:
googlePaymentToken

string

Токен, который обе компании будут использовать для идентификации аккаунта для покупок между собой.

mandateDetails

object ( MandateDetails )

Платежные реквизиты, специфичные для мандатов.

mandateWithNotificationDetails

object ( MandateWithNotificationDetails )

Платежные реквизиты, специфичные для мандатов, для которых требуется уведомление upcomingTransactionNotification .

Поле объединения account_verification .

account_verification может быть только одним из следующих:

authenticationRequestId

string

НЕОБЯЗАТЕЛЬНО : requestId соответствующего запроса аутентификации. Если этого нет, то к этому захвату нельзя привязать никакую аутентификацию.

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

otpVerification

object ( OtpVerification )

НЕОБЯЗАТЕЛЬНО : данные, необходимые для проверки OTP, сгенерированного sendOtp . Это присутствует только в том случае, если пользователь прошел путь sendOtp .

Тело ответа

Объект ответа для метода захвата.

В случае успеха тело ответа содержит данные следующей структуры:

JSON-представление
{
  "responseHeader": {
    object (ResponseHeader)
  },
  "paymentIntegratorTransactionId": string,
  "userMessage": string,
  "result": enum (CaptureResultCode),
  "rawResult": {
    object (RawResult)
  },
  "transactionLimit": string,
  "currentBalance": string
}
Поля
responseHeader

object ( ResponseHeader )

ОБЯЗАТЕЛЬНО : общий заголовок для всех ответов.

paymentIntegratorTransactionId

string

НЕОБЯЗАТЕЛЬНО : этот идентификатор специфичен для интегратора и генерируется интегратором. Это идентификатор, по которому интегратор знает эту транзакцию.

Для удобства этот идентификатор включен в детали денежного перевода.

userMessage
(deprecated)

string

УСТАРЕЛО : описание результата, которое будет отображаться пользователю, если результат не SUCCESS .

result

enum ( CaptureResultCode )

ОБЯЗАТЕЛЬНО : Результат этого захвата.

rawResult

object ( RawResult )

НЕОБЯЗАТЕЛЬНО : необработанный результат этого захвата. Используется для информирования системы рисков и аналитики Google. В ситуациях отказа от сопоставления кода данные иногда теряются. Интегратор может предоставить Google необработанный код. Например, шлюз кредитных карт (интегратор) может использовать это поле, чтобы сообщить Google точный код отклонения, полученный из сети VISA. В этом случае scope будет «visa», а rawCode — то, что вернула сеть VISA.

Это значение является обязательным , если result не SUCCESS .

transactionLimit

string ( Int64Value format)

НЕОБЯЗАТЕЛЬНО : если Result равен CHARGE_EXCEEDS_TRANSACTION_LIMIT , это максимальная сумма, которую пользователь может потратить на транзакцию (в микронах ). Это используется для структурированного обмена сообщениями, ориентированными на пользователя, и анализа темпов снижения.

Это должно быть ограничение относительно currencyCode в запросе.

currentBalance

string ( Int64Value format)

НЕОБЯЗАТЕЛЬНО : если результат равен INSUFFICIENT_FUNDS , то это текущий доступный баланс на счете пользователя (в микронах ). Это используется для структурированного обмена сообщениями, ориентированными на пользователя.

Это значение должно быть в той же валюте, что и currencyCode в запросе.

Подробности о мандате

Подробности о мандате на захват.

JSON-представление
{
  "mandateId": string
}
Поля
mandateId

string

ОБЯЗАТЕЛЬНО : идентификатор мандата, сгенерированный Google, который был отправлен во время вызова createMandate .

MandateWithNotificationDetails

Подробная информация о мандате на захват, а также необходимые сведения об уведомлениях.

JSON-представление
{
  "mandateId": string,
  "upcomingTransactionNotificationId": string
}
Поля
mandateId

string

ОБЯЗАТЕЛЬНО : идентификатор мандата, сгенерированный Google, который был отправлен во время вызова createMandate .

upcomingTransactionNotificationId

string

ОБЯЗАТЕЛЬНО : requestId upcomingTransactionNotification вызова TransactionNotification, который был сделан для предварительного уведомления об этой транзакции.

Захват контекста

Этот объект предоставляет контекст о том, как был запрошен захват.

JSON-представление
{
  "userIpAddress": string
}
Поля
userIpAddress

string

НЕОБЯЗАТЕЛЬНО : это IP-адрес устройства пользователя, если покупка была совершена пользователем во время сеанса. Если пользователь не был в сеансе, это поле будет пустым. Если в конкретном договоре не предусмотрена необходимость этого поля, оно всегда будет пустым.

CaptureResultCode

Коды результатов для захвата.

Перечисления
UNKNOWN_RESULT Никогда не устанавливайте это значение по умолчанию!
SUCCESS Успешный захват, доставьте груз.
CHARGE_EXCEEDS_TRANSACTION_LIMIT amount этого запроса на захват превышает лимит на транзакцию. Если этот код используется, заполните поле transactionLimit для целей обмена сообщениями с пользователем.
CHARGE_EXCEEDS_DAILY_LIMIT Эту учетную запись сейчас нельзя использовать для покупок, поскольку ее дневной лимит превышен.
CHARGE_EXCEEDS_MONTHLY_LIMIT Эту учетную запись сейчас нельзя использовать для покупок, поскольку ее ежемесячный лимит превышен.
CHARGE_UNDER_LIMIT amount этого запроса на захват не соответствует минимальной сумме транзакции.
INSUFFICIENT_FUNDS На этом счету недостаточно средств, чтобы гарантировать этот захват.
ACCOUNT_DOES_NOT_SUPPORT_CURRENCY Этот аккаунт не поддерживает запрошенную валюту.
ACCOUNT_CLOSED

Учетная запись пользователя у интегратора закрыта.

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

ACCOUNT_CLOSED_ACCOUNT_TAKEN_OVER

Аккаунт пользователя у интегратора закрыт, подозрение на захват аккаунта.

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

ACCOUNT_ON_HOLD Счет заблокирован.
ACCOUNT_CLOSED_FRAUD

Аккаунт пользователя у интегратора закрыт из-за мошенничества.

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

GOOGLE_PAYMENT_TOKEN_INVALIDATED_BY_USER

Учетная запись активна, но GPT был признан недействительным пользователем на стороне интегратора.

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

TOKEN_REFRESH_REQUIRED Для возврата этого значения пользователю необходимо пройти поток обновления.
OTP_NOT_MATCHED OTP не соответствовал тому, что отправил интегратор.
OTP_ALREADY_USED OTP уже использовался.
RISK_DECLINED

Сделка была отклонена из-за проверки рисков на стороне интегратора.

Это необратимая ошибка для данного платежа, но она не приводит к закрытию инструмента пользователя в Google.

NO_GOOD_FUNDING_SOURCE_AVAILABLE В учетной записи пользователя не настроен какой-либо работающий источник финансирования, способный оплатить транзакцию.
FUNDING_SOURCE_UNAVAILABLE

Базовый эмитент или источник средств недоступен, и повторная попытка существующего платежа не будет успешной.

Google будет повторять платежи, если партнер вернет код ответа 4xx или 5xx. По этой причине партнеры обычно должны возвращать один из этих кодов ответа, если повторная попытка того же платежа может быть успешной, когда основной источник средств снова станет доступным. Но если по техническим причинам Google не сможет повторить платеж, партнер может вернуть «FUNDING_SOURCE_UNAVAILABLE», чтобы сообщить Google, что ему не следует повторять тот же платеж.

Примечание. Google по-прежнему может повторить этот платеж, но с другим идентификатором запроса, но этот запрос платежа будет помечен как отклоненный.

MANDATE_NOT_ACTIVE Мандат, использованный для этого захвата, больше не действует. Это возвращаемое значение приведет к закрытию инструмента мандата пользователя в Google.
UPCOMING_TRANSACTION_NOTIFICATION_EXPIRED Срок действия уведомления, отправленного пользователю о регулярном обязательном платеже, истек.