Method: captureResultNotification

Notifica a Google el resultado de una captura después de que se haya realizado una llamada de método capture o asynchronousCapture.

El valor captureResult es idempotente para este captureRequestId, por lo que su valor no se puede cambiar con una llamada posterior a este método.

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

Es posible que las respuestas de esta consulta estén vacías si este método no muestra un HTTP 200. El cuerpo de la respuesta estará vacío en situaciones en las que se pueda usar una ErrorResponse con una descripción clara para ayudar a un atacante a comprender el identificador de cuenta del integrador de pagos de otros integradores. En estas situaciones, en las que la clave de firma no coincide, no se encontró el identificador del integrador de pagos o se desconocía la clave de encriptación, este método mostrará un error HTTP 404 con un cuerpo vacío. Si se puede verificar la firma de la solicitud, se devolverá información adicional sobre el error en el cuerpo de la respuesta.

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


{
  "requestHeader": {
    "protocolVersion": {
      "major": 1,
      "minor": 1,
      "revision": 0
    },
    "requestId": "KcgwSKrV76eVNDUbsZ4UA3",
    "requestTimestamp": "1481852928293"
  },
  "paymentIntegratorAccountId": "InvisiCashUSA_USD",
  "captureRequestId": "awNaC510cefae3IJdNEvW2",
  "captureResult": {
    "captureResultCode": "SUCCESS"
  }
}

Una respuesta de ejemplo se ve de la siguiente manera:


{
  "responseHeader": {
    "responseTimestamp": "1481852928324"
  },
  "result": "SUCCESS"
}

Solicitud HTTP

POST https://vgw.googleapis.com/secure-serving/gsp/v1/captureResultNotification/:PIAID

Cuerpo de la solicitud

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

Representación JSON
{
  "requestHeader": {
    object (RequestHeader)
  },
  "paymentIntegratorAccountId": string,
  "captureRequestId": string,
  "captureResult": {
    object (CaptureResult)
  },
  "paymentIntegratorTransactionId": string
}
Campos
requestHeader

object (RequestHeader)

REQUIRED: Encabezado común para todas las solicitudes

paymentIntegratorAccountId

string

OBLIGATORIO: Es el identificador de la cuenta del integrador de pagos en el que se produjo la captura.

captureRequestId

string

REQUIRED: Es un identificador único para esta transacción. Este es el requestId que genera Google durante la llamada capture o asynchronousCapture con la que está asociada esta solicitud.

Es una cadena con una longitud máxima de 100 caracteres y contiene solo los caracteres "a-z", "A-Z", "0-9", ":", "-" y "_".

captureResult

object (CaptureResult)

OBLIGATORIO: Es el resultado de esta captura.

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.

Cuerpo de la respuesta

Objeto de respuesta para el método captureResultNotification

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

Representación JSON
{
  "responseHeader": {
    object (ResponseHeader)
  },
  "result": enum (CaptureResultNotificationResultCode)
}
Campos
responseHeader

object (ResponseHeader)

REQUIRED: Encabezado común para todas las respuestas

result

enum (CaptureResultNotificationResultCode)

OBLIGATORIO: Es el resultado de esta llamada.

CaptureResult

Información sobre el resultado final de una captura.

Representación JSON
{
  "captureResultCode": enum (CaptureResultCode),
  "rawResult": {
    object (RawResult)
  },

  // Union field FailureDetail can be only one of the following:
  "transactionMaxLimit": string,
  "transactionMinLimit": string,
  "currentBalance": string
  // End of list of possible types for union field FailureDetail.
}
Campos
captureResultCode

enum (CaptureResultCode)

OBLIGATORIO: Es el código del 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.

Campo de unión FailureDetail.

FailureDetail puede ser una de las siguientes opciones:

transactionMaxLimit

string (Int64Value format)

OPCIONAL: Si captureResultCode es CHARGE_EXCEEDS_TRANSACTION_LIMIT, este es el valor de la transacción máxima permitida. Se utiliza para los mensajes estructurados orientados al usuario y el análisis del porcentaje de rechazos.

Esta cantidad es de micros de la misma currencyCode que la llamada de método original capture o asynchronousCapture.

transactionMinLimit

string (Int64Value format)

OPCIONAL: Si captureResultCode es CHARGE_UNDER_TRANSACTION_LIMIT, este es el valor de la transacción mínima permitida. Se utiliza para los mensajes estructurados orientados al usuario y el análisis del porcentaje de rechazos.

Esta cantidad es de micros de la misma currencyCode que la llamada de método original capture o asynchronousCapture.

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.

CaptureResultCode

Códigos de resultado para una captura

