Method: captureResultNotification

Comunica a Google il risultato di un'acquisizione dopo aver effettuato una chiamata al metodo capture o asynchronousCapture.

Il valore captureResult è idempotente per questo captureRequestId, quindi il suo valore non può essere modificato da una chiamata successiva a questo metodo.

Se l'endpoint rileva un errore durante l'elaborazione della richiesta, la risposta da questo endpoint sarà di tipo ErrorResponse.

Le risposte a questa query potrebbero essere vuote se questo metodo non restituisce un HTTP 200. Il corpo della risposta è vuoto nelle situazioni in cui è possibile utilizzare un ErrorResponse con una descrizione chiara per aiutare un utente malintenzionato a comprendere l'identificatore dell'account dell'integratore dei pagamenti di altri integratori. In queste situazioni, in cui la chiave di firma non corrisponde, l'identificatore dell'integratore dei pagamenti non è stato trovato o la chiave di crittografia era sconosciuta, questo metodo restituirà un errore HTTP 404 con un corpo vuoto. Se è possibile verificare la firma della richiesta, nel corpo della risposta verranno restituite ulteriori informazioni sull'errore.

Ecco un esempio di richiesta:


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

Ecco un esempio di risposta:


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

Richiesta HTTP

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

Corpo della richiesta

Il corpo della richiesta contiene dati con la seguente struttura:

Rappresentazione JSON
{
  "requestHeader": {
    object (RequestHeader)
  },
  "paymentIntegratorAccountId": string,
  "captureRequestId": string,
  "captureResult": {
    object (CaptureResult)
  },
  "paymentIntegratorTransactionId": string
}
Campi
requestHeader

object (RequestHeader)

REQUIRED: intestazione comune per tutte le richieste.

paymentIntegratorAccountId

string

REQUIRED: identificatore dell'account dell'integratore pagamenti in cui è avvenuta l'acquisizione.

captureRequestId

string

REQUIRED: un identificatore univoco per questa transazione. Questo è il valore requestId generato da Google durante la chiamata capture o asynchronousCapture a cui è associata questa richiesta.

È una stringa con una lunghezza massima di 100 caratteri e contiene solo i caratteri "a-z", "A-Z", "0-9", ":", "-" e "_".

captureResult

object (CaptureResult)

REQUIRED: il risultato di questa acquisizione.

paymentIntegratorTransactionId

string

FACOLTATIVO: questo identificatore è specifico per l'integratore e viene generato dall'integratore. Si tratta dell'identificatore da cui l'integratore conosce questa transazione.

Per praticità, questo identificatore è incluso nei dettagli del versamento

Corpo della risposta

Oggetto di risposta per il metodo captureResultNotification.

In caso di esito positivo, il corpo della risposta contiene dati con la seguente struttura:

Rappresentazione JSON
{
  "responseHeader": {
    object (ResponseHeader)
  },
  "result": enum (CaptureResultNotificationResultCode)
}
Campi
responseHeader

object (ResponseHeader)

REQUIRED: intestazione comune per tutte le risposte.

result

enum (CaptureResultNotificationResultCode)

REQUIRED: il risultato della chiamata.

CaptureResult

Informazioni sul risultato finale di un'acquisizione.

Rappresentazione 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.
}
Campi
captureResultCode

enum (CaptureResultCode)

REQUIRED: codice risultato di questo screenshot.

rawResult

object (RawResult)

FACOLTATIVO: risultato non elaborato di questa acquisizione. Utilizzato per fornire informazioni al motore di analisi e al motore di gestione dei rischi di Google. Nei casi in cui la mappatura del codice viene rifiutata, i dati a volte vanno persi. L'integratore può scegliere di fornire a Google un codice non elaborato. Ad esempio, un gateway della carta di credito (l'integratore) può utilizzare questo campo per comunicare a Google l'esatto codice di rifiuto ricevuto dalla rete VISA. In questo caso, il scope è "visto" e rawCode sarebbe qualsiasi cosa restituita dalla rete VISA.

Questo valore è obbligatorio se result non è SUCCESS.

Campo unione FailureDetail.

FailureDetail può essere solo uno dei seguenti:

transactionMaxLimit

string (Int64Value format)

FACOLTATIVO: se captureResultCode è CHARGE_EXCEEDS_TRANSACTION_LIMIT, questo è il valore del numero massimo di transazioni consentito. Viene utilizzato per la messaggistica strutturata rivolta agli utenti e l'analisi del tasso di rifiuto.

Questo importo è pari a micros dello stesso currencyCode della chiamata al metodo capture o asynchronousCapture originale.

transactionMinLimit

string (Int64Value format)

FACOLTATIVO: se captureResultCode è CHARGE_UNDER_TRANSACTION_LIMIT, questo è il valore della transazione minima consentita. Viene utilizzato per la messaggistica strutturata rivolta agli utenti e l'analisi del tasso di rifiuto.

Questo importo è pari a micros dello stesso currencyCode della chiamata al metodo capture o asynchronousCapture originale.

currentBalance

string (Int64Value format)

FACOLTATIVO: se Risultato è INSUFFICIENT_FUNDS, questo è il saldo attualmente disponibile nell'account dell'utente (in micro). Viene utilizzato per la messaggistica strutturata rivolta agli utenti.

Questo valore deve essere nella stessa valuta di currencyCode nella richiesta.

