Ciao,
sto provando a sviluppare un modulo di pagamento per il gateway CILME – MULTITEL che è utilizzato dal BancoDesio.
Il flusso penso sia analogo a quello di altri gateway, per cui ho creato un file BancoDesio.php che riporto poi di seguito.
Sono riuscito ad installare il modulo, specificare l'URL del gateway ed i vari parametri da passare in POST.
Quando richiedo il pagamento vengo correttamente indirizzato all'URL di test del gateway dove eseguo la transazione.
Il problema è che al ritorno osCommerce si perde la sessione ed invece di completare correttamente la procedura checkout_process.php vengo rediretto alla pagina di login.
Avete qualche idea del perchè?
Grazie per i suggerimenti
saluti
Massimiliano
Riporto alcuni parametri della configurazione Locale:
EasyPHP 1.7
***************** Configure.php ********************
  define('HTTP_SERVER', 'http://localhost'); 
  define('HTTPS_SERVER', ''); 
  define('ENABLE_SSL', false); 
  define('HTTP_COOKIE_DOMAIN', 'localhost');
  define('HTTPS_COOKIE_DOMAIN', '');
  define('HTTP_COOKIE_PATH', '/opencomm_std/catalog/');
  define('HTTPS_COOKIE_PATH', '');
  define('DIR_WS_HTTP_CATALOG', '/opencomm_std/catalog/');
  define('DIR_WS_HTTPS_CATALOG', '');
  define('DIR_WS_IMAGES', 'images/');
  define('DIR_WS_ICONS', DIR_WS_IMAGES . 'icons/');
  define('DIR_WS_INCLUDES', 'includes/');
  define('DIR_WS_BOXES', DIR_WS_INCLUDES . 'boxes/');
  define('DIR_WS_FUNCTIONS', DIR_WS_INCLUDES . 'functions/');
  define('DIR_WS_CLASSES', DIR_WS_INCLUDES . 'classes/');
  define('DIR_WS_MODULES', DIR_WS_INCLUDES . 'modules/');
  define('DIR_WS_LANGUAGES', DIR_WS_INCLUDES . 'languages/');
  define('DIR_WS_DOWNLOAD_PUBLIC', 'pub/');
  define('DIR_FS_CATALOG', 'c:/programmi/easyphp1-7/www/opencomm_std/catalog/');
  define('DIR_FS_DOWNLOAD', DIR_FS_CATALOG . 'download/');
  define('DIR_FS_DOWNLOAD_PUBLIC', DIR_FS_CATALOG . 'pub/');
// define our database connection
  define('DB_SERVER', 'localhost'); 
  define('DB_SERVER_USERNAME', 'root');
  define('DB_SERVER_PASSWORD', '');
  define('DB_DATABASE', 'opencomm_std');
  define('USE_PCONNECT', 'false'); // use persistent connections?
  define('STORE_SESSIONS', 'mysql'); 
****************** BancoDesio.php ************************** 
<?php
/*
  osCommerce, Open Source E-Commerce Solutions
  http://www.oscommerce.com
  Copyright (c) 2003 osCommerce
  Released under the GNU General Public License
 
*/
class BancoDesio {
    	var $code, $title, $description, $enabled;
	var $alias; 	// insegna del negozio
    	var $importo;	// importo da autorizzare al pagamento(formato XXXXYY 
			// dove XXXX parte intera e YY parte decimale di 2 digit
			// senza virgole o punti)
	var $divisa;	// divisa del pagamento costante = "EUR"
	var $codTrans;	// codice univoco di identificazione del pagamento (min
			// 2 char max 30 char) usare data+order_id
	var $mail;	// indirizzo email dell'aquirente al quale inviare
			// l'esito del pagamento (facoltativo)
	var $url;	// url di ritorno a cui inviare la risposta con il
			// risultato della transazione
	var $session_id;// identificativo di sessione (facoltativo)
	var $mac;	// Message Code Authentication (facoltativo)
		
// class constructor
    function BancoDesio() {
      global $order;
      
      $this->code = 'BancoDesio';
      $this->title = MODULE_PAYMENT_BANCO_DESIO_TEXT_TITLE;
      $this->description = MODULE_PAYMENT_BANCO_DESIO_TEXT_DESCRIPTION;
      $this->sort_order = MODULE_PAYMENT_BANCO_DESIO_SORT_ORDER;
      $this->enabled = ((MODULE_PAYMENT_BANCO_DESIO_STATUS == 'Si') ? true : false);
      if ((int)MODULE_PAYMENT_BANCO_DESIO_ORDER_STATUS_ID > 0) {
        $this->order_status = MODULE_PAYMENT_BANCO_DESIO_ORDER_STATUS_ID;
      }
      if (is_object($order)) $this->update_status();
		
	$this->form_action_url = 'https://pay4c.cilme.it/webapp/RELEASE1/ ... herServlet';
    }
// class methods
    function update_status() {
    	// Disabilita il modulo se non è abilitato per la zona di riferimento o 	
	// per altre ragioni a livello di runtime
    	
    }  
    
