Method: capture

Inicia el movimiento de dinero entre la cuenta de un cliente que administra Google y el procesador de pagos. La combinación de requestId en el encabezado y paymentIntegratorAccountId es la clave de idempotencia y, además, identifica esta transacción de forma única. Todas las mutaciones de esta transacción (reembolsos) propagan el valor requestId en el campo captureRequestId.

Si el extremo encuentra un error mientras procesa la solicitud, el cuerpo de la respuesta de este extremo debe ser del tipo ErrorResponse.

A continuación, se muestra una solicitud de ejemplo:


{
  "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": {}
}

Esta es una respuesta de ejemplo:


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

Solicitud HTTP

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

Cuerpo de la solicitud

El cuerpo de la solicitud contiene datos con la siguiente estructura:

Representación 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.
}
Campos
requestHeader

object (RequestHeader)

OBLIGATORIO: Encabezado común para todas las solicitudes

paymentIntegratorAccountId

string

OBLIGATORIO: Este es el identificador de la cuenta del integrador de pagos que identifica las restricciones contractuales en torno a esta transacción.

transactionDescription

string

OBLIGATORIO: Esta es la descripción de la transacción que se puede incluir en el estado de cuenta del cliente. Se localizó según la userLocale que se encuentra en requestHeader. Este formato se puede cambiar sin previo aviso y nunca se debe analizar.

currencyCode

string

OBLIGATORIO: El código de moneda ISO 4217 de 3 letras.

amount

string (Int64Value format)

OBLIGATORIO: El importe de la compra, en micros de la unidad de moneda.

captureContext

object (CaptureContext)

OBLIGATORIO: Contexto sobre esta captura

Campo de unión fopDetails. OBLIGATORIO: Detalles de las formas de pago para esta transacción de captura. fopDetails puede ser solo uno de los siguientes:
googlePaymentToken

string

Es el token que ambas empresas utilizarán para identificar la cuenta en las compras que se realicen entre ellas.

mandateDetails

object (MandateDetails)

Son los detalles de pago específicos de los mandatos.

mandateWithNotificationDetails

object (MandateWithNotificationDetails)

Son los detalles del pago específicos de los mandatos, en los que se requiere un upcomingTransactionNotification.

Campo de unión account_verification.

account_verification puede ser una de las siguientes opciones:

authenticationRequestId

string

OPCIONAL: requestId de la solicitud de autenticación asociada. Si no está presente, no se puede vincular ninguna autenticación a esta captura.

Si aparece esta información, significa que el usuario se autenticó inmediatamente antes de la llamada, o bien se autenticó cuando se configuró una programación de pagos automáticos.

otpVerification

object (OtpVerification)

OPCIONAL: Son los datos necesarios para verificar una OTP generada desde sendOtp. Esto solo está presente si el usuario pasó por la ruta sendOtp.

Cuerpo de la respuesta

Objeto de respuesta para el método de captura.

Si se ejecuta correctamente, el cuerpo de la respuesta contendrá datos con la siguiente estructura:

Representación JSON
{
  "responseHeader": {
    object (ResponseHeader)
  },
  "paymentIntegratorTransactionId": string,
  "userMessage": string,
  "result": enum (CaptureResultCode),
  "rawResult": {
    object (RawResult)
  },
  "transactionLimit": string,
  "currentBalance": string
}
Campos
responseHeader

object (ResponseHeader)

OBLIGATORIO: Encabezado común para todas las respuestas

paymentIntegratorTransactionId

string

OPTIONAL: Este identificador es específico del integrador y lo genera este. Este es el identificador por el que el integrador conoce esta transacción.

Para mayor comodidad, este identificador se incluye en los detalles de la remesa.

userMessage
(deprecated)

string

OBSOLETO: Es una descripción del resultado que se le mostrará al usuario si el resultado no es SUCCESS.

result

enum (CaptureResultCode)

OBLIGATORIO: Es el resultado de esta captura.

rawResult

object (RawResult)

OPCIONAL: Es el resultado sin procesar de esta captura. Se usa para informar al motor de riesgos y las estadísticas de Google. En las situaciones de mapeo de código de rechazo, a veces se pierden los datos. El integrador puede elegir entregar un código sin procesar a Google. Por ejemplo, una puerta de enlace de tarjeta de crédito (el integrador) puede usar este campo para comunicar a Google el código de rechazo exacto que se recibió de la red VISA. En ese caso, el scope sería "visa" y el rawCode sería la red VISA que se haya devuelto.

Este valor es obligatorio si result no es SUCCESS.

transactionLimit

string (Int64Value format)

OPCIONAL: Si el resultado es CHARGE_EXCEEDS_TRANSACTION_LIMIT, este es el importe máximo que el usuario podría gastar en una transacción (en micros). Se usa para el análisis de la tasa de rechazo y los mensajes estructurados para los usuarios.

Debe ser un límite relacionado con currencyCode en la solicitud.

currentBalance

string (Int64Value format)

OPCIONAL: Si el resultado es INSUFFICIENT_FUNDS, este es el saldo disponible actual en la cuenta del usuario (en micros). Se usa para mensajes estructurados dirigidos al usuario.

Este valor debe estar en la misma moneda que currencyCode en la solicitud.

MandateDetails

Detalles sobre el mandato desde el que se realiza la captura.

Representación JSON
{
  "mandateId": string
}
Campos
mandateId

