[contribution] BankPass
Moderatore: mod Generali
configurare bankpass
A breve attiverò il mio e-commerce, creato grazie all'applicativo free di Oscommerce; le mie modalità di pagamento saranno il bonifico bancario, ed il pagamento con la carta di credito; la mia banca di appoggio sarà la Unicredit Banca.
Ho già scaricato dal link www.starfarm.it/oscommerce/bankpass-1.1.zip i nuovi moduli php da aggiungere. In test funziona.
A breve la banca mi darà il mio codice e la password per gestire il backoffice del bankPass.
Volevo sapere da voi, che cosa devo modificare nelle pagine php nuove? Ho visto che nel modulo --> bankpass/bankpass-1.1/catalog/includes/modules/payement/bankpass.php, vi sono scritti dentro i codici di test.
In specifico le seguenti righe:
if ((int)MODULE_PAYMENT_BANKPASS_ORDER_STATUS_ID > 0) {
$this->order_status = MODULE_PAYMENT_BANKPASS_ORDER_STATUS_ID;
}
if (is_object($order)) $this->update_status();
if($this->production) {
$this->form_action_url = 'https://sis-bankpass.ssb.it/bankpass/ma ... AGE=MASTER';
} else {
$this->crn = '010500000000001';
$this->chiave_avvio = 'rAPu5Nto2kv76B2cPJjWhADuwjACYLELtAo3AEAYUymbkqADjA';
$this->chiave_esito = 'EAAYYXC3LcEj8D3uq7kREiAE9vxgFaCbpSLZqjAzA8Dx7iJrVP';
$this->form_action_url = 'http://sis-test-bankpass.ssb.it/bankpas ... AGE=MASTER';
}
}
Devo cancellare o commentare quelle righe oppure devo modificare quei codici con i miei nuovi?
Grazie mille
Emma
Ho già scaricato dal link www.starfarm.it/oscommerce/bankpass-1.1.zip i nuovi moduli php da aggiungere. In test funziona.
A breve la banca mi darà il mio codice e la password per gestire il backoffice del bankPass.
Volevo sapere da voi, che cosa devo modificare nelle pagine php nuove? Ho visto che nel modulo --> bankpass/bankpass-1.1/catalog/includes/modules/payement/bankpass.php, vi sono scritti dentro i codici di test.
In specifico le seguenti righe:
if ((int)MODULE_PAYMENT_BANKPASS_ORDER_STATUS_ID > 0) {
$this->order_status = MODULE_PAYMENT_BANKPASS_ORDER_STATUS_ID;
}
if (is_object($order)) $this->update_status();
if($this->production) {
$this->form_action_url = 'https://sis-bankpass.ssb.it/bankpass/ma ... AGE=MASTER';
} else {
$this->crn = '010500000000001';
$this->chiave_avvio = 'rAPu5Nto2kv76B2cPJjWhADuwjACYLELtAo3AEAYUymbkqADjA';
$this->chiave_esito = 'EAAYYXC3LcEj8D3uq7kREiAE9vxgFaCbpSLZqjAzA8Dx7iJrVP';
$this->form_action_url = 'http://sis-test-bankpass.ssb.it/bankpas ... AGE=MASTER';
}
}
Devo cancellare o commentare quelle righe oppure devo modificare quei codici con i miei nuovi?
Grazie mille
Emma
Emma
No non è necessario cancellarli.
Dal pannello di amministrazione del modulo puo selezionare l'utilizzo del modulo in modalità test o in modalità produzione.
quando selezioni test vengono usati i codici da te citati (che tra l'altro coincidono con quelli che ti avrà inviato SSB, sono uguali per tutti). Quando selezioni modalità produzione vengono invece usati i codici ti fornirà la banca e che dovrai inserire nel pannello di amministrazione.
Ciao.
Manetta.
http://ww.paddocknetwork.com
Dal pannello di amministrazione del modulo puo selezionare l'utilizzo del modulo in modalità test o in modalità produzione.
quando selezioni test vengono usati i codici da te citati (che tra l'altro coincidono con quelli che ti avrà inviato SSB, sono uguali per tutti). Quando selezioni modalità produzione vengono invece usati i codici ti fornirà la banca e che dovrai inserire nel pannello di amministrazione.
Ciao.
Manetta.
http://ww.paddocknetwork.com
Configurazione Bankpass
Scusate la mia insistenza, ma sono nelle canne; allora come ho già scritto il modulo di bankpass di test funziona sia dal lato esercente che dal lato acquirente. Vorrei sapere che cosa devo mettere o modificare quando configurerò con i dati veri della Unicredit, quando vado nell'amministrazione del'Oscommerce e seleziono "Modulo di pagamento"--> banpass--> e clicco sul link del "PANNELLO DI CONTROLLO BANKPASS".
Non so se è cambia di molto da quello della Banca Sella. Infatti nell'altro mio negozio di e - commerce creato grazie all'osccomerce, quando sono entrata nel pannello di controllo della Banca Sella, ho duvuto inserire 2 link, il link per indirizzarmi quando è andato tutto ok e qando è andato male.
Nono ho trovato un manuale sul back office di bank pass. QUALCUNO DI VOI HA GIA' CONFIGURATO IL BANKPASS WEB? Mi sa aiutare? O dove trovare un manuale.Da quello di test non si campisce molto e poi non si possono cambiare i dati del negozio di test.
GRAZIE MILLE
Non so se è cambia di molto da quello della Banca Sella. Infatti nell'altro mio negozio di e - commerce creato grazie all'osccomerce, quando sono entrata nel pannello di controllo della Banca Sella, ho duvuto inserire 2 link, il link per indirizzarmi quando è andato tutto ok e qando è andato male.
Nono ho trovato un manuale sul back office di bank pass. QUALCUNO DI VOI HA GIA' CONFIGURATO IL BANKPASS WEB? Mi sa aiutare? O dove trovare un manuale.Da quello di test non si campisce molto e poi non si possono cambiare i dati del negozio di test.
GRAZIE MILLE
Emma
I link sono già a posto così nel modulo.
Devi inserire nel pannello di controllo i 3 codici che la banca ti invierà.
CRN: Codice Riconoscimento negozio
Chiave avvio: codice che serve a creare il MAC in andata
Chiave esito: codice che serve a decifrare il MAC in rientro.
That's it.
Non devi fare altro.
Anzi no, scusa. Devi scegliere la modalità di autorizzazione e contabilizzazione....ma questo dipende da te e da ciò che vendi (pag 22 del documento tecnico per l'integrazione del servizio).
Ciao.
manetta
http://www.paddocknetwork.com
Devi inserire nel pannello di controllo i 3 codici che la banca ti invierà.
CRN: Codice Riconoscimento negozio
Chiave avvio: codice che serve a creare il MAC in andata
Chiave esito: codice che serve a decifrare il MAC in rientro.
That's it.
Non devi fare altro.
Anzi no, scusa. Devi scegliere la modalità di autorizzazione e contabilizzazione....ma questo dipende da te e da ciò che vendi (pag 22 del documento tecnico per l'integrazione del servizio).
Ciao.
manetta
http://www.paddocknetwork.com
Testate modifiche di max8 al modulo bankpass
Provato, e trovati alcuni problemi.max8 ha scritto:Inutile dire PROVIAMOLO PRIMA !!!!
Dopo la conferma di ordine il carrello non viene svuotato, cosa abbastanza noiosa.
Non ricevo nessuna mail di conferma d'ordine dal negozio, solo bankpass mi invia una mail.
Per il resto vedo l'ordine dalla parte admin.
Salve a tutti...
sono un nuovo membro del forum ed avevo alcune domande da provi in merito alla contribution bankpass v1.1.
Premetto che ho attivato il sistema BankPassWeb con la Seceti e mi hanno inviato tutto il materiale per fare i test...
..e adesso ... cosa devo fare???
La seceti mi ha inviato le chiavi per i test nelle 3 modalità disponibili ( integrazione di tipo "full", "offline" e "light").
Da come mi sembra di capire (MA CORREGGETEMI SE SBAGLIO) io dovrei usare con questa contribution la versione "light"???
E se si il "Codice Riconoscimento Negozio (CRN)" chiesto a cosa corrisponde???
Scusate se pongo troppe domande tutte insieme ma vorrei testare il tutto senza tralasciare niente...
grazie per la disponibilità e... cordiali saluti a tutti
sono un nuovo membro del forum ed avevo alcune domande da provi in merito alla contribution bankpass v1.1.
Premetto che ho attivato il sistema BankPassWeb con la Seceti e mi hanno inviato tutto il materiale per fare i test...
..e adesso ... cosa devo fare???
La seceti mi ha inviato le chiavi per i test nelle 3 modalità disponibili ( integrazione di tipo "full", "offline" e "light").
Da come mi sembra di capire (MA CORREGGETEMI SE SBAGLIO) io dovrei usare con questa contribution la versione "light"???
E se si il "Codice Riconoscimento Negozio (CRN)" chiesto a cosa corrisponde???
Scusate se pongo troppe domande tutte insieme ma vorrei testare il tutto senza tralasciare niente...
grazie per la disponibilità e... cordiali saluti a tutti
scusate ma nessuno può aiutarmi su questo argomento???alexprod ha scritto:Salve a tutti...
sono un nuovo membro del forum ed avevo alcune domande da provi in merito alla contribution bankpass v1.1.
Premetto che ho attivato il sistema BankPassWeb con la Seceti e mi hanno inviato tutto il materiale per fare i test...
..e adesso ... cosa devo fare???
La seceti mi ha inviato le chiavi per i test nelle 3 modalità disponibili ( integrazione di tipo "full", "offline" e "light").
Da come mi sembra di capire (MA CORREGGETEMI SE SBAGLIO) io dovrei usare con questa contribution la versione "light"???
E se si il "Codice Riconoscimento Negozio (CRN)" chiesto a cosa corrisponde???
Scusate se pongo troppe domande tutte insieme ma vorrei testare il tutto senza tralasciare niente...
grazie per la disponibilità e... cordiali saluti a tutti
PLEASE HELP!!!
Ciao Pippo..pippo010 ha scritto:Ciao,
sinceramente non saprei dirti che cosa sia la versione light,
io ho attivato il bakpass travite la popolare di verona - Sna geminiano e San prospero, ma di codici ne hanno consegnati solo due:
1) codi per i test
2) codici esercente
Ciauz
innanzitutto grazie per la risposta...
poi volevo sapere che, sempre se è possibile, che codici ti hanno dato per i test. Li ho ricevuti anch'io... e mi piacerebbe confrontarli con i tuoi...
grazie 1000 in anticipo ...
Ciao a tutti,max8 ha scritto:Come promesso ecco il codice...Codice: Seleziona tutto
<?php /* osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License Credits to: Marco Spizzichino Starfarm Internet Communications srl <marco@starfarm.it> Modificato da Massimo Ottolini Otz ufotto@tin.it Max8 membro di www.oscommerceitalia.com Versione BETA 0.1 */ class bankpass { var $code, $title, $description, $enabled; // class constructor function bankpass() { global $order; $this->code = 'bankpass'; $this->title = MODULE_PAYMENT_BANKPASS_TEXT_TITLE; $this->description = MODULE_PAYMENT_BANKPASS_TEXT_DESCRIPTION; $this->sort_order = MODULE_PAYMENT_BANKPASS_SORT_ORDER; $this->enabled = ((MODULE_PAYMENT_BANKPASS_STATUS == 'Si') ? true : false); $this->production = ((MODULE_PAYMENT_BANKPASS_PRODUCTION == 'Si') ? true : false); $this->crn = MODULE_PAYMENT_BANKPASS_ID; $this->tcontab = ((MODULE_PAYMENT_BANKPASS_TCONTAB == 'Immediata') ? 'I' : 'D'); $this->tautor = ((MODULE_PAYMENT_BANKPASS_TAUTOR == 'Immediata') ? 'I' : 'D'); $this->chiave_avvio = MODULE_PAYMENT_BANKPASS_AVVIO; $this->chiave_esito = MODULE_PAYMENT_BANKPASS_ESITO; if ((int)MODULE_PAYMENT_BANKPASS_ORDER_STATUS_ID > 0) { $this->order_status = MODULE_PAYMENT_BANKPASS_ORDER_STATUS_ID; } if (is_object($order)) $this->update_status(); if($this->production) { $this->form_action_url = 'https://sis-bankpass.ssb.it/bankpass/master/main?PAGE=MASTER'; } else { $this->crn = '010500000000001'; $this->chiave_avvio = 'rAPu5Nto2kv76B2cPJjWhADuwjACYLELtAo3AEAYUymbkqADjA'; $this->chiave_esito = 'EAAYYXC3LcEj8D3uq7kREiAE9vxgFaCbpSLZqjAzA8Dx7iJrVP'; $this->form_action_url = 'http://sis-test-bankpass.ssb.it/bankpass/master/main?PAGE=MASTER'; } } // class methods function update_status() { global $order, $shipping ; //modifica if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_BANKPASS_ZONE > 0) ) { $check_flag = false; $check_query = tep_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_BANKPASS_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id"); while ($check = tep_db_fetch_array($check_query)) { if ($check['zone_id'] < 1) { $check_flag = true; break; } elseif ($check['zone_id'] == $order->billing['zone_id']) { $check_flag = true; break; } } if ($check_flag == false) { $this->enabled = false; } } } function javascript_validation() { return false; } function selection() { return array('id' => $this->code, 'module' => $this->title); } function pre_confirmation_check() { return false; } function confirmation() { /*modifica OTZ Aggiunge l'ordine nella tabella ORDERS prima di passarlo a BANKPASS Per il suo funzionamento AGGIUNGETE all'interno della Tabella orders_status del vostro DATABASE una voce per specificare lo stato n4 naturalmente per tutte le lingue Potrebbe essere AttesaBankPass o simile. Se è già presente una voce 4 e non volete usare quella create una nuova voce sempre per tutte le lingue e modificate la riga 190 da 'orders_status' => '4' in 'orders_status' => 'numero nuova voce' */ global $cartID, $Bankpass_TEMP, $customer_id, $languages_id, $order, $order_total_modules; $myshoptransactionID = $customer_id . '-' . date("YmdHis"); //nomesito . '-' . tolto if (tep_session_is_registered('cartID')) { $insert_order = false; if (tep_session_is_registered('Bankpass_TEMP')) { $order_id = substr($Bankpass_TEMP, strpos($Bankpass_TEMP, '-')+1); $curr_check = tep_db_query("select currency from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'"); $curr = tep_db_fetch_array($curr_check); if ( ($curr['currency'] != $order->info['currency']) || ($cartID != substr($Bankpass_TEMP, 0, strlen($cartID))) ) { $check_query = tep_db_query('select orders_id from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '" limit 1'); if (tep_db_num_rows($check_query) < 1) { tep_db_query('delete from ' . TABLE_ORDERS . ' where orders_id = "' . (int)$order_id . '"'); tep_db_query('delete from ' . TABLE_ORDERS_TOTAL . ' where orders_id = "' . (int)$order_id . '"'); tep_db_query('delete from ' . TABLE_ORDERS_STATUS_HISTORY . ' where orders_id = "' . (int)$order_id . '"'); tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS . ' where orders_id = "' . (int)$order_id . '"'); tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . ' where orders_id = "' . (int)$order_id . '"'); tep_db_query('delete from ' . TABLE_ORDERS_PRODUCTS_DOWNLOAD . ' where orders_id = "' . (int)$order_id . '"'); } $insert_order = true; } } else { $insert_order = true; } if ($insert_order == true) { $order_totals = array(); if (is_array($order_total_modules->modules)) { reset($order_total_modules->modules); while (list(, $value) = each($order_total_modules->modules)) { $class = substr($value, 0, strrpos($value, '.')); if ($GLOBALS[$class]->enabled) { for ($i=0, $n=sizeof($GLOBALS[$class]->output); $i<$n; $i++) { if (tep_not_null($GLOBALS[$class]->output[$i]['title']) && tep_not_null($GLOBALS[$class]->output[$i]['text'])) { $order_totals[] = array('code' => $GLOBALS[$class]->code, 'title' => $GLOBALS[$class]->output[$i]['title'], 'text' => $GLOBALS[$class]->output[$i]['text'], 'value' => $GLOBALS[$class]->output[$i]['value'], 'sort_order' => $GLOBALS[$class]->sort_order); } } } } } $sql_data_array = array('customers_id' => $customer_id, 'customers_name' => $order->customer['firstname'] . ' ' . $order->customer['lastname'], 'customers_company' => $order->customer['company'], 'customers_street_address' => $order->customer['street_address'], 'customers_suburb' => $order->customer['suburb'], 'customers_city' => $order->customer['city'], 'customers_postcode' => $order->customer['postcode'], 'customers_state' => $order->customer['state'], 'customers_country' => $order->customer['country']['title'], 'customers_telephone' => $order->customer['telephone'], 'customers_email_address' => $order->customer['email_address'], 'customers_address_format_id' => $order->customer['format_id'], 'delivery_name' => $order->delivery['firstname'] . ' ' . $order->delivery['lastname'], 'delivery_company' => $order->delivery['company'], 'delivery_street_address' => $order->delivery['street_address'], 'delivery_suburb' => $order->delivery['suburb'], 'delivery_city' => $order->delivery['city'], 'delivery_postcode' => $order->delivery['postcode'], 'delivery_state' => $order->delivery['state'], 'delivery_country' => $order->delivery['country']['title'], 'delivery_address_format_id' => $order->delivery['format_id'], 'billing_name' => $order->billing['firstname'] . ' ' . $order->billing['lastname'], 'billing_company' => $order->billing['company'], 'billing_street_address' => $order->billing['street_address'], 'billing_suburb' => $order->billing['suburb'], 'billing_city' => $order->billing['city'], 'billing_postcode' => $order->billing['postcode'], 'billing_state' => $order->billing['state'], 'billing_country' => $order->billing['country']['title'], 'billing_address_format_id' => $order->billing['format_id'], 'payment_method' => $order->info['payment_method'], 'cc_type' => $order->info['cc_type'], 'cc_owner' => $order->info['cc_owner'], 'cc_number' => $order->info['cc_number'], 'cc_expires' => $order->info['cc_expires'], 'date_purchased' => 'now()', 'orders_status' => '4', 'currency' => $order->info['currency'], 'currency_value' => $order->info['currency_value']); tep_db_perform(TABLE_ORDERS, $sql_data_array); $insert_id = tep_db_insert_id(); for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) { $sql_data_array = array('orders_id' => $insert_id, 'title' => $order_totals[$i]['title'], 'text' => $order_totals[$i]['text'], 'value' => $order_totals[$i]['value'], 'class' => $order_totals[$i]['code'], 'sort_order' => $order_totals[$i]['sort_order']); tep_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array); $totaleordine=$order_totals[$i]['value']; } for ($i=0, $n=sizeof($order->products); $i<$n; $i++) { $sql_data_array = array('orders_id' => $insert_id, 'products_id' => tep_get_prid($order->products[$i]['id']), 'products_model' => $order->products[$i]['model'], 'products_name' => $order->products[$i]['name'], 'products_price' => $order->products[$i]['price'], 'final_price' => $order->products[$i]['final_price'], 'products_tax' => $order->products[$i]['tax'], 'products_quantity' => $order->products[$i]['qty']); tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array); $order_products_id = tep_db_insert_id(); $attributes_exist = '0'; if (isset($order->products[$i]['attributes'])) { $attributes_exist = '1'; for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) { if (DOWNLOAD_ENABLED == 'true') { $attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad on pa.products_attributes_id=pad.products_attributes_id where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"; $attributes = tep_db_query($attributes_query); } else { $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"); } $attributes_values = tep_db_fetch_array($attributes); $sql_data_array = array('orders_id' => $insert_id, 'orders_products_id' => $order_products_id, 'products_options' => $attributes_values['products_options_name'], 'products_options_values' => $attributes_values['products_options_values_name'], 'options_values_price' => $attributes_values['options_values_price'], 'price_prefix' => $attributes_values['price_prefix']); tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array); if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) { $sql_data_array = array('orders_id' => $insert_id, 'orders_products_id' => $order_products_id, 'orders_products_filename' => $attributes_values['products_attributes_filename'], 'download_maxdays' => $attributes_values['products_attributes_maxdays'], 'download_count' => $attributes_values['products_attributes_maxcount']); tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array); } } } } tep_session_register('Bankpass_TEMP'); $Bankpass_TEMP = $cartID . '-' . $insert_id; } } //fine modifica OTZ return false; } function process_button() { global $order, $currencies, $currency, $customer_id, $languages_id; // Definizione dei campi per il form di Bankpass $myshoplogin = $this->crn; if (MODULE_PAYMENT_BANKPASS_CURRENCY == 'Valuta Selezionata') { $osc_currency = $currency; } else { $osc_currency = substr(MODULE_PAYMENT_BANKPASS_CURRENCY, 5); } if (!in_array($osc_currency, array('EUR', 'GBP', 'USD'))) { $osc_currency = 'EUR'; } // Conversion of currencies in ISO codes // EUR -> 978, GBP -> 2, USD -> 1 switch ($osc_currency) { case 'EUR': $mycurrency = '978'; break; case 'GBP': $mycurrency = '2'; break; case 'USD': $mycurrency = '1'; break; default: $mycurrency = '978'; } // verificare che la valuta predefinita siano euro $myamount = round($order->info['total'] * $currencies->get_value($osc_currency) * 100); //id da dare alla transazione... serve per tenere traccia della transazione e verrà scritto sul db $myshoptransactionID = $customer_id . '-' . date("YmdHis"); //nomesito . '-' . tolto //$myshoptransactionID = $customer_id . '-' . time(); // Dati utente $mybuyername = $order->customer['firstname'] . ' ' . $order->customer['lastname']; $mybuyeremail = trim($order->customer['email_address']); // Lingua di risposta del gateway if(isset($languages_id) && !empty($languages_id)) { $lang_query = tep_db_query("SELECT code FROM " . TABLE_LANGUAGES . " WHERE languages_id = " . $languages_id); $lang = tep_db_fetch_array($lang_query); switch ($lang['code']) { case "it": $mylanguage= "ITA"; break; case "en": $mylanguage= "EN"; break; default: $mylanguage= "ITA"; } } else { $mylanguage= "ITA"; } // viene passata l'id di sessione che consente poi di recuperare i valori sotto: $mycustominfo = '?' . tep_session_name() . '=' . tep_session_id(); // Calcola il MAC per i dati che saranno spediti $str = 'NUMORD=' . $myshoptransactionID . '&' . 'IDNEGOZIO=' . $myshoplogin . '&' . 'IMPORTO=' . $myamount . '&' . 'VALUTA=' . $mycurrency . '&' . 'TCONTAB=' . $this->tcontab . '&' . 'TAUTOR=' . $this->tautor . '&' . $this->chiave_avvio; $MAC = md5($str); $process_button_string = tep_draw_hidden_field('IMPORTO', $myamount) . tep_draw_hidden_field('VALUTA', $mycurrency) . tep_draw_hidden_field('NUMORD', $myshoptransactionID) . tep_draw_hidden_field('IDNEGOZIO', $myshoplogin) . tep_draw_hidden_field('URLBACK', HTTP_SERVER . DIR_WS_HTTP_CATALOG . 'checkout_process.php' . $mycustominfo) . tep_draw_hidden_field('URLDONE', HTTP_SERVER . DIR_WS_HTTP_CATALOG . 'checkout_success.php' . $mycustominfo) . tep_draw_hidden_field('URLMS', HTTP_SERVER . DIR_WS_HTTP_CATALOG . 'checkout_process.php'. $mycustominfo) . tep_draw_hidden_field('TCONTAB', $this->tcontab) . tep_draw_hidden_field('TAUTOR', $this->tautor) . tep_draw_hidden_field('MAC', $MAC) . tep_draw_hidden_field('LINGUA', $mylanguage) . tep_draw_hidden_field('EMAIL', $mybuyeremail); /* righe 361 e 362 ora puntano a file diversi : esito positivo (premendo il famoso bottone OK) ora punta checkout_success.php Esito transazione positiva ora punta a checkout_process.php e non più a Bankpass_ms.php */ return $process_button_string; } function before_process() { /* Inserisco l'esito della transazione di bankPass all'interno della tabella Orders_bankpass, modifico lo stato dell'ordine dal precedente 4 (da AttesaBankPass) a quello specificato nel modulo Bankpass nel pannello amminstrativo del sito */ // Controlla che il MAC per i dati ricevuti sia corretto $str = 'NUMORD=' . $_GET['NUMORD'] . '&' . 'IDNEGOZIO=' . $_GET['IDNEGOZIO'] . '&' . 'AUT=' . $_GET['AUT'] . '&' . 'IMPORTO=' . $_GET['IMPORTO'] . '&' . 'VALUTA=' . $_GET['VALUTA'] . '&' . 'IDTRANS=' . $_GET['IDTRANS'] . '&' . 'TCONTAB=' . $_GET['TCONTAB'] . '&' . 'TAUTOR=' . $_GET['TAUTOR'] . '&' . 'ESITO=' . $_GET['ESITO'] . '&' . $this->chiave_esito; $checkMAC = md5($str); // Il MAC non e' corretto. Torniamo alla pagina per il pagamento if(strtolower($_GET['MAC']) != strtolower($checkMAC)) { Header('Location: checkout_payment.php'); tep_exit(); } global $customer_id, $order, $sendto, $billto, $payment, $currencies, $cart, $Bankpass_TEMP; global $$payment; include(DIR_WS_CLASSES . 'order_total.php'); $order_total_modules = new order_total; $order_totals = $order_total_modules->process(); $order_id = substr($Bankpass_TEMP, strpos($Bankpass_TEMP, '-')+1); //modifico lo stato dell'ordine tep_db_query("UPDATE orders SET orders_status = ".$this->sort_order." WHERE orders_id = '" . $order_id . "'"); //aggiorno la tabella orders_bankpass $check_query = tep_db_query("select * FROM orders_bankpass WHERE shop_transaction_id= '" . $myshoptransactionID . "'"); $check = tep_db_num_rows($check_query); if($check > 0) { tep_db_query("UPDATE orders_bankpass SET client_status = 1, customer_id = " . $customer_id . ", orders_id = " . $insert_id . " WHERE shop_transaction_id = '" . $myshoptransactionID ."'"); } else { tep_db_query("INSERT INTO orders_bankpass (bank_transaction_id, shop_transaction_id, authorization_code, customer_id, orders_id, amount, client_status, date) VALUES ('" . $_GET['IDTRANS'] . "', '" . $_GET['NUMORD'] . "','" . $_GET['AUT'] . "', " . $customer_id . "," . $order_id . ", " . $_GET['IMPORTO']/100 . ",1," . time() . ")"); //VALUES ('" . $_GET['IDTRANS'] . "', '" . $_GET['NUMORD'] . "','" . $_GET['AUT'] . "', " . $_GET['IMPORTO']/100 . ",1," . time() . ")"); } //otz $sql_data_array = array('orders_id' => $order_id, 'orders_status_id' => $order->info['order_status'], 'date_added' => 'now()', 'customer_notified' => (SEND_EMAILS == 'true') ? '1' : '0', 'comments' => $order->info['comments']); tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array); // initialized for the email confirmation $products_ordered = ''; $subtotal = 0; $total_tax = 0; for ($i=0, $n=sizeof($order->products); $i<$n; $i++) { // Stock Update - Joao Correia if (STOCK_LIMITED == 'true') { if (DOWNLOAD_ENABLED == 'true') { $stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES . " pa ON p.products_id=pa.products_id LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad ON pa.products_attributes_id=pad.products_attributes_id WHERE p.products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"; // Will work with only one option for downloadable products // otherwise, we have to build the query dynamically with a loop $products_attributes = $order->products[$i]['attributes']; if (is_array($products_attributes)) { $stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'"; } $stock_query = tep_db_query($stock_query_raw); } else { $stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); } if (tep_db_num_rows($stock_query) > 0) { $stock_values = tep_db_fetch_array($stock_query); // do not decrement quantities if products_attributes_filename exists if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) { $stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty']; } else { $stock_left = $stock_values['products_quantity']; } tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) { tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); } } } // Update products_ordered (for bestsellers list) tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); //------insert customer choosen option to order-------- $attributes_exist = '0'; $products_ordered_attributes = ''; if (isset($order->products[$i]['attributes'])) { $attributes_exist = '1'; for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) { if (DOWNLOAD_ENABLED == 'true') { $attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad on pa.products_attributes_id=pad.products_attributes_id where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"; $attributes = tep_db_query($attributes_query); } else { $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"); } $attributes_values = tep_db_fetch_array($attributes); $products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name']; } } //------insert customer choosen option eof ---- $total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']); $total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty']; $total_cost += $total_products_price; $products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "\n"; } // lets start with the email confirmation $email_order = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $order_id . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $order_id, 'SSL', false) . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n"; if ($order->info['comments']) { $email_order .= tep_db_output($order->info['comments']) . "\n\n"; } $email_order .= EMAIL_TEXT_PRODUCTS . "\n" . EMAIL_SEPARATOR . "\n" . $products_ordered . EMAIL_SEPARATOR . "\n"; for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) { $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n"; } if ($order->content_type != 'virtual') { $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" . EMAIL_SEPARATOR . "\n" . tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n"; } $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" . EMAIL_SEPARATOR . "\n" . tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n"; if (is_object($$payment)) { $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" . EMAIL_SEPARATOR . "\n"; $payment_class = $$payment; $email_order .= $payment_class->title . "\n\n"; if ($payment_class->email_footer) { $email_order .= $payment_class->email_footer . "\n\n"; } } tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS); // send emails to other people if (SEND_EXTRA_ORDER_EMAILS_TO != '') { tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS); } // load the after_process function from the payment modules $this->after_process(); $cart->reset(true); // unregister session variables used during checkout tep_session_unregister('sendto'); tep_session_unregister('billto'); tep_session_unregister('shipping'); tep_session_unregister('payment'); tep_session_unregister('comments'); tep_session_unregister('Bankpass_TEMP'); tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL')); //fine modifica OTZ } function after_process() { /* modifica OTZ non serve più perchè già fatto global $order, $insert_id, $customer_id; // Salvo nel database i parametri della transazione $check_query = tep_db_query("select * FROM orders_bankpass WHERE bank_transaction_id = '" . $_GET['IDTRANS'] . "'"); $check = tep_db_num_rows($check_query); if($check > 0) { tep_db_query("UPDATE orders_bankpass SET client_status = 1, customer_id = " . $customer_id . ", orders_id = " . $insert_id . " WHERE bank_transaction_id = '" . $_GET['IDTRANS'] ."'"); } else { tep_db_query("INSERT INTO orders_bankpass (bank_transaction_id, shop_transaction_id, authorization_code, customer_id, orders_id, amount, client_status, date) VALUES ('" . $_GET['IDTRANS'] . "', '" . $_GET['NUMORD'] . "','" . $_GET['AUT'] . "', " . $customer_id . "," . $insert_id . ", " . $_GET['IMPORTO']/100 . ",1," . time() . ")"); } */ return false; } function output_error() { return false; } function check() { if (!isset($this->_check)) { $check_query = tep_db_query("select configuration_value from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_BANKPASS_STATUS'"); $this->_check = tep_db_num_rows($check_query); } return $this->_check; } function install() { tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, use_function, set_function, date_added) values ('Valid Shipping Methods', 'MODULE_PAYMENT_BANKPASS_SHIPPING_METHODS', '', 'Select valid shipping methods for this payment module.', '6', '0', 'tep_get_shipping_modules_title', 'tep_cfg_valid_shipping_modules(', now())"); tep_db_query("CREATE TABLE IF NOT EXISTS orders_bankpass ( bank_transaction_id varchar(50) NOT NULL default '', shop_transaction_id varchar(50) NOT NULL default '', authorization_code varchar(6) NOT NULL default '', customer_id int(9) NOT NULL default '0', orders_id int(9) NOT NULL default '0', amount decimal(15,4) NOT NULL default '0.0000', server_status int(1) NOT NULL default '0', client_status int(1) NOT NULL default '0', date int(12) NOT NULL default '0', PRIMARY KEY (bank_transaction_id))"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Abilita Modulo Bankpass', 'MODULE_PAYMENT_BANKPASS_STATUS', 'Si', 'Attivare il sistema di pagamento tramite il gateway bancario di Bankpass?', '6', '1', 'tep_cfg_select_option(array(\'Si\', \'No\'), ', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Modalita\' Produzione', 'MODULE_PAYMENT_BANKPASS_PRODUCTION', 'No', 'Attivare la modalita\' Produzione (Si) o Test (No)? In modalita\' Test il sistema utilizzera\' un CRN e delle chiavi di prova, le informazioni salvate nella configurazione del negozio non verranno utilizzate', '6', '2', 'tep_cfg_select_option(array(\'Si\', \'No\'), ', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Codice Riconoscimento Negozio (CRN)', 'MODULE_PAYMENT_BANKPASS_ID', '010500000000001', 'Identificatore del negozio del merchant assegnato dalla BANCA', '6', '3', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Chiave segreta Avvio', 'MODULE_PAYMENT_BANKPASS_AVVIO', 'rAPu5Nto2kv76B2cPJjWhADuwjACYLELtAo3AEAYUymbkqADjA', 'Chiave segreta Avvio per calcolo MAC', '6', '4', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Chiave segreta Esito', 'MODULE_PAYMENT_BANKPASS_ESITO', 'EAAYYXC3LcEj8D3uq7kREiAE9vxgFaCbpSLZqjAzA8Dx7iJrVP', 'Chiave segreta Esito per calcolo MAC', '6', '5', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Tipo di contabilizzazione', 'MODULE_PAYMENT_BANKPASS_TCONTAB', 'Immediata', 'Tipo di contabilizzazione da utilizzare per questo ordine: Differita o Immediata?', '6', '6', 'tep_cfg_select_option(array(\'Immediata\', \'Differita\'), ', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Tipo di autorizzazione', 'MODULE_PAYMENT_BANKPASS_TAUTOR', 'Immediata', 'Tipo di autorizzazione da utilizzare per questo ordine: Differita o Immediata?', '6', '7', 'tep_cfg_select_option(array(\'Immediata\', \'Differita\'), ', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, date_added) values ('Valuta transazione', 'MODULE_PAYMENT_BANKPASS_CURRENCY', 'Solo EUR', 'La valuta da utilizzare nella transazione. E\' possibile forzare l\'uso della valuta base EUR.', '6', '8', 'tep_cfg_select_option(array(\'Valuta Selezionata\',\'Solo EUR\',\'Solo USD\',\'Solo GBP\'), ', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Ordine visualizzazione.', 'MODULE_PAYMENT_BANKPASS_SORT_ORDER', '0', 'Indicare l\'ordine con il quale questa modalità di pagamento viene proposta all\'utente. 0 è il valore visualizzato per primo.', '6', '9', now())"); tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, set_function, use_function, date_added) values ('Stato ordine dopo pagamento', 'MODULE_PAYMENT_BANKPASS_ORDER_STATUS_ID', '0', 'Definisce quale stato ordine attribuire all\'ordine una volta completato il pagamento.', '6', '10', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', now())"); } function remove() { tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')"); } function keys() { return array( 'MODULE_PAYMENT_BANKPASS_STATUS', 'MODULE_PAYMENT_BANKPASS_ID', 'MODULE_PAYMENT_BANKPASS_AVVIO', 'MODULE_PAYMENT_BANKPASS_ESITO', 'MODULE_PAYMENT_BANKPASS_PRODUCTION', 'MODULE_PAYMENT_BANKPASS_CURRENCY', 'MODULE_PAYMENT_BANKPASS_TCONTAB', 'MODULE_PAYMENT_BANKPASS_TAUTOR', 'MODULE_PAYMENT_BANKPASS_ORDER_STATUS_ID', 'MODULE_PAYMENT_YOURPAYMENTMODULE_SHIPPING_METHODS', 'MODULE_PAYMENT_BANKPASS_SORT_ORDER' ); } // Questa funzione calcola il MAC per la procedura di invio function AvvioMAC() { } } ?>
ecco un piccolo bug trovato nel codice su riportato:
quando viene aggiornato lo stato dell'ordine dopo l'OK di BPW, la variabile orders_status va aggiornata con il valore $this->order_status e non il valore $this->sort_order.
Quindi potete modificare la riga come segue:
tep_db_query("UPDATE orders SET orders_status = ".$this->order_status." WHERE orders_id = '" . $order_id . "'");
a prestooooo
-
- membro Junior
- Messaggi: 11
- Iscritto il: 21/09/2005, 18:24
Operazione negata per carta errata.
salve a tutti/e Ho provato la contrib.. bankapass
ho un problema... non riesco sulla pagina test della banka a concludere
il pagamento .... "Operazione negata per carta errata."
Con sella test la Ccard mi funziona.... con altri siti dove acquisto regolarmente
funziona.., sulla pagina test di bankpass ZERO...
qualche ideea?
Rispetto alle sessioni c'e' un legame tra la perdita del carrelo dopo la transazione e il tipo di session che si usa? file o Db?
ma perche' bankpass non chiede il nome del proprietario della CCard?
lo passa criptato prendendo il nome del cliente OS che acquista?
questo succede solo nell'ambito test?
come interfaccia di inserimento DATI CCard mi sembra troppo scarna e poco chiara e macchinosa
rispetto a sella...
Saluti
Raina
ho un problema... non riesco sulla pagina test della banka a concludere
il pagamento .... "Operazione negata per carta errata."
Con sella test la Ccard mi funziona.... con altri siti dove acquisto regolarmente
funziona.., sulla pagina test di bankpass ZERO...
qualche ideea?
Rispetto alle sessioni c'e' un legame tra la perdita del carrelo dopo la transazione e il tipo di session che si usa? file o Db?
ma perche' bankpass non chiede il nome del proprietario della CCard?
lo passa criptato prendendo il nome del cliente OS che acquista?
questo succede solo nell'ambito test?
come interfaccia di inserimento DATI CCard mi sembra troppo scarna e poco chiara e macchinosa
rispetto a sella...
Saluti
Raina
Re: Operazione negata per carta errata.
Funziona con i codici della carta di test che ti da Bankpass, con carte normali non va...rainafarai ha scritto: non riesco sulla pagina test della banka a concludere
il pagamento .... "Operazione negata per carta errata."
Pero' costa una valanga in menocome interfaccia di inserimento DATI CCard mi sembra troppo scarna e poco chiara e macchinosa
rispetto a sella...
'iao
Sergio
http://www.oscomtemplate.com - E' disponibile il nuovo pacchetto free con forum di supporto
http://www.semilandia.it
http://www.semilandia.it
-
- membro Junior
- Messaggi: 11
- Iscritto il: 21/09/2005, 18:24
Re: Operazione negata per carta errata.
Grazie della risposta Bass ! almeno la smetto di provare a raffica.
si puo' avere uno di questi codici test carta ? o li rilascia BP univoci per ogni esercente che apre un contratto BP?
ce una url sul sito Bp dove prenderli?
Grazie
Raina
Bass ha scritto:
Funziona con i codici della carta di test che ti da Bankpass, con carte normali non va...
si puo' avere uno di questi codici test carta ? o li rilascia BP univoci per ogni esercente che apre un contratto BP?
ce una url sul sito Bp dove prenderli?
Grazie
Raina