Home / Programmazione / PHP / Usare Banca Sella con PHP
Mattepuffo

Usare Banca Sella con PHP

Usare Banca Sella con PHP

Banca Sella è uno dei servizi di pagamento online più usati in assoluto.

Ma come spesso accade la documentazione fa abbastanza schifo.

In generale abbiamo due modi per connettere il nostri sito a BS:

  • tramite apposite classi
  • tramite web service

Questo secondo modo è quello più nuovo e consigliato da Sella stessa.

E noi vedremo un esempio di come richiamare il WS da una nostra pagina PHP.

Prima di tutto dovete sottoscrivere un abbonamento e configurare l'ambiente.

E' disponibile anche un ambiente di test, che è uguale a quello reale solo che non scala i soldi dalla carta di credito.

Nel backoffice di Sella ci sono varie cose da impostare, ma due sono le più importanti:

  • la pagina da richiamare a transazione eseguita con successo (che è una pagina del nostro sito)
  • e le Custom Info (se non ricordo male però il servizio base non prevede queste info aggiuntive)

Le Custom Info sono informazioni aggiuntive che possono essere utili per il post pagamento (ad esempio info sull'utente o sul prodotto comprato).

Non mi soffermo sulla loro configurazione, vi lascio smanettare!

Vediamo invece come richiamare il WS al submit di un form:

if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['btn_paga'])) {
    // DO YOUR STUFF
    $client = new SoapClient("https://testecomm.sella.it/gestpay/gestpayws/WSCryptDecrypt.asmx?WSDL");
    $params->shopLogin = ''; // CODICE ESERCENTE
    $params->uicCode = '242'; // EURO
    $params->amount = '0.01';
    $params->shopTransactionId = '';
    $params->buyerName = $buyer;
    $params->customInfo = 'cliente_email=' . $email . '*P1*prodotto_id=' . $prodotto;
    $objectresult = $client->Encrypt($params);
    $simpleresult = $objectresult->EncryptResult;
    $xml = simplexml_load_string($simpleresult->any); // LEGGE LA RISPOSTA DEL SERVER
    if ($xml->TransactionResult == "OK") { // INVIA I DATI A BANCA SELLA
        $a = '';
        $b = $xml->CryptDecryptString;
        $link = "https://testecomm.sella.it/gestpay/pagam.asp?a=" . $a . "&b=" . $b;
        echo '';
    } else { // ERRORE
        echo $xml->ErrorDescription;
    }
}

Allora, al submit del form fate le operazioni che vi servono (tipo prendere i dati utente come l'email).

Creaimo un oggetto SoapClient per connettere al web service SOAP di Banca Sella; in questo caso mi connetto all'ambiente di test.

Il parametro shopLogin è il codice esercente che vi ha dato Sella.

Il parametro uicCode è la valuta (nella doc ci sono le varie info; questa è per l'Euro).

Poi c'è il versamento (in questo caso simbolico di un centesimo).

Un shopTransactionId (una chiave per criptare tutto), il nome del compratore (buyerName, apparirà nella pagina del pagamento) e le customInfo.

Notate che queste sono divise tramite *P1*, il nome del paramero deve essere lo stesso messo sulla configurazione, e se non ricordo male anche l'ordine.

Nella variabile $a dovete rimetterci il codice esercente.

Se tutto va a buon fine veniamo rimandati nella pagina del pagamento classica di Sella.

A questo punto dobbiamo preparare la pagina finale, dove si viene rimandati dopo il pagamento (rappresentata dalla variabile $link):

$client = new SoapClient("https://testecomm.sella.it/gestpay/gestpayws/WSCryptDecrypt.asmx?WSDL");
$params->shopLogin = $_GET["a"];
$params->CryptedString = $_GET["b"];
$objectresult = $client->Decrypt($params);
$simpleresult = $objectresult->DecryptResult;
$xml = simplexml_load_string($simpleresult->any);

if ($xml->TransactionResult == "OK") { // SE TRANSAZIONE OK
    $xml->ShopTransactionID;
    $xml->BankTransactionID;
    $xml->AuthorizationCode;
    $buyerNome = $xml->BuyerName;
    $xml->Currency;
    $xml->Amount;
    // L'ORDINE DEI PARAMETRI DIPENDE DA BANCA SELLA
    $customInfo = $xml->CustomInfo;
    $arrayCI = explode('*P1*', $customInfo); // SPLITTO LA STRINGA CUSTOM INFO
    
    foreach ($arrayCI as $k => $v) {
        echo $k . ' ' . $v . '
';
    }

    // DO YOUR STUFF

} else {
    echo $xml->ErrorCode . " – " . $xml->ErrorDescription;
}

Prima di tutto leggiamo la risposta sempre con SoapClient e sotto leggiamo i vari parametri.

Se la transazione è avvenuta con successo stamo i parametri delle Custom Info e poi tutta una serie di cose; quelle che vi servono (invio email, operazioni su db, ecc....).

Considerate che questa è una pagina del sito a tutti gli effetti, e quindi potete farci quello che vi pare dopo aver controllato la risposta.

Se la transazione non è andata a buon fine stampo l'errore.