
Tornando a noi il callback come suggerisce il termine stesso serve per fare una "chiamata" di ritorno in modo che quando un cliente paga la fattura diventi paid e partano i moduli di auto-setup after payment (se ne hai). Se non imposti il callback ti tocca aggiungere i pagamenti e attivare gli ordini manualmente.
1. Sempre nel nostro kit apri il file callback.php. Uhm... noto grandi differenze dal file originale e quello modificato e francamente non mi ricordo tutti i passaggi
quindi faccio prima a mettere tutto il codice. Cancella tutto il contenuto di callback.php e mettici questo
Codice:
<?php
//Mi faccio restituire i parametri di request
$payer_id = $_REQUEST["payer_id"];
$thx_id = $_REQUEST["thx_id"];
$verify_sign = $_REQUEST["verify_sign"];
$amount = $_REQUEST["amount"];
$custom = $_REQUEST["custom"];
$count1 = $amount / 1000;
$count2 = $count1 * 18;
$count3 = number_format($count2, 2);
if ($count3 < '0.3') {
$fee = "0.3";
}else{
$fee = $count3;
}
$codice_segreto = 'CODICE DI CONTROLLO DELL\'IDENTITA\'';
//Inserire il merchant_key indicato all'interno del sito IWSMILE su POS VIRTUALE/Configurazione/Notifica Pagamento.
$str = "thx_id=".$thx_id."&amount=".$amount."&verify_sign=".$verify_sign;
$str .= "&payer_id=".$payer_id;
$str .= "&merchant_key=".$codice_segreto;
$url = "https://checkout.iwsmile.it/Pagamenti/trx.check";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $str);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_POST, TRUE);
$content = curl_exec ($ch);
$c_error = "NONE";
$ret = 'NON DISPONIBILE';
if (curl_errno($ch) != 0) {
$c_error = curl_error($ch);
}else{
if(strstr($content,"OK")) {
// Ordine di pagamento VERIFICATO
$ret='VERIFICATO';
} elseif(strstr($content,"KO")) {
// Ordine di pagamento NON VERIFICATO
$ret='NON VERIFICATO';
} elseif(strstr($content,"IR")) {
// Richiesta di conferma non VALIDA: controllare i dati e la stringa dei parametri creata per la richiesta
$ret='RICHIESTA NON VALIDA';
} elseif(strstr($content,"EX")) {
// Parametro "verify_sign" scaduto
$ret='RICHIESTA SCADUTA';
}
}
curl_close ($ch);
$handle = fopen($_SERVER['DOCUMENT_ROOT']."/risultati.html", "a");
fwrite($handle, "NOTIFICA VERSO ".$url."<br>\n");
fwrite($handle, "STRING: ".$str."<br>\n");
fwrite($handle, "merchant_key: ".$codice_segreto."<br>\n");
fwrite($handle, "CURL Error: ".$c_error."<br>\n");
fwrite($handle, "payer_id: ".$payer_id."<br>\n");
fwrite($handle, "thx_id: ".$thx_id."<br>\n");
fwrite($handle, "verify_sign: ".$verify_sign."<br>\n");
fwrite($handle, "invoice: ".$custom."<br>\n");
fwrite($handle, "amount: ".$amount."<br>\n");
fwrite($handle, "fee: ".$fee."<br>\n");
fwrite($handle, "DECODIFICA RISULTATO: ".$ret." \n<br>\n [".$content."]<br><br>\n");
fclose($handle); echo "Correttamente elaborato.";
# Required File Includes
include("../../../dbconnect.php");
include("../../../includes/functions.php");
include("../../../includes/gatewayfunctions.php");
include("../../../includes/invoicefunctions.php");
$gatewaymodule = "iwbank"; # Enter your gateway module name here replacing template
$GATEWAY = getGatewayVariables($gatewaymodule);
if (!$GATEWAY["type"]) die("Module Not Activated"); # Checks gateway module is active before accepting callback
# Get Returned Variables - Adjust for Post Variable Names from your Gateway's Documentation
$status = $content;
$invoiceid = $custom;
$transid = $thx_id;
$amount = $amount;
$invoiceid = checkCbInvoiceID($invoiceid,$GATEWAY["name"]); # Checks invoice ID is a valid invoice number or ends processing
checkCbTransID($transid); # Checks transaction number isn't already in the database and ends processing if it does
if ($status=="OK") {
# Successful
addInvoicePayment($invoiceid,$transid,$amount,$fee,$gatewaymodule); # Apply Payment to Invoice: invoiceid, transactionid, amount paid, fees, modulename
logTransaction($GATEWAY["name"],$_POST,"Successful"); # Save to Gateway Log: name, data array, status
} else {
# Unsuccessful
logTransaction($GATEWAY["name"],$_POST,"Unsuccessful"); # Save to Gateway Log: name, data array, status
}
?>
2. Cose da fare/sapere o importanti
Riga 10 - Dovrei vergognarmi per questo orrendo script
comunque serve per ricavare la fee (spese di incasso) che su IWSmile sono dell'1.8% ma se la fee è inferiore ai 0.30 centesimi questa diventa appunto 0.30 centesimi fissi a transazione.
Codice:
$count1 = $amount / 1000;
$count2 = $count1 * 18;
$count3 = number_format($count2, 2);
if ($count3 < '0.3') {
$fee = "0.3";
}else{
$fee = $count3;
}
Riga 20 - Metti il mechant key da 64 caratteri
Codice:
$codice_segreto = 'CODICE DI CONTROLLO DELL\'IDENTITA\'';
Riga 85 - Assolutamente ricordati di modificare questo parametro in base al nome che hai scelto di dare all'altro file (template.php) che nella prima parte della spiegazione ho rinominato iwbank.php. Vado quindi a scrivere iwbank.
Codice:
$gatewaymodule = "iwbank";
Riga 66 - Tutti gli fwrite servono per stampare il log nel file risultati.html che sarà creato nella root principale del sito. Può tornare molto utile in fase di test. Se vuoi modificalo come meglio preferisci.
3. Carica il file callback.php in modules/gateways/callback. Fine.
TESTING
Ovviamente non ci mettiamo a fare i test con le carte di credito vere e con clienti veri. IWSmile, oltre a mettere a disposizione una piattaforma di test uguale all'originale, ci dà anche conti fasulli per testare i pagamenti. Li troviamo in Allegato 6 - Prove in ambiente di test
https://www.iwsmile.it/contents/IWSM...tegrazione.pdf
Per attivare il test devi solo cambiare l'url del POST da https://checkout.iwsmile.it/Pagamenti/ in https://testcheckout.iwsmile.it/Pagamenti/. In pratica su entrambi i file (template.php / iwbank.php e callback.php) fai un trova/sostituisci. Poi utilizza i conti fasulli indicati nella documentazione.
Solo due piccole chicche. Nei codici che ho pubblicato utilizzo la lingua Inglese nel S2S (server to server) vale a dire che la pagina IWSmile per pagare sarà di default in Inglese. E' ovviamente possibile cambiare al volo la lingua dalla pagina stessa ma se vuoi l'Italiano come default in $code (template.php / iwbank.php) cambia questo
Codice:
<input type="hidden" name="LANG_COUNTRY" value="IT">
Dalla documentazione:
“IT” = italiano
“EN” = inglese
“DE” = tedesco
“FR” = francese
“ES” = spagnolo
La seconda cosa riguarda l'auto inserimento di alcuni valori sempre nella pagina IWSmile. Lo trovo comodo ma a qualcuno può dare fastidio. In pratica come l'ho messo io il cliente ordina e si registra sul nostro WHMCS. Quando viene reindirizzato su IWSmile per effettuare il pagamento i campi Nome, Cognome, Email e forse un altro che non ricordo sono già "filled" con i dati che hanno utilizzato nella registrazione su WHMCS.
Segnalibri