    function javascript_validation() {
    	// returns a string of java code that is used to validate the data on the 	
	// checkout_payment page.
    	// Non usato
      return false;
    }
    function selection() {
    	// returns an array of fields needed for that payment module (e.g. credit card number).
      	return array('id' => $this->code,'module' => $this->title);
    }
    function pre_confirmation_check() {
    	//checks if the supplied fields are valid (e.g. credit card is at least 13 numerals).
	// Non usato
      	return false;
    }
    function confirmation() {
    	// returns the info to be displayed on the checkout_confirmation page.
	// Non usato
      	return false;
    }
    function process_button() {
    	// Usato per passare una stinga HTML che conterrà gli Input Field nascosti da passare 
    	// con metodo POST all'URL del gateway bancario
      	global $order, $currencies, $currency, $customer_id, $languages_id;
      
      	//CAMPI OBBLIGATORI 
      	$alias = MODULE_PAYMENT_BANCO_DESIO_ID;
     	$divisa='EUR';
      
      	// verificare che la valuta predefinita sia euro		
     	$importo = $order->info['total'];
			
      	//id da dare alla transazione... serve per tenere traccia della 		
	//transazione e verrà scritto sul db    
	$codTrans = $customer_id . '-' . time();   
		          
      	// Dati utente
      	$mail = trim($order->customer['email_address']);
     
      	// URL di ritorno in osCommerce 
      	$url='http://localhost/opencomm_std/catalog/c ... rocess.php';
      
      	// viene passata l'id di sessione che consente poi di recuperare i valori 	// sotto:	     
	$session_id = tep_session_id();
	
	// MAC (verificare con Banco Desio disponibilità funzione PHP per creare 	// il codice MAC)
	$mac = 'qwerty';
	
	$process_button_string = tep_draw_hidden_field('alias', $alias).							tep_draw_hidden_field('importo', $importo).
		tep_draw_hidden_field('divisa', $divisa).
		tep_draw_hidden_field('codTrans', $codTrans).
		tep_draw_hidden_field('mail', $mail).
		tep_draw_hidden_field('url', tep_href_link(FILENAME_CHECKOUT_PROCESS ,
 			'', 'NONSSL', true)).
		tep_draw_hidden_field('session_id', $session_id).
		tep_draw_hidden_field('mac', $mac);
																
      return $process_button_string;
    }
  function before_process() {
	// Inserire logica di pre-inserimento nel DB di un ordine
	
    }
  function after_process() {
      global $order, $insert_id, $customer_id;
      
      // Inserire logica di post inserimento di un ordine nel DB   
      // Salvo nel database i parametri della transazione
      
   }
  function output_error() {
      return false;
  }
  function check() {
    	// Funzionalità di controllo dello stato del presente modulo di pagamento.
      if (!isset($this->_check)) {
        $check_query = tep_db_query("select configuration_value from " .TABLE_CONFIGURATION .
	" where configuration_key ='MODULE_PAYMENT_BANCO_DESIO_STATUS'");
        $this->_check = tep_db_num_rows($check_query);
      }
      return $this->_check;
    }
  function install() {
	// Funzione di installazione
  }
  function remove() {
  	// Funzione di rimozione del moduloi   
  }
?>
			
			
									
						
										
						Sviluppo Modulo Pagamento - Errore di sessione
Moderatore: mod Generali
- 
				maxlazzari
- membro Junior 
- Messaggi: 7
- Iscritto il: 28/04/2004, 0:00
- Località: ITA