Passa al contenuto principale

Fabrick Guaranteed payments

Fabrick Guaranteed payments è una soluzione end-to-end di prevenzione frodi per merchant online che utilizza un sistema di intelligenza artificiale per valutare il livello di rischio delle transazioni (Powered by Riskified). Inoltre, in caso di frode, il merchant ha diritto al rimborso della contestazione (dispute) sostenuta sulle transazioni inizialmente approvate da Fabrick Guaranteed payments. Quando un merchant aderisce al programma di protezione Fabrick Guaranteed payments, può scegliere tra due modalità operative:

  • Shop Protection: in questa modalità tutte le transazioni vengono inviate a Fabrick Guaranteed payments per la valutazione.
  • Select & Submit: è possibile scegliere di valutare solo alcune transazioni considerate sospette. È comunque necessario inviare a Fabrick Guaranteed payments tutti i dati della transazione e specificare quali transazioni devono essere controllate impostando il flag SubmitForReview a 1.

Sulla base di questi dati, Fabrick Guaranteed payments restituisce una risposta di rischio (ACCEPTED, DECLINED, UnderReview). L’indicatore di rischio per ogni transazione analizzata è mostrato nel Back Office Active Report con uno scudo verde, rosso o (in rari casi) giallo. Il merchant può decidere se procedere con la transazione in base alla risposta, ma non è obbligato a seguire il risultato della valutazione. Ad esempio, è possibile procedere con una transazione che ha come esito DECLINED.

Guaranteed_Shields.png

Fabrick Guaranteed POST e Fabrick Guaranteed PRE

Il servizio può essere integrato anche in modalità post-autorizzazione o pre-autorizzazione:

  • Modalità post-autorizzazione: offre una maggiore accuratezza di analisi. In questo caso il sistema di prevenzione frodi non è vincolato da limiti temporali stringenti e può quindi restituire la previsione più accurata sul rischio dell’ordine. Questa modalità è consigliata quando applicabile. Con questa integrazione, i tempi medi di risposta di Fabrick Guaranteed payments sono inferiori a 3 secondi. In rari casi i tempi di elaborazione possono essere più lunghi: durante questo periodo la transazione è contrassegnata come UnderReview. Le uniche transazioni analizzate (e che possono ricevere un esito dal servizio) sono quelle che sono state autorizzate.

  • Modalità pre-autorizzazione: è ottimizzata per fornire tempi di risposta più rapidi ed è ideale per scenari in cui i pagamenti devono essere completati con la cattura (capture) effettuata contestualmente all’autorizzazione. Con questa integrazione, le transazioni rifiutate dal servizio non verranno autorizzate.

Il servizio è disponibile su richiesta contattando il proprio referente commerciale. Ti verranno richiesti alcuni materiali per abilitare il servizio, ci sarà un periodo di test e, una volta in produzione, ci sarà un periodo di una o due settimane chiamato Shadow mode, durante il quale l’esito del servizio non deve essere preso in considerazione.


Rimborso per transazioni fraudolente

Il servizio consente di richiedere il rimborso per transazioni approvate dal servizio che successivamente risultano oggetto di una contestazione per frode. Per aprire una pratica di rimborso è necessario:

  • Inviare, entro 7 giorni dalla data del chargeback (solo per contestazioni di tipo frode), un’email a frodi@fabrick.com con oggetto: "Reimbursement request - ShopLogin - BankTransactionID"

ShopLogin è il codice Fabrick tramite cui è stata processata la transazione. BankTransactionID è il codice numerico univoco che Fabrick associa a ciascuna transazione.

  • L’email deve includere il seguente template compilato e:

    • Proof of delivery (POD - prova di consegna), in formato PDF nominato "ShopLogin_BankTransactionID" (es. 9000001_321.pdf). In alternativa

    • Un numero di tracking valido e il nome completo del corriere.

IMPORTANTE

La casella frodi@fabrick.com gestisce esclusivamente i casi di "rimborso per transazioni fraudolente" e, su richiesta, fornisce ulteriori informazioni sull’esito restituito dal servizio. Per la gestione delle contestazioni (dispute) è necessario contattare l’acquirer di riferimento.

Una richiesta di rimborso può, eccezionalmente, essere rifiutata. Ad esempio, come riportato nel contratto:

