Skip to main content

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)

I dati che servono a generare un checkout sono i seguenti:
$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).