CaptureResultCode

Codici risultato per un'acquisizione.

Enum
UNKNOWN_RESULT Non impostare mai questo valore predefinito.
SUCCESS Acquisizione riuscita.
CHARGE_UNDER_TRANSACTION_LIMIT L'importo di acquisizione richiesto non soddisfa la quantità minima per transazione dell'integratore. Se viene utilizzato questo codice, compila il campo transactionMinLimit con l'importo minimo della transazione ai fini della messaggistica per gli utenti.
CHARGE_EXCEEDS_TRANSACTION_LIMIT L'importo di acquisizione richiesto supera il limite massimo per transazione dell'integratore. Se viene usato questo codice, compila il campo transactionMaxLimit con il limite di transazioni per la messaggistica per gli utenti.
CHARGE_EXCEEDS_DAILY_LIMIT Al momento l'account dell'utente non può essere utilizzato per gli acquisti perché ha superato il limite giornaliero.
CHARGE_EXCEEDS_MONTHLY_LIMIT Al momento l'account dell'utente non può essere utilizzato per effettuare acquisti perché ha superato il limite mensile.
INSUFFICIENT_FUNDS Questo account non dispone di fondi sufficienti per garantire l'acquisizione.
SUSPECTED_FRAUD L'integratore ha motivo di sospettare che questa transazione sia fraudolenta.
ACCOUNT_CLOSED L'account dell'utente presso l'integratore è stato chiuso. Questo valore restituito causerà la chiusura dello strumento dell'utente con Google. L'utente sarà costretto ad aggiungere un nuovo strumento.
ACCOUNT_CLOSED_ACCOUNT_TAKEN_OVER L'account dell'utente con l'integratore è stato chiuso e si è verificata una sospetta acquisizione dell'account. Questo valore restituito causerà la chiusura dello strumento dell'utente con Google. L'utente sarà costretto ad aggiungere un nuovo strumento.
ACCOUNT_CLOSED_FRAUD L'account dell'utente presso l'integratore è stato chiuso a causa di attività fraudolenta. Questo valore restituito causerà la chiusura dello strumento dell'utente con Google. L'utente sarà costretto ad aggiungere un nuovo strumento.
ACCOUNT_ON_HOLD L'account dell'utente è in sospeso.
OTP_NOT_MATCHED L'OTP non corrispondeva a quanto inviato dall'integratore.
OTP_ALREADY_USED OTP già usata.
CAPTURE_REQUEST_EXPIRED L'integratore ha impiegato troppo tempo per acquisire i fondi dell'utente. Google considererà il rifiuto come uno stato definitivo, quindi l'integratore deve assicurarsi che i fondi dell'utente non vengano acquisiti in un secondo momento o che l'utente riceva un rimborso automatico se l'acquisizione ha esito positivo.
INVALID_PIN L'utente ha fornito un PIN non valido.
OS_LOCK_FAILED Questo flusso di pagamento richiede una verifica del blocco del sistema operativo e l'utente non è riuscito a sbloccare il dispositivo.
PIN_ENTRY_ATTEMPTS_EXHAUSTED Questo flusso di pagamento richiede l'inserimento del PIN dell'utente. L'utente non ha inserito il PIN per un numero di volte sufficiente da superare tutti i nuovi tentativi.
USER_EXITED_PAYMENT_FLOW L'utente ha annullato l'intero tentativo di pagamento (tramite il blocco del sistema operativo o la schermata di inserimento del PIN).
MONTHLY_FREQUENCY_LIMIT_EXCEEDED Al momento l'account dell'utente non può essere utilizzato per effettuare acquisti perché ha superato il limite di tentativi di transazione mensili.
DECLINED_BY_ISSUER

Il codice di rifiuto non deve mai essere utilizzato in stato stabile. È inteso come codice catch-all temporaneo da utilizzare quando l'integratore rileva un codice di rifiuto sconosciuto dell'emittente sottostante dello strumento dell'utente. Questo codice risultato può essere utilizzato mentre l'integratore determina un codice risultato più appropriato da utilizzare o negozia l'aggiunta di un nuovo codice risultato a questa specifica.

È importante sottolineare che questo codice di rifiuto è un calo molto reale. Per Google si tratta di un rifiuto definitivo. Se l'integratore restituisce questo messaggio, spetta a lui tenere traccia del significato reale del codice dell'emittente e rimborsare l'utente se scopre che il codice effettivamente intendeva essere SUCCESS.

Se questo codice di rifiuto viene utilizzato per lo stesso codice di rifiuto sottostante per più di un determinato numero di giorni, Google lo tratta come un bug e lo monitora di conseguenza in relazione a eventuali sanzioni contrattuali relative alla correzione dei bug.

RawResult

Oggetto risultato non elaborato.

Rappresentazione JSON
{
  "scope": string,
  "rawCode": string
}
Campi
scope

string

OPTIONAL: l'ambito del rawCode può essere vuoto.

rawCode

string

RICHIESTA: codice non elaborato dall'integratore o dai sottosistemi al suo interno.

CaptureResultNotificationResultCode

Codici risultato per il metodo captureResultNotification.

Enum
UNKNOWN_RESULT Non impostare mai questo valore predefinito.
SUCCESS La notifica del risultato dell'acquisizione è stata elaborata correttamente.