"To allow the merchant to benefit from the reimbursement, the shipping address shown on the proof-of-delivery document must match the address shown in the order that was submitted for evaluation by the Service. Fabrick will not reimburse if the shipment was sent to a different address, if it was re-routed to a different address, including any pick-up facility
of postal offices. Fabrick recommends that the merchant does not authorize re-routing of the shipment to their freight forwarders."


Come implementare Fabrick Guaranteed payments

Fabrick Guaranteed payments richiede di:

  • Installare lo snippet di tracciamento utente chiamato Store Front Beacon. Può essere installato sia su un sito web sia in un’app mobile.
  • Inviare il session_id acquisito dallo script a Fabrick Payment Orchestra tramite il relativo web service.

Integrazioni supportate

HPPO
Pay By Link
Web Component
Lightbox
API Only
Plugin (Verifica la pagina dedicata)

Installare Store Front Beacon

Su una pagina web

Store Front Beacon è uno snippet di codice inserito nelle pagine dello store online. È importante che il codice venga inserito nell’header o nel footer del sito in modo che le informazioni vengano raccolte da ogni pagina. Viene caricato in modo asincrono e non influisce sui tempi di caricamento della pagina.

Passaggi di implementazione:

  • Copiare lo snippet JavaScript qui sotto e sostituire le variabili evidenziate:
    • Store Domain: identificativo concordato e utilizzato per identificare il merchant
    • Session ID: identificativo univoco creato quando un utente atterra sul sito. Deve essere creato all’inizio della visita dell’utente allo store, non quando viene creato il carrello.
      • Nota: il Session ID deve essere inviato anche a Fabrick Payment Orchestra nel campo OrderDetails.FraudPrevention.BeaconSessionID.
  • Incollare lo snippet JavaScript del beacon nell’HTML del sito.
<script type="text/javascript">
//<![CDATA[
(function() {
function riskifiedBeaconLoad() {
var store_domain = '<YOUR DOMAIN>';
var session_id = 'SESSION ID GOES HERE - as passed to Order->cart_token';
var url = ('https:' == document.location.protocol ? 'https://' : 'http://')
+ "beacon.riskified.com?shop=" + store_domain + "&sid=" + session_id;
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = url;
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
}
if (window.attachEvent)
window.attachEvent('onload', riskifiedBeaconLoad)
else
window.addEventListener('load', riskifiedBeaconLoad, false);
})();
//]]>
</script>
informazioni

Per maggiori dettagli sull’integrazione e sulla configurazione del Store Front Beacon, la documentazione tecnica completa è disponibile al seguente link.


Single Page Applications (SPA)

Store Front Beacon supporta siti il cui contenuto viene caricato dinamicamente senza il tradizionale reload completo della pagina. Per tracciare i contenuti caricati dinamicamente come pageview distinte, invia un hit di pageview al Beacon e specifica il nome della pagina come parametro String.

RISKX.go('/new-page')

Per le Single Page Applications che potrebbero dover modificare il valore del Session ID (a causa dell’inattività dell’utente, ad esempio), specifica il nuovo Session ID generato come parametro String.

RISKX.go(url) // sends a beacon reading using the session ID defined in the initial script
RISKX.setSid('newSessionID') // updates the session ID
RISKX.go(url) // sends a beacon reading using the new session ID
informazioni

Per maggiori dettagli sull’integrazione e sulla configurazione del Store Front Beacon, la documentazione tecnica completa è disponibile al seguente link.


Su un’app mobile

SDK disponibile per iOS e Android. I dettagli di integrazione e la documentazione tecnica sono disponibili al seguente link.


Inviare i dati di transazione a Fabrick Payment Orchestra

Una volta abilitato, è necessario inviare i dettagli del carrello e dell’acquirente nella sezione OrderDetails delle nostre API.

I campi da valorizzare (con indicazione Required/Recommended/Optional e vincoli come dimensioni e valori accettati) sono descritti qui: api.gestpay.it/#orderdetails.

Guaranteed_Required.png

I vincoli devono essere rispettati, quindi si consiglia di aggiungere validazioni sui campi prima di inviarli.


Separare autorizzazione e cattura

Si consiglia di separare autorizzazione e cattura (settlement) della transazione, configurabile dal Gestpay Merchant Back Office (MBO).

  • Autorizzazione: riserva i fondi sul conto/carta dell’acquirente.
  • Cattura: addebita i fondi riservati.
  • Annullamento: rilascia i fondi riservati.

Configurazione:
Gestpay MBO -> Configuration > Environment > M.O.T.O.

Guaranteed_MBO.png

