Method: capture

Inicia el movimiento de dinero entre la cuenta de un cliente que mantiene Google y el procesador de pagos. La combinación de requestId en el encabezado y paymentIntegratorAccountId es la clave de idempotencia, que identifica de forma única esta transacción. 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": {}
}

Una respuesta de ejemplo se ve de la siguiente manera:


{
  "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)

REQUIRED: Encabezado común para todas las solicitudes

paymentIntegratorAccountId

string

REQUIRED: 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 localiza en userLocale que se encuentra en requestHeader. Este formato se puede cambiar sin previo aviso y nunca debe analizarse.

currencyCode

string

OBLIGATORIO: Código de moneda ISO 4217 de 3 letras

amount

string (Int64Value format)

OBLIGATORIO: Indica 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: Incluye los detalles de FOP de esta transacción de captura. fopDetails puede ser solo uno de los siguientes:
googlePaymentToken

string

El token que usarán ambas empresas para identificar la cuenta en las compras que se realicen entre ellas.

mandateDetails

object (MandateDetails)

Detalles del pago específicos de los mandatos

mandateWithNotificationDetails

object (MandateWithNotificationDetails)

Son los detalles del pago específicos de los mandatos, para 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 está presente, entonces el usuario se autenticó inmediatamente antes de esta llamada o se autenticó cuando se configuró una programación de pagos automatizada.

otpVerification

object (OtpVerification)

OPCIONAL: Datos necesarios para verificar una OTP generada a partir de sendOtp. Solo está presente si el usuario recorrió la ruta de acceso 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)

REQUIRED: Encabezado común para todas las respuestas

paymentIntegratorTransactionId

string

OPCIONAL: Este identificador es específico del integrador y lo genera este. Este es el identificador con 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 ayudar a fundamentar el motor de riesgos y las estadísticas de Google. En situaciones en las que se genera una asignación de código de rechazo, a veces se pierden los datos. El integrador puede optar por darle a Google un código sin procesar. 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, la scope sería "visa". y el rawCode sería lo que mostrara la red VISA.

Este valor es obligatorio si result no es SUCCESS.

transactionLimit

string (Int64Value format)

OPCIONAL: Si el resultado es CHARGE_EXCEEDS_TRANSACTION_LIMIT, corresponde al importe máximo que el usuario podría invertir en una transacción (en micros). Se utiliza para los mensajes estructurados orientados al usuario y el análisis del porcentaje de rechazos.

Debe ser un límite relativo al currencyCode de la solicitud.

currentBalance

string (Int64Value format)

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

Este valor debe coincidir con la moneda que currencyCode en la solicitud.

MandateDetails

Detalles sobre el mandato de la captura.

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

string

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

MandateWithNotificationDetails

Detalles sobre el mandato que se debe capturar, junto con los detalles de 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 a createMandate.

upcomingTransactionNotificationId

string

OBLIGATORIO: El requestId de la llamada a upcomingTransactionNotification que se realizó para notificar previamente sobre 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 un usuario realizó la compra durante una sesión. Si el usuario no estuvo en la sesión, este campo estará vacío. Si el contrato en particular no estipula la necesidad de este campo, siempre estará vacío.

CaptureResultCode

Códigos de resultado para la captura.

Enumeraciones
UNKNOWN_RESULT No establezcas nunca este valor predeterminado.
SUCCESS Captura los productos correctamente, así que entrega los artículos.
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 para enviar mensajes 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 la transacción.
INSUFFICIENT_FUNDS Esta cuenta no tiene fondos suficientes para garantizar esta captura.
ACCOUNT_DOES_NOT_SUPPORT_CURRENCY Esta cuenta no admite la moneda solicitada.
ACCOUNT_CLOSED

Se cerró la cuenta del usuario que se retuvo con el integrador.

Devolver este valor hará que el instrumento del usuario se cierre con Google. El usuario se verá obligado a agregar un nuevo instrumento 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 se realizó una apropiación de la cuenta.

Devolver este valor hará que el instrumento del usuario se cierre con Google. El usuario se verá obligado a agregar un nuevo instrumento siguiendo el flujo de asociación nuevamente.

ACCOUNT_ON_HOLD La cuenta está suspendida.
ACCOUNT_CLOSED_FRAUD

La cuenta del usuario que se retuvo con el integrador se cerró debido a un fraude.

Devolver este valor hará que el instrumento del usuario se cierre con Google. El usuario se verá obligado a agregar un nuevo instrumento siguiendo el flujo de asociación nuevamente.

GOOGLE_PAYMENT_TOKEN_INVALIDATED_BY_USER

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

Devolver este valor hará que el instrumento del usuario se cierre con Google. El usuario se verá obligado a agregar un nuevo instrumento siguiendo el flujo de asociación nuevamente.

TOKEN_REFRESH_REQUIRED Para que se muestre, el usuario tendrá que pasar por 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 riesgos del lado del integrador.

Esto es un error permanente para este pago, pero no causa que se cierre el instrumento del usuario en Google.

NO_GOOD_FUNDING_SOURCE_AVAILABLE El usuario no tiene ninguna fuente de financiación que funcione y esté configurada en su cuenta para pagar la transacción.
FUNDING_SOURCE_UNAVAILABLE

La entidad emisora o la fuente de los fondos subyacentes no están disponibles. Si se intenta realizar de nuevo este pago, no se realizará correctamente.

Google volverá a intentar los pagos cuando un socio devuelva un código de respuesta 4xx o 5xx. Debido a esto, los socios normalmente deben devolver uno de esos códigos de respuesta si un reintento de este mismo pago puede realizarse correctamente cuando la fuente de fondos subyacente vuelva a estar disponible. Sin embargo, si hay motivos técnicos por los que Google vuelve a intentar el pago y sigue fallando, el socio puede mostrar "FUNDING_SOURCE_UNAVAILABLE". para indicarle a Google que no debe reintentar este mismo pago.

Nota: Google aún puede reintentar este pago, pero con un requestId diferente, pero esta solicitud de pago se marcará como rechazada.

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