Enumeraciones
UNKNOWN_RESULT No establezcas nunca este valor predeterminado.
SUCCESS La captura se realizó correctamente.
CHARGE_UNDER_TRANSACTION_LIMIT El importe de captura solicitado no cumple con el importe mínimo por transacción del integrador. Si se usa este código, propaga el campo transactionMinLimit con el importe mínimo de la transacción para enviar mensajes a los usuarios.
CHARGE_EXCEEDS_TRANSACTION_LIMIT La cantidad de captura solicitada supera el límite máximo por transacción del integrador. Si se usa este código, propaga el campo transactionMaxLimit con el límite de transacciones para enviar mensajes a los usuarios.
CHARGE_EXCEEDS_DAILY_LIMIT La cuenta del usuario no se puede usar para realizar compras en este momento porque excedió su límite diario.
CHARGE_EXCEEDS_MONTHLY_LIMIT La cuenta del usuario no se puede usar para realizar compras en este momento porque excedió su límite mensual.
INSUFFICIENT_FUNDS Esta cuenta no tiene fondos suficientes para garantizar esta captura.
SUSPECTED_FRAUD El integrador tiene motivos para sospechar que esta transacción es fraudulenta.
ACCOUNT_CLOSED Se cerró la cuenta del usuario que se retuvo con el integrador. Este valor de retorno hará que el instrumento del usuario se cierre con Google. El usuario se verá obligado a agregar un instrumento nuevo.
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. Este valor de retorno hará que el instrumento del usuario se cierre con Google. El usuario se verá obligado a agregar un instrumento nuevo.
ACCOUNT_CLOSED_FRAUD La cuenta del usuario que se retuvo con el integrador se cerró debido a un fraude. Este valor de retorno hará que el instrumento del usuario se cierre con Google. El usuario se verá obligado a agregar un instrumento nuevo.
ACCOUNT_ON_HOLD La cuenta del usuario está suspendida.
OTP_NOT_MATCHED La OTP no coincidió con lo que envió el integrador.
OTP_ALREADY_USED Ya se usó la OTP.
CAPTURE_REQUEST_EXPIRED El integrador tardó demasiado en capturar los fondos del usuario. Google considerará este rechazo como un estado final, por lo que el integrador debe asegurarse de que los fondos del usuario no se recopilen más tarde o de que se le reembolse automáticamente si la captura se realizó correctamente.
INVALID_PIN El usuario proporcionó un PIN no válido.
OS_LOCK_FAILED Este flujo de pago requiere que se verifique el bloqueo del SO, y el usuario no pudo desbloquear el dispositivo.
PIN_ENTRY_ATTEMPTS_EXHAUSTED Este flujo de pago requiere que se ingrese el PIN del usuario. El usuario no pudo ingresar el PIN la cantidad de veces suficiente como para que se acaben los reintentos.
USER_EXITED_PAYMENT_FLOW El usuario canceló todo el intento de pago (ya sea en el bloqueo del SO o en la pantalla de ingreso del PIN).
MONTHLY_FREQUENCY_LIMIT_EXCEEDED La cuenta del usuario no se puede usar para realizar compras en este momento porque superó su límite mensual de intentos de transacciones.
DECLINED_BY_ISSUER

Este código de disminución nunca debe usarse en estado estable. Se diseñó como un código genérico temporal para usar cuando el integrador encuentra un código de rechazo desconocido de la entidad emisora subyacente del instrumento del usuario. Este código de resultado se puede usar mientras el integrador determina un código de resultado más apropiado para usar o negocia la adición de un código de resultado nuevo a esta especificación.

Es importante destacar que este código de rechazo es en gran medida una disminución real. Es un descenso permanente en lo que respecta a Google. Si el integrador devuelve esto, depende de él rastrear lo que realmente significa el código de la entidad emisora y reembolsar al usuario si resulta que el código en realidad significa SUCCESS.

Si este código de rechazo se usa para el mismo código de rechazo subyacente durante más de una cantidad determinada de días, Google lo considerará como un error y lo hará un seguimiento correspondiente con respecto a cualquier penalización contractual relacionada con la corrección de errores.

RawResult

Objeto de resultado sin procesar.

Representación JSON
{
  "scope": string,
  "rawCode": string
}
Campos
scope

string

OPCIONAL: El alcance del código sin procesar, puede estar vacío.

rawCode

string

OBLIGATORIO: Es el código sin procesar del integrador o los subsistemas que contiene.

CaptureResultNotificationResultCode

Códigos de resultado para el método captureResultNotification

Enumeraciones
UNKNOWN_RESULT No establezcas nunca este valor predeterminado.
SUCCESS La notificación del resultado de la captura se procesó correctamente.