Da MBO è possibile separare la cattura dall’autorizzazione impostando un comportamento automatico che cattura o annulla la transazione entro x giorni dalla data di autorizzazione. Il ritardo massimo configurabile è di 25 giorni (Banca Sella), ma è necessario verificare con il proprio acquirer quale sia la durata effettiva dell’autorizzazione.

Durante questa finestra temporale è comunque possibile catturare o annullare la transazione via API o manualmente dalla Dashboard.

Per le richieste di annullamento è necessario indicare la motivazione nel campo cancelReason (es. "Out of stock" o "Suspected Fraud").


Esito del servizio

Per ottenere lo score finale (ovvero i valori di RiskResponseCode e RiskResponseDescription), è necessario utilizzare una chiamata di lettura della transazione:

Quando si utilizza la versione post-autorizzazione, poiché il servizio è asincrono, notifiche e risposte alle chiamate di autorizzazione potrebbero avere RiskResponseCode e RiskResponseDescription valorizzati con un esito temporaneo. Nella maggior parte dei casi, l’esito viene aggiornato entro 3 secondi.

Possibili valori per riskResponseCode:

ValueDescription
submittedThe transaction is under review
declinedTransaction not approved by Fabrick Guaranteed payments
createdThe transaction was received by Fabrick Guaranteed payments
capturedOnly for Select&Submit, returned for transactions not flagged for review
approvedTransaction approved by Fabrick Guaranteed payments
otherError returned by Fabrick Guaranteed payments

Testare Fabrick Guaranteed payments in sandbox

In Sandbox puoi testare diversi scenari utilizzando la carta 4775718800002026 e fornendo uno dei seguenti indirizzi email nel campo:

{
...
"OrderDetails": {
...
"CustomerDetail": {
...
"PrimaryEmail": "",
...
}
...
}
...
}
EmailFinal outcome
test@approve.com or anyACCEPTED
test@decline.comDECLINED
IMPORTANTE

Gli scenari di test non sono validi per Fabrick Advice

Prima di procedere con l’attivazione in produzione, sarà necessario inviare a Fabrick alcuni test su scenari standard.

Di seguito alcuni esempi:

  • Transazione autorizzata e approvata dal servizio, poi catturata.
  • Transazione autorizzata e approvata dal servizio, poi annullata.
  • Transazione autorizzata e rifiutata dal servizio, poi annullata.

Esegui e documenta tutti i possibili scenari, verificando sempre che la somma degli articoli e delle spese di spedizione, al netto di eventuali sconti, corrisponda all’importo inviato in autorizzazione. Ad esempio, per merchant che vendono sia beni fisici sia prodotti digitali, è necessario eseguire una transazione che includa entrambe le tipologie di articoli. È inoltre utile effettuare ordini con un indirizzo di spedizione diverso da quello di fatturazione per coprire anche questo scenario di verifica.

Payload e scenari di utilizzo

Durante l’implementazione è fortemente consigliato fare riferimento a orderdetails, che descrive i vincoli dei campi. L’importo richiesto in autorizzazione deve corrispondere a quanto presente in OrderDetails ed è importante passare l’indirizzo IP dell’acquirente nel campo clientIP come mostrato negli esempi.

La chiamata post-payment-create è comune a tutte le modalità di integrazione. Di seguito sono riportati alcuni esempi di request body per scenari specifici (es. goods, travel, accommodation, ecc.). A seconda dell’integrazione adottata o delle funzionalità utilizzate, potrebbe essere necessario aggiungere ulteriori campi. Ad esempio, per generare un link tramite create, è necessario includere:

{
...
"paymentChannel": {
"channelType": ["LINK"]
}
...
}

Goods

POST payment/create

Request

