Ricarica Wallet del Cliente
Prima di eseguire le lavorazioni di cantiere, al fine di garantire il committente e le maestranze il cliente deve versare gli importi dovuti nel proprio wallet cosi da garantire la disponibilità delle somme a completamento dei lavori.
👤 Utenti coinvolti
- Customer
Il flusso di ricarica si attiva dalla rotta flowpay.wallets.transferMoneyToWallet
Questa rotta chiama il metodo FlowpayController@transferMoneyToWallet(Request $request, Project $project) che imposta la collection di ricarica a "Custom" (spiegato meglio sotto) e richiama il metodo FlowPayService::transferMoneyToCustomerWallet($project, $data);
Questo metodo richiede a flowpay la generazione di un link di pagamento che permetterà tramite wizard (lato flowpay) di ricaricare il wallet cliente del progetto indicato nel parametro e precedentemente registrato.
Il flusso di ricarica lato Flowpay si espleta in 2 fasi
- Generazione di una QUOTE (oggetto che contiene gli estremi del pagamento che intendiamo effettuare)
- Generazione del link di Checkout della quote appena creata.
Il metodo che genera la quote è FlowpayService::addQuoteToProject(Project $project, $data = []) tramite la chiamata: post('constructions/sites/'.$project->flowpay_site_id.'/quote', $quoteData, $token) (il token deve essere quello della committenza del progetto)
nel $quoteData sono presenti gli estremi per la generazione della quote (amount, causale e altre specifiche)
Generata la quote, flowpay restituisce i dati relativi (che memorizziamo in dettaglio nella tabella flowpay_quotes) e passiamo alla fase 2 (generazione del checkout)
$data = [
'tenantID' => Id flowpay dell'account cliente
'fingerprint' => Identificativo della quote precedentemente creata
'okRedirect' => Link di atterraggio in caso di operazione riuscita (rotta flowpay.checkout-success),
'nokRedirect' => Link di atterraggio in caso di operazione fallita (rotta flowpay.checkout-failed),
'type' => 'construction',
];
tramite il metodo FlowpayService::checkoutQuote($object, $quote) che effettua la chiamata post($flowPayData->uuid.'/checkout', $data, $token); otteniamo gli estremi dell'oggetto di checkout appena creato, fra questi abbiamo il "code" che lo identifica univocamente.
Memorizziamo tutte le informazioni nella tabella flowpay_checkouts e avviamo il wizard di pagamento tramite il redirect all'indirizzo composto da url di servizio + code appena ottenuto. $settings['checkout_webpage_endpoint'].'/'.$response['code']]
La prima volta che un utente effettua una ricarica, il wizard di flowpay richiede la selezione di una banca (che dovrà anche essere autorizzata tramite procedura ad hoc) a cui agganciare l’account.
In caso di pagamento completato/fallito quindi nella landing di okRedirect/nokRedirect: Mandiamo la richiesta a FlowPayController@checkoutSuccess/FlowPayController@checkoutFailed che rimandano entrambi ad un terzo metodo checkoutResponseHandler($quoteSign, $status) che aggiorna lo status (nel database di agorà) sia della quote che del checkout e configura il modale di successo che verrà mostrato all'utente.
Database
Tutti i dati relativi a questo flusso vengono memorizzati nelle tabelle flowpay_quotes e flowpay_checkouts.
La tabella flowpay_quotes:
- is_demo - Quanto il progetto è demo, anche le quote lo saranno e gli handler di flowpay emuleranno le operazioni;
- project_id - Id di cantiere;
- collection - Causale di ricarica, custom-amount, designer-amount, total-project-amount, etc...;
- create_data - Payload completo inviato per la richiesta di creazione;
- create_response_data - Payload completo ricevuto a seguito della richiesta di creazione.
La tabella flowpay_checkouts:
-
is_demo - Quanto il progetto è demo, anche le quote lo saranno e gli handler di flowpay emuleranno le operazioni;
-
project_id - Id di cantiere;
-
object_type - classe dell'oggetto di appartenenza;
-
object_id - id dell'oggetto di appartenenza;
-
sender_type - classe dell'oggetto del debitore;
-
sender_id - id dell'oggetto debitore;
-
receiver_type - classe dell'oggetto del creditore;
-
receiver_id - id dell'oggetto creditore;
-
create_checkout_data - Payload completo inviato per la richiesta di creazione;
-
create_checkout_response - Payload completo ricevuto a seguito della richiesta di creazione;
-
status - success in caso di completamento del wizard o failed per abbandono (se pagamenti di tipo SCA);
-
checkout_details - informazioni aggiuntive sullo stato di un pagamento raccolte da un job;
-
checkout_details_updated_at - ultima data di interrogazione effettuata dal job che compila il checkout_details;
-
last_checkout_status - esito del pagamento, può essere concluded (completato), not concluded (in lavorazione).