Vai al contenuto
revhosting

Implementazione di Iwsmile in Whmcs

Recommended Posts

Nota di Uno: Ho spostato questi post dalla discussione http://www.hostingtalk.it/forum/web-business/14439-sistemi-di-incasso-per-carte-di-credito-4.html dove erano in o.t.

In questo modo saranno più facilemente rintracciabili da chi ha bisogno di questa implementazione.

Anche se questo è un tutorial che inizia un pò stranamente contiene comunque tutto il necessario.

 

Per quanto mi riguarda template.php è stato semplice da configurare. Roba di 5 minuti. L'altro (callback.php) come vedete mi ha fatto fare le ore piccole :062802drink_prv: in test, utilizzando conto e merchant key fittizi, non si sincronizza. Mi domando come possa una persona capire dove sta il problema se nel log risultati.html non vengono mostrati i dati in output.

 

Ma questa è un'altra storia. Vedrò da me...

Modificato da Uno

Share this post


Link to post
Share on other sites
Rileggendo il thread penso di poter affermare che al post n° 60 parleremo di tartufi, di come interfacciarli al risotto e di vini doc.

Antipasto :062802drink_prv:

 

1. Scarico Gateway Module Development Kit da qui Creating Modules - WHMCS Documentation

2. Rinomino il file template.php in iwbank.php

3. Apro il file. Alla riga 3 e 14 ci sono due valori da modificare

function template_config()
function template_link($params)

Li modifico cosi

function iwbank_config()
function iwbank_link($params)

4. Alla riga 5 modifico

"FriendlyName" => array("Type" => "System", "Value"=>"My Custom Module"),

In

"FriendlyName" => array("Type" => "System",  "Value"=>"Quello che mi pare"),

Qui decido il nome che voglio i clienti visualizzino per questa opzione di pagamento nel drop-down. Esempio pratico. Supponiamo di accettare "Paypal" e "Bonifico" come metodi di pagamento. Imposto il FriendlyName su "Paypal 2 la vendetta". Quando il cliente ordina nel buono d'ordine visualizzerà nel drop-down dei pagamenti disponibili Paypal, Bonifico, Paypal 2 la vendetta. Per esperienza personale vi consiglio di non mettere "IWBank" perchè tutti sceglierebbero Paypal perchè pochi conoscono IWBank (soprattutto se vendi a stranieri). Molto meglio mettere "Carta di credito" perchè alla fine di questo si tratta.

 

5. Svuotate $code

    $code = '<form method="http://www.domain.com/submit">
<input type="hidden" name="username" value="'.$gatewayusername.'" />
<input type="hidden" name="testmode" value="'.$gatewaytestmode.'" />
<input type="hidden" name="description" value="'.$description.'" />
<input type="hidden" name="invoiceid" value="'.$invoiceid.'" />
<input type="hidden" name="amount" value="'.$amount.'" />
<input type="submit" value="Pay Now" />
</form>';

Lasciate semplicemente $code =''; Adesso vi tocca leggere i paragrafi che ho indicato

https://www.iwsmile.it/contents/IWSMILE/doc/manuale_di_integrazione.pdf

 

3.1.1 Configurazione POS Virtuale - Completate tutta la procedura e assicuratevi di:

 

  1. Salvarvi il Codice immagine per inclusione HTML (una stringa di 32 caratteri).
  2. Salvarvi il Codice di controllo dell'identità (una stringa di 64 caratteri)
  3. Attivare il checkbox Attiva il ritorno automatico

8. Allegati > Allegato 2. Qui trovate la descrizione dettagliata di tutti i form che vi incollo in basso

 

Torniamo al nostro $code =""; vuoto. Adesso riempiamolo con questo codice

    $code = '
<form action=" https://checkout.iwsmile.it/Pagamenti/" method="post">
<input type="hidden" name="ACCOUNT" value="NUMERO DI CONTO IWSMILE IN FORMATO BREVE 700000001">
<input type="hidden" name="MERCHANT_KEY" value="CODICE DI CONTROLLO DELL\'IDENTITA\'">
<input type="hidden" name="AMOUNT" value="'.$amount.'">
<input type="hidden" name="ITEM_NAME" value="ORDINE NUMERO #'.$invoiceid.'">
<input type="hidden" name="CUSTOM" value="'.$invoiceid.'">
<input type="hidden" name="ITEM_NUMBER" value="1">
<input type="hidden" name="QUANTITY" value="1">
<input type="hidden" name="NOTE" value="1">
<input type="hidden" name="URL_OK" value="https://www.tuowhmcs.tld/viewinvoice.php?id='.$invoiceid.'">
<input type="hidden" name="URL_BAD" value="https://www.tuowhmcs.tld/viewinvoice.php?id='.$invoiceid.'">
<input type="hidden" name="URL_CALLBACK" value="http://www.tuowhmcs.tld/modules/gateways/callback/callback.php">
<input type="hidden" name="IMAGE_CODE" value="CODICE IMMAGINE PER INCLUSIONE HTML">
<input type="hidden" name="FLAG_ONLY_IWS" value="0">
<input type="hidden" name="LANG_COUNTRY" value="EN">
<input type="hidden" name="PAYER_FIRSTNAME" value="'.$firstname.'">
<input type="hidden" name="PAYER_LASTNAME" value="'.$lastname.'">
<input type="hidden" name="PAYER_EMAIL" value="'.$email.'">
<input type="image"  src="https://www.iwsmile.it/images/puls_iwsmile_H.gif" border="0"  name="submit" alt="Make a one time payment with IWSMILE">
</form>';

6. Riga 54 e 55

    return $code;
}

Sotto di questo elimino tutto. Ricordatevi di lasciare il tag di chiusura ?>

7. Carico il file iwbank.php in modules/gateways

8. WHMCS > Setup > Payment Gateways. Trovate il vostro "Paypal 2 la vendetta" e attivatelo e visto che ci siete sistemate anche il sort order con gli altri gateway

 

Quando posso spiego la seconda parte (il callback) e poi i funghi per Uno :D

Modificato da revhosting

Share this post


Link to post
Share on other sites

:cartello_lol:

 

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 :D quindi faccio prima a mettere tutto il codice. Cancella tutto il contenuto di callback.php e mettici questo

<?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 :stordita: 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.

$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_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.

$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/IWSMILE/doc/manuale_di_integrazione.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

<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.

Share this post


Link to post
Share on other sites

Grazie revhosting, ho fatto come dici, ma effettuando le prove sull'ambiente di test mi dice "Attenzione! Non è possibile completare il pagamento."

 

Ho messo alla riga 46 del file iwbank.php https://testcheckout.iwsmile.it/Pagamenti/

 

riga 47 ho messo il conto fittizio 700000001

 

Nel file callback.php ho messo alla riga 26 https://testcheckout.iwsmile.it/Pagamenti/trx.check

inserendo solo test dal rigo originale.

 

Ho simulato un ordine da whmcs accedendo con un account fittizio

pago con carta di credito ( iwbank) accedo alla pagina del pagamento di iwsmile

sei gia nostro cliente ? inserisci user e password

 

Inserisco come user : IWSTEST1

passw: 12345

 

Nulla, non mi fa entrare "Attenzione! Non è possibile completare il pagamento.""

Share this post


Link to post
Share on other sites

Crea un account o accedi per lasciare un commento

Devi essere un utente registrato per poter lasciare un commento

Crea un account

Iscriviti per un nuovo account nella nostra comunità. È facile!

Registra un nuovo account

Accedi Subito

Sei già registrato? Accedi da qui.

Accedi Adesso

×