POST /api/v1/payment/create
Host (sandbox): sandbox.gestpay.net
Host (production): ecomms2s.sella.it
Authorization: apikey ****************
Content-Type: application/json
{
"shopLogin":"GESPAY12345",
"amount":"19.52",
"currency":"EUR",
"shopTransactionID":"OrderID_001",
"clientIP":"213.218.53.171",
"OrderDetails":
{
"FraudPrevention": {
"SubmitForReview": "1",
"Source": "web",
"SubmissionReason": "rule_decision",
"BeaconSessionID": "0ab076e5-632739d7-0f55cf66-a11ce4b7",
"VendorID": "",
"VendorName": ""
},
"CustomerDetail": {
"FirstName": "Luther",
"Lastname": "Hargreeves",
"PrimaryEmail": "test@approve.com",
"VerifiedEmail": "false",
"MerchantCustomerID": "Buyer0711",
"CreatedAtDate": "2017-13-16 15:28"
},
"ShippingAddress": {
"FirstName": "Katniss",
"Lastname": "Everdeen",
"StreetName": "Via Castello, 52",
"CountryCode": "IT",
"State": "Biella",
"StateCode": "BI",
"City": "Ronco Biellese",
"ZipCode": "13848",
"PrimaryPhone": "0152434640"
},
"BillingAddress": {
"FirstName": "Eleanor",
"Lastname": "Shellstrop",
"StreetName": "Via dei Ponderanesi, 2",
"CountryCode": "IT",
"State": "Biella",
"StateCode": "BI",
"City": "Ponderano",
"ZipCode": "13875",
"PrimaryPhone": "0152434640"
},
"ProductDetails": [
{
"ProductCode": "94711",
"SKU": "18SK",
"Name": "SOCKS",
"Quantity": "2",
"Price": "4",
"Type": "physical",
"RequiresShipping": "true",
"Category": "Clothing",
"SubCategory": "Socks",
"Brand": "UAClothes"
},
{
"ProductCode": "94718",
"SKU": "27SK",
"Name": "SWEATSHIRT",
"Quantity": "1",
"Price": "5",
"Type": "physical",
"RequiresShipping": "true",
"Category": "Clothing",
"SubCategory": "Shirt",
"Brand": "UAClothes"
},
{
"ProductCode": "883",
"SKU": "Giftcard883",
"Name": "Giftcard_5",
"Quantity": "1",
"Price": "5",
"Type": "digital",
"RequiresShipping": "false",
"DigitalGiftCardDetails":{
"SenderName": "Luther Hargreeves",
"DisplayName": "Percy Jackson",
"GreetingMessage": "Congratulations! This should help with the honeymoon.",
"Recipient":{
"Email": "test@approve.com",
"Phone": "3491234568"
}
}
}
],
"ShippingLines": [
{
"Price": "9.52",
"Title": "DHL Express Ship EUROPE",
"Code": "72-B03"
}
],
"DiscountCodes": [
{
"Amount": "8",
"Code": "Winter"
}
]
}
}

Travel/Accommodation

POST payment/create

Request