string

OBLIGATORIO: El ID de mandato generado por Google que se envió durante la llamada createMandate.

MandateWithNotificationDetails

Detalles sobre el mandato para capturar, junto con los detalles de las notificaciones requeridas.

Representación JSON
{
  "mandateId": string,
  "upcomingTransactionNotificationId": string
}
Campos
mandateId

string

OBLIGATORIO: El ID de mandato generado por Google que se envió durante la llamada createMandate.

upcomingTransactionNotificationId

string

OBLIGATORIO: El requestId de la llamada a upcomingTransactionNotification, que se realizó para notificar previamente esta transacción

CaptureContext

Este objeto proporciona contexto sobre cómo se solicitó la captura.

Representación JSON
{
  "userIpAddress": string
}
Campos
userIpAddress

string

OPCIONAL: Es la dirección IP del dispositivo del usuario si quien realizó la compra durante la sesión. Si el usuario no estuvo en la sesión, el campo se vaciará. Si el contrato específico no estipula la necesidad de este campo, siempre estará vacío.

CaptureResultCode

Códigos de resultado para la captura

Enumeradores
UNKNOWN_RESULT No establezcas nunca este valor predeterminado.
SUCCESS Captura exitosa, entrega la mercadería.
CHARGE_EXCEEDS_TRANSACTION_LIMIT El amount de esta solicitud de captura supera el límite por transacción. Si se usa este código, propaga el campo transactionLimit con fines de mensajería a los usuarios.
CHARGE_EXCEEDS_DAILY_LIMIT Esta cuenta no se puede usar para realizar compras en este momento porque excedió sus límites diarios.
CHARGE_EXCEEDS_MONTHLY_LIMIT Esta cuenta no se puede usar para realizar compras en este momento porque excedió sus límites mensuales.
CHARGE_UNDER_LIMIT El amount de esta solicitud de captura no cumple con el importe mínimo de transacción.
INSUFFICIENT_FUNDS La cuenta no tiene fondos suficientes para garantizar la captura.
ACCOUNT_DOES_NOT_SUPPORT_CURRENCY Esta cuenta no admite la moneda solicitada.
ACCOUNT_CLOSED

Se cerró la cuenta del usuario que tenía el integrador.

Si se muestra este valor, se cerrará el instrumento del usuario con Google. El usuario se verá obligado a agregar un instrumento nuevo siguiendo el flujo de asociación nuevamente.

ACCOUNT_CLOSED_ACCOUNT_TAKEN_OVER

Se cerró la cuenta del usuario con el integrador, por lo que se sospecha que la cuenta está a cargo.

Si se muestra este valor, se cerrará el instrumento del usuario con Google. El usuario se verá obligado a agregar un instrumento nuevo siguiendo el flujo de asociación nuevamente.

ACCOUNT_ON_HOLD La cuenta está suspendida.
ACCOUNT_CLOSED_FRAUD

Se cerró la cuenta del usuario que tenía el integrador debido a un fraude.

Si se muestra este valor, se cerrará el instrumento del usuario con Google. El usuario se verá obligado a agregar un instrumento nuevo siguiendo el flujo de asociación nuevamente.

GOOGLE_PAYMENT_TOKEN_INVALIDATED_BY_USER

La cuenta está activa, pero el usuario del integrador invalidó la etiqueta GPT.

Si se muestra este valor, se cerrará el instrumento del usuario con Google. El usuario se verá obligado a agregar un instrumento nuevo siguiendo el flujo de asociación nuevamente.

TOKEN_REFRESH_REQUIRED Para mostrar esto, el usuario debe realizar un flujo de actualización.
OTP_NOT_MATCHED La OTP no coincidió con lo que envió el integrador.
OTP_ALREADY_USED Ya se usó la OTP.
RISK_DECLINED

Se rechazó la transacción debido a una verificación de riesgo del integrador.

Esto constituye un incumplimiento permanente del pago, pero no provoca que el instrumento del usuario se cierre en Google.

NO_GOOD_FUNDING_SOURCE_AVAILABLE El usuario no tiene ninguna fuente de financiación configurada en su cuenta que pueda pagar la transacción.
FUNDING_SOURCE_UNAVAILABLE

La entidad emisora o la fuente de fondos subyacente no está disponible. Si vuelves a intentarlo, no podrás volver a realizar el pago que ya existe.

Google volverá a intentar los pagos cuando un socio muestre un código de respuesta 4xx o 5xx. Debido a esto, los socios normalmente deben mostrar uno de esos códigos de respuesta si se puede reintentar el mismo pago cuando la fuente de fondos subyacente esté disponible nuevamente. Sin embargo, si hay motivos técnicos por los que Google seguirá reintentando el pago, el socio puede mostrar "FUNDING_SOURCE_UNAVAILABLE" para indicarle a Google que no debe reintentar el mismo pago.

Nota: Google aún puede volver a realizar el pago, pero solo con un requestId diferente. Sin embargo, esta solicitud de pago se marcará como rechazada.

MANDATE_NOT_ACTIVE El mandato utilizado para esta captura ya no está activo. Este valor que se muestra hará que el instrumento de mandato del usuario se cierre con Google.
UPCOMING_TRANSACTION_NOTIFICATION_EXPIRED Venció la notificación que se envió al usuario de un pago de mandato recurrente.