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
-
- membro Junior
- Messaggi: 7
- Iscritto il: 28/04/2004, 0:00
- Località: ITA