POST /api/v1/payment/create
Host (sandbox): sandbox.gestpay.net
Host (production): ecomms2s.sella.it
Authorization: apikey ****************
Content-Type: application/json
{
"shopLogin":"GESPAY12345",
"amount":"1251",
"currency":"EUR",
"shopTransactionID":"OrderID_001",
"clientIP":"213.218.53.171",
"OrderDetails":
{
"FraudPrevention": {
"SubmitForReview": "1",
"Source": "web",
"SubmissionReason": "rule_decision",
"BeaconSessionID": "0ab076e5-632739d7-0f55cf66-a11ce4b7"
},
"CustomerDetail": {
"MerchantCustomerID": "Buyer0711",
"FirstName": "Luther",
"Lastname": "Hargreeves",
"PrimaryEmail": "test@approve.com",
"CreatedAtDate": "2017-13-16 15:28",
"VerifiedEmail": "false"
},
"BillingAddress": {
"FirstName": "Eleanor",
"Lastname": "Shellstrop",
"StreetName": "Via dei Ponderanesi, 2",
"City": "Ponderano",
"ZipCode": "13875",
"State": "Biella",
"CountryCode": "IT",
"PrimaryPhone": "0152434640",
"StateCode": "BI"
},
"DiscountCodes": [{
"Amount": "121",
"Code": "Winter"
}
],
"AccommodationDetails": [{
"City": "Berlin",
"CountryCode": "DE",
"Title": "Welcome Hotel BE",
"CheckInDate": "2021-11-20T14:00:00+2",
"CheckOutDate": "2021-11-22T14:00:00+2",
"ProductId": "DE714",
"Rating": "3",
"NumberOfGuests": "2",
"AccommodationType": "Hotel",
"RoomType": "Double",
"Price": "342",
"Quantity": "1",
"CancellationPolicy": "Non-Refundable"
}, {
"City": "Madrid",
"CountryCode": "ES",
"Title": "Welcome Hotel MD",
"CheckInDate": "2021-12-06T22:00:00+2",
"CheckOutDate": "2021-12-08T12:00:00+2",
"ProductId": "ES9411",
"Rating": "3",
"NumberOfGuests": "2",
"AccommodationType": "Hotel",
"RoomType": "Double Deluxe",
"Price": "200",
"Quantity": "1",
"CancellationPolicy": "Non-Refundable"
}
],
"TravelTicketDetails": [{
"ArrivalCity": "Berlin",
"ArrivalCountryCode": "DE",
"ArrivalDate": "2021-10-24T06:00:00+2",
"ArrivalPortCode": "TXL",
"CarrierCode": "UA",
"CarrierName": "United Airlines",
"DepartureCity": "New-York",
"DepartureCountryCode": "US",
"DepartureDate": "2021-10-22T06:00:00-4",
"DeparturePortCode": "EWR",
"LegId": "UA0711",
"LegIndex": "1",
"RouteIndex": "1",
"TicketClass": "Economy",
"Price": "200",
"Quantity": "2",
"Title": "EWR-TXL"
}, {
"ArrivalCity": "Zurich",
"ArrivalCountryCode": "CH",
"ArrivalDate": "2021-12-06T04:00:00+2",
"ArrivalPortCode": "ZRH",
"CarrierCode": "LX",
"CarrierName": "SWISS",
"DepartureCity": "Berlin",
"DepartureCountryCode": "DE",
"DepartureDate": "2021-12-05T22:00:00+2",
"DeparturePortCode": "TXL",
"LegId": "LX1194",
"LegIndex": "1",
"RouteIndex": "2",
"TicketClass": "Economy",
"Price": "100",
"Quantity": "2",
"Title": "TXL-ZRH"
}, {
"ArrivalCity": "Madrid",
"ArrivalCountryCode": "ES",
"ArrivalDate": "2021-12-06T18:00:00+2",
"ArrivalPortCode": "MAD",
"CarrierCode": "IB",
"CarrierName": "Iberia",
"DepartureCity": "Zurich",
"DepartureCountryCode": "CH",
"DepartureDate": "2021-12-06T06:00:00+2",
"DeparturePortCode": "ZRH",
"LegId": "IB0794",
"LegIndex": "2",
"RouteIndex": "2",
"TicketClass": "Economy",
"Price": "100",
"Quantity": "2",
"Title": "ZRH-MAD"
}
],
"PassengerDetails": [{
"FirstName": "Marty",
"LastName": "McFly",
"DateOfBirth": "1980-04-02",
"NationalityCode": "US",
"InsuranceType": "Silver",
"InsurancePrice": "30",
"PassengerType": "Adult"
}, {
"FirstName": "Emmett",
"LastName": "Brown",
"DateOfBirth": "1960-06-09",
"NationalityCode": "US",
"InsuranceType": "",
"InsurancePrice": "",
"PassengerType": "Senior"
}
],
"ShippingLines": [{}]
}
}

Donations

POST payment/create

Request

POST /api/v1/payment/create
Host (sandbox): sandbox.gestpay.net
Host (production): ecomms2s.sella.it
Authorization: apikey ****************
Content-Type: application/json
{
"shopLogin":"GESPAY12345",
"amount":"5",
"currency":"EUR",
"shopTransactionID":"OrderID_001",
"clientIP":"213.218.53.171",
"OrderDetails":
{
"FraudPrevention": {
"SubmitForReview": "1",
"Source": "web",
"SubmissionReason": "rule_decision",
"BeaconSessionID": "0ab076e5-632739d7-0f55cf66-a11ce4b7"
},
"CustomerDetail": {
"FirstName": "Luther",
"Lastname": "Hargreeves",
"PrimaryEmail": "test@approve.com",
"VerifiedEmail": "false",
"MerchantCustomerID": "Buyer0711",
"CreatedAtDate": "2017-13-16 15:28"
},
"BillingAddress": {
"FirstName": "Eleanor",
"Lastname": "Shellstrop",
"StreetName": "Via dei Ponderanesi, 2",
"CountryCode": "IT",
"State": "Biella",
"StateCode": "BI",
"City": "Ponderano",
"ZipCode": "13875",
"PrimaryPhone": "0152434640"
},
"ProductDetails": [
{
"ProductCode": "79411",
"SKU": "411SK",
"Name": "5 Eur Donation",
"Quantity": "1",
"Price": "5",
"Type": "digital",
"RequiresShipping": "false",
"Category": "Single Donation"
}
],
"ShippingLines": [{}],
"DiscountCodes": [{}]
}
}