01 Ottobre 2010
Attenzione: questo articolo è stato scritto più di 12 anni fa, alcune informazioni potrebbero essere obsolete.
Poiché non ho trovato nessun esempio al riguardo, riporto un semplice esempio di come criptare i dati da inviare a Banca Sella senza passare dalla libreria ma utilizzando il WebService WSCryptDecrypt, messo a disposizione da Banca Sella stessa.
//Effettua la chiamata Soap
$client = new SoapClient("https://ecomms2s.sella.it/gestpay/gestpayws/WSCryptDecrypt.asmx?WSDL");
//Imposta tutti i parametri; quelli valorizzati sono i minimi necessari
$params->shopLogin = 'my_shop_login';
$params->uicCode = '242'; //euro
$params->amount = '1.00';
$params->shopTransactionId = 'aBgtsr234wZy75';
$params->cardNumber = '';
$params->expiryMonth = '';
$params->expiryYear = '';
$params->buyerName = 'Name Surname';
$params->buyerEmail = 'name@website.com';
$params->languageId = '1'; //Italiano
$params->cvv = '';
$params->customInfo = '';
$objectresult = $client->Encrypt($params);
$simpleresult = $objectresult->EncryptResult;
//Legge la risposta dal server
$xml = simplexml_load_string($simpleresult->any);
if ($xml->TransactionResult == "OK" ) {
$a = 'my_shop_login';
$b=$xml->CryptDecryptString;
$link= "https://ecomm.sella.it/gestpay/pagam.asp?a=".$a."&b=".$b;
//Invia i dati verso Banca Sella
header('Location: '.$link);
}
else {
//Altrimenti restituisce un errore
echo($xml->ErrorDescription);
}
Ecco anche un esempio per decriptare:
$client = new SoapClient("https://ecomms2s.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);
//Se la transazione è andata a buon fine, scrive i dati
if ($xml->TransactionResult == "OK" ) {
$ShopTransactionID = $xml->ShopTransactionID;
echo "<p>".$ShopTransactionID."</p>";
$BankTransactionID = $xml->BankTransactionID;
echo "<p>".$BankTransactionID."</p>";
$AuthorizationCode = $xml->AuthorizationCode;
echo "<p>".$AuthorizationCode."</p>";
$Currency = $xml->Currency;
echo "<p>".$Currency."</p>";
$Amount = $xml->Amount;
echo "<p>".$Amount."</p>";
$BuyerName = $xml->BuyerName;
echo "<p>".$BuyerName."</p>";
$BuyerEmail = $xml->BuyerEmail;
echo "<p>".$BuyerEmail."</p>";
}
//Altrimenti restituisce un errore
else {
echo $xml->ErrorCode . " – " . $xml->ErrorDescription;
}
Commenti
shira
Grazie per l'esempio - hai capito come decriptare l'xml che viene inviato indietro? Hai per caso un esempio di come leggere la risposta?
xlthlx
Basta utilizzare il metodo Decrypt https://testecomm.sella.it/gestpay/gestpayws/WSCryptDecrypt.asmx?op=Decrypt.
Ho aggiunto un esempio al post.
Shira
Grazie 1000!, funziona perfettamente.
Saluti e auguri.
Shira.
xlthlx
Prego, saluti e auguri a te.
Enrico
Ciao, non riesco a trovare documentazione per fare un banale sistema di pagamento con Gestpay... in pratica ho un primo form nel quale il cliente inserisce i suoi dati, a quel punto vorrei che alla pressione del tasta "acquista" andasse alla pagina di pagamento con carta di credito su banca sella - mi chiedo: dove va inserito il codice che posti? Aiutoooooo!!!!
xlthlx
Ciao Enrico,
devi richiedere un account di test a banca Sella, all'interno del back office trovi anche la documentazione.
Come connetterti e cosa usare per la connessione dipende dal contratto che è stato fatto; per ogni spiegazione chiedi direttamente a loro. C'è anche un forum apposito.
Enrico
Ciao Maria, grazie per la risposta.
il tipo di contratto che ho stipulato è questo:
Tipologia comunicazione: Crittografia
Versione: ADVANCED
ho già attivato l'utente di test e ho scaricato la documentazione.
Purtroppo solo due paginette sono state dedicate al webservice (senza installazione sul server di oggetti), e non riesco a capire a livello logico come dovrebbe funzionare il pagamento.
Ti chiedo se puoi darmi qualche delucidazione. ho una prima pagina nel quale l'utente vede il prodotto e clicca il tasto "compra", va ad una successiva pagina nel quale gli chiedo le info personali (email, indirizzo, nome, congnome, ecc) a questo punto ci sarà un tasto procedi che dovrà mandare alla pagina di pagamento di banca sella. In questa seguenza, dove si colloca lo script che hai postato?
ps il tuo script mi resituisce questo errore: Nome parametro non previsto. Verificare la configurazione Campi e Parametri nel Back Office.
xlthlx
Ciao Enrico,
come da errore, devi controllare come hai impostato i tuoi parametri nel back office; probabilmente ne manca uno.
Lo script va nella pagina dove hai inserito il tasto procedi: è solo in quella pagina che hai tutti i dati dell'utente no? A quel punto li recuperi inserendoli nello script.
Shira
Ciao Maria,
Ho scoperto adesso adesso che questi esempi che funzionano perfettamente chrome, firefox e IE, generano un errore di sicurezza in Safari:
Unsafe JavaScript attempt to access frame with URL http://www.domain.... from frame with URL https://testecomm.sella.it/gestpay/PAGAMERR.asp. Domains, protocols and ports must match.
Hai incontrato anche tu questo problema? Forse è un problema con il webservice di banca sella (adesso provo sentirli). Oppure dobbiamo aggiungere in qualche modo una testata per cross domain origin... Hai qualche idea? Grazie!
xlthlx
Ciao Shira,
a dire il vero non sto attualmente utilizzando lo script (nel frattempo ho cambiato lavoro), e purtroppo non ho idee sull'errore.
Mi sembra alquanto strano però, se senti Banca Sella ci faresti sapere? Grazie mille.
Per tutti: di solito nessuno mi chiama Maria, mi chiamano Serena.
Shira
Ciao Serena,
L'errore era mio - l'impostazione di safari per i cookie era settato da accettare soltanto dati da qualcuni domini. Cambiandola per accettare dati da tutti domini, il problema si è risolto.
Banca Sella mi diceva "i nostri Web Services non pongono limitazioni ai domini da cui possono essere contattati, se non per quanto riguarda il controllo dell'indirizzo IP.".
Tutto a posto. Grazie di nuovo.
xlthlx
Ciao Shira,
ok, grazie a te per l'informazione.
Gigio2k
ATTENZIONE:
per la versione BASIC
si devono passare SOLO ED ESCLUSIVAMENTE
$params->shopLogin = 'iltuoshopid';
$params->uicCode = '242'; //euro
$params->amount = '1.00';
$params->shopTransactionId = 'transID';
altrimenti si genera un errore :
"Nome parametro non previsto. Verificare la configurazione Campi e Parametri nel Back Office."
Ma che nel back office non potete cambiare/visualizzare ;)
(certo che c'è una certa carenza di documentazione su bancasella...)
Marco Faustinelli
Buongiorno e innanzitutto grazie per il post, davvero unico e prezioso
Ho due domande riguardo ai WS di Banca Sella:
- che senso ha usare la url s2s quando si usano i WS? L'unico scopo che vedo è quello di preparare una pagina che scrive nel log della mia applicazione
- dove si trova di preciso il forum di cui parli?
Buona giornata,
Marco
Andrea
Ciao e complimenti per l'articolo.
In questi giorni è arrivata una direttiva di Sella:
https://www.gestpay.it/gestpay/sicurezza/poodle.jsp
Io uso GestPayCrypt e mi dicono che da ora in avanti bisogna passare all'interfaccia web service WsCryptDecrypt
Questo codice, anche se datato, rimane comunque valido?
Grazie,
Andrea
xlthlx
Ciao Andrea, purtroppo non ti so dire, e nel frattempo mi sono trasferita all'estero, e quindi non credo che userò più GestPay. Ho visto però che c'è un esempio in PHP all'indirizzo https://www.gestpay.it/gestpay/specifiche-tecniche/index.jsp
Andrea
Grazie lo stesso per la risposta e in bocca al lupo per tutto ;)