Skip to main content

Registrazione utente su Flowpay

Tramite questa funzionalità è possibile registrare un utente presso FlowPay.


👤 Utenti coinvolti

  • Clienti
  • Progettisti
  • Professionisti
  • Utenti Azienda

Per creare account lato FP è necessario chiamare da agorà la rotta /flowpay/login che viene inviata a FlowpayController@Login.

Il metodo, tramite le credenziali "master" avvia il flusso OpenID

Agorà (tramite credenziali master) chiede al server FP di generare un link per la registrazione dell'utente ed effettua il redirect presso questo (onboarding di flowpay).

Quando all'interno di agorà sono presenti tutti i dati di fatturazione dell'utente che sta onbordando, nella richiesta viene anche inviato il kyc del cliente (generato da FlowPayService::getKycId).

Payload di richiesta link per l'apertura dell'account
$data = [
'client_id' => $flowpaySetting['client_id'],
'redirect_uri' => route('flowpay.callback'),
'response_type' => 'code',
'scope' => kyc openid invoice:read invoice:write construction:read construction:write wallet:construction payment:read,
'kyc_id' => $kycId,
'tenant_type' => $invoiceData->vat_number ? 'business' : 'consumer',
]
Chiamata effettuata:
$flowpaySetting['core'].'/openid/v2/authenticate?'.http_build_query($data)

Concluso l'onboarding lato flowpay, l'utente viene fatto atterrare in agorà in una rotta definita nella fase di prima chiamata (redirect_uri) che viene gestita dal metodo FlowpayController@callback.

Nel payload di questo redirect (in caso di completato onboarding) viene inserito da flowpay un code che l'handler (FlowpayController@callback) recupera ed utilizza per effettuare una nuova chiamata dalla quale ottiene le credenziali di accesso complete dell'utente (tokens e tenant_id). Questi dati vengono memorizzati nella tabella "flowpay_data" e vengono agganciati all'utente che ha avviato l'operazione. Quando questo utente è di tipo company, il proprietario del flowpay_data row non sarà un oggetto "user" ma di tipo "company" (a cui appartiene).

Payload richiesta per l'ottenimento delle credenziali
$data = [
'grant_type' => 'authorization_code',
'client_id' => $flowpaySetting['client_id'],
'code' => $request->code,
'redirect_uri' => route('flowpay.callback'),
'client_secret' => $flowpaySetting['secret'],
];

FlowPayService::post('oauth/token', $data, null, [], true);

Database

La tabella che contiene gli "account" di flowpay è la tabella flowpay_data, dislocata in un database a parte vista la volatilità dei token che ne compromette la possibilità di crearne backup.

A seguito del flusso di registrazione/autenticazione effettuato tramite il wizard di flowpay, nella success route viene restituito e memorizzato in questa tabella un dataset.

Le colonne della tabella sono:

  • model_type - classe dell'oggetto di appartenenza (User o Company);
  • model_id - id dell'oggetto di appartenenza;
  • parent_id - Utilizzato per account aziendali che nelle versioni precedenti di fp all'onboarding restituivano più di un tenant.
  • uuid - id utente lato fp (chiamato da loro tenant id);
  • oauth2_token - token oauth2 di fp con un ttl di circa 5 minuti;
  • oauth2_refresh_token - necessario per la ri-generazione dei token scaduti. Questo token può essere utilizzato solo una volta;
  • oauth2_token_expire_at - datetime di scadenza del token;
  • user_info - raccoglie dati accessori tramite un job che arricchisce le info dell'utente;
  • has_connected_bank_account - flag che viene settato manualmente dai super user, quando lato fp viene connesso ad un conto bancario;
  • has_active_account - flag che viene settato manualmente dai super user, quando lato fp viene attivato l'account. Viene impostato nuovamente a false quando, finita la commessa il cliente chiude il wallet;
  • contract_date - Data di stipula di contratto, contratto che viene aggiunto e gestito come media;
  • is_valid - flag che indica lo stato di vita del current oauth2_token (se expired, il flag è a 0, 1 altrimenti)