Negli ordini dove viene utilizzato questo metodo di pagamento, non vengono registrati il campo della Partita IVA e nemmeno quello del codice fiscale.
Possibile che nessuno si sia mai accorto di questo problema ?
PayPal Express Checkout perde la partita IVA
Moderatore: mod Payment Methods
PayPal Express Checkout perde la partita IVA
Vendita online - Utensili Beta
Re: PayPal Express Checkout perde la partita IVA
qualcuno ha risolto?
-
- membro Baby
- Messaggi: 73
- Iscritto il: 10/09/2008, 23:31
Re: PayPal Express Checkout perde la partita IVA
Ciao
ho avuto questo problema per anni che mi perdesse sia C.F. che P.IVA, poi cercando di risolvere un altro problema ho scoperto che asteriscando una parte di codice il C.F. e P.IVA non se li perde più.
devi editare il filecatalog\ext\modules\payment\paypal\express.php
asterisca tutto questo blocco
e sei a posto, i dati di spedizione vengono presi da Oscommerce e non vengono più sovrascritti con quelli Paypal
Roby
ho avuto questo problema per anni che mi perdesse sia C.F. che P.IVA, poi cercando di risolvere un altro problema ho scoperto che asteriscando una parte di codice il C.F. e P.IVA non se li perde più.
devi editare il filecatalog\ext\modules\payment\paypal\express.php
asterisca tutto questo blocco
Codice: Seleziona tutto
// Roby non sovrascrivo indirizzi con quelli Paypal
/* $sendto = array('firstname' => substr($response_array['SHIPTONAME'], 0, strpos($response_array['SHIPTONAME'], ' ')),
'lastname' => substr($response_array['SHIPTONAME'], strpos($response_array['SHIPTONAME'], ' ')+1),
'company' => '',
'street_address' => $response_array['SHIPTOSTREET'],
'suburb' => '',
'postcode' => $response_array['SHIPTOZIP'],
'city' => $response_array['SHIPTOCITY'],
'zone_id' => $zone_id,
'zone_name' => $zone_name,
'country_id' => $country['countries_id'],
'country_name' => $country['countries_name'],
'country_iso_code_2' => $country['countries_iso_code_2'],
'country_iso_code_3' => $country['countries_iso_code_3'],
'address_format_id' => ($country['address_format_id'] > 0 ? $country['address_format_id'] : '1'));
$billto = $sendto; */
Roby
Re: PayPal Express Checkout perde la partita IVA
il mio file express.php è cosi... come devo comportarmi?
Codice: Seleziona tutto
<?php
/*
$Id$
osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com
Copyright (c) 2014 osCommerce
Released under the GNU General Public License
*/
chdir('../../../../');
require('includes/application_top.php');
require(DIR_WS_LANGUAGES . $language . '/modules/payment/paypal_express.php');
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CREATE_ACCOUNT);
// initialize variables if the customer is not logged in
if (!tep_session_is_registered('customer_id')) {
$customer_id = 0;
$customer_default_address_id = 0;
}
require('includes/modules/payment/paypal_express.php');
$paypal_express = new paypal_express();
if (!$paypal_express->check() || !$paypal_express->enabled) {
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART, '', 'SSL'));
}
if ( !tep_session_is_registered('sendto') ) {
if ( tep_session_is_registered('customer_id') ) {
$sendto = $customer_default_address_id;
} else {
$country = tep_get_countries(STORE_COUNTRY, true);
$sendto = array('firstname' => '',
'lastname' => '',
'company' => '',
'street_address' => '',
'suburb' => '',
'postcode' => '',
'city' => '',
'zone_id' => STORE_ZONE,
'zone_name' => tep_get_zone_name(STORE_COUNTRY, STORE_ZONE, ''),
'country_id' => STORE_COUNTRY,
'country_name' => $country['countries_name'],
'country_iso_code_2' => $country['countries_iso_code_2'],
'country_iso_code_3' => $country['countries_iso_code_3'],
'address_format_id' => tep_get_address_format_id(STORE_COUNTRY));
}
}
if ( !tep_session_is_registered('billto') ) {
$billto = $sendto;
}
// register a random ID in the session to check throughout the checkout procedure
// against alterations in the shopping cart contents
if (!tep_session_is_registered('cartID')) tep_session_register('cartID');
$cartID = $cart->cartID;
switch ($HTTP_GET_VARS['osC_Action']) {
case 'cancel':
tep_session_unregister('ppe_token');
tep_session_unregister('ppe_secret');
if ( empty($sendto['firstname']) && empty($sendto['lastname']) && empty($sendto['street_address']) ) {
tep_session_unregister('sendto');
}
if ( empty($billto['firstname']) && empty($billto['lastname']) && empty($billto['street_address']) ) {
tep_session_unregister('billto');
}
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART, '', 'SSL'));
break;
case 'callbackSet':
if (MODULE_PAYMENT_PAYPAL_EXPRESS_INSTANT_UPDATE == 'True') {
$counter = 0;
if (isset($HTTP_POST_VARS['CURRENCYCODE']) && $currencies->is_set($HTTP_POST_VARS['CURRENCYCODE']) && ($currency != $HTTP_POST_VARS['CURRENCYCODE'])) {
$currency = $HTTP_POST_VARS['CURRENCYCODE'];
}
while (true) {
if (isset($HTTP_POST_VARS['L_NUMBER' . $counter])) {
$cart->add_cart($HTTP_POST_VARS['L_NUMBER' . $counter], $HTTP_POST_VARS['L_QTY' . $counter]);
} else {
break;
}
$counter++;
}
// exit if there is nothing in the shopping cart
if ($cart->count_contents() < 1) {
exit;
}
$sendto = array('firstname' => '',
'lastname' => '',
'company' => '',
'street_address' => $HTTP_POST_VARS['SHIPTOSTREET'],
'suburb' => '',
'postcode' => $HTTP_POST_VARS['SHIPTOZIP'],
'city' => $HTTP_POST_VARS['SHIPTOCITY'],
'zone_id' => '',
'zone_name' => $HTTP_POST_VARS['SHIPTOSTATE'],
'country_id' => '',
'country_name' => $HTTP_POST_VARS['SHIPTOCOUNTRY'],
'country_iso_code_2' => '',
'country_iso_code_3' => '',
'address_format_id' => '');
$country_query = tep_db_query("select * from " . TABLE_COUNTRIES . " where countries_iso_code_2 = '" . tep_db_input($sendto['country_name']) . "' limit 1");
if (tep_db_num_rows($country_query)) {
$country = tep_db_fetch_array($country_query);
$sendto['country_id'] = $country['countries_id'];
$sendto['country_name'] = $country['countries_name'];
$sendto['country_iso_code_2'] = $country['countries_iso_code_2'];
$sendto['country_iso_code_3'] = $country['countries_iso_code_3'];
$sendto['address_format_id'] = $country['address_format_id'];
}
if ($sendto['country_id'] > 0) {
$zone_query = tep_db_query("select * from " . TABLE_ZONES . " where zone_country_id = '" . (int)$sendto['country_id'] . "' and (zone_name = '" . tep_db_input($sendto['zone_name']) . "' or zone_code = '" . tep_db_input($sendto['zone_name']) . "') limit 1");
if (tep_db_num_rows($zone_query)) {
$zone = tep_db_fetch_array($zone_query);
$sendto['zone_id'] = $zone['zone_id'];
$sendto['zone_name'] = $zone['zone_name'];
}
}
$billto = $sendto;
$quotes_array = array();
include(DIR_WS_CLASSES . 'order.php');
$order = new order;
if ($cart->get_content_type() != 'virtual') {
$total_weight = $cart->show_weight();
$total_count = $cart->count_contents();
// load all enabled shipping modules
include(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping;
$free_shipping = false;
if ( defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING') && (MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true') ) {
$pass = false;
switch (MODULE_ORDER_TOTAL_SHIPPING_DESTINATION) {
case 'national':
if ($order->delivery['country_id'] == STORE_COUNTRY) {
$pass = true;
}
break;
case 'international':
if ($order->delivery['country_id'] != STORE_COUNTRY) {
$pass = true;
}
break;
case 'both':
$pass = true;
break;
}
if ( ($pass == true) && ($order->info['total'] >= MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) ) {
$free_shipping = true;
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
}
}
if ( (tep_count_shipping_modules() > 0) || ($free_shipping == true) ) {
if ($free_shipping == true) {
$quotes_array[] = array('id' => 'free_free',
'name' => FREE_SHIPPING_TITLE,
'label' => '',
'cost' => '0',
'tax' => '0');
} else {
// get all available shipping quotes
$quotes = $shipping_modules->quote();
foreach ($quotes as $quote) {
if (!isset($quote['error'])) {
foreach ($quote['methods'] as $rate) {
$quotes_array[] = array('id' => $quote['id'] . '_' . $rate['id'],
'name' => $quote['module'],
'label' => $rate['title'],
'cost' => $rate['cost'],
'tax' => isset($quote['tax']) ? $quote['tax'] : '0');
}
}
}
}
}
} else {
$quotes_array[] = array('id' => 'null',
'name' => 'No Shipping',
'label' => '',
'cost' => '0',
'tax' => '0');
}
include(DIR_WS_CLASSES . 'order_total.php');
$order_total_modules = new order_total;
$order_totals = $order_total_modules->process();
$params = array('METHOD' => 'CallbackResponse',
'CALLBACKVERSION' => $paypal_express->api_version);
if ( !empty($quotes_array) ) {
$params['CURRENCYCODE'] = $currency;
$params['OFFERINSURANCEOPTION'] = 'false';
$counter = 0;
$cheapest_rate = null;
$cheapest_counter = $counter;
foreach ($quotes_array as $quote) {
$shipping_rate = $paypal_express->format_raw($quote['cost'] + tep_calculate_tax($quote['cost'], $quote['tax']));
$params['L_SHIPPINGOPTIONNAME' . $counter] = $quote['name'];
$params['L_SHIPPINGOPTIONLABEL' . $counter] = $quote['label'];
$params['L_SHIPPINGOPTIONAMOUNT' . $counter] = $shipping_rate;
$params['L_SHIPPINGOPTIONISDEFAULT' . $counter] = 'false';
if ( DISPLAY_PRICE_WITH_TAX == 'false' ) {
$params['L_TAXAMT' . $counter] = $paypal_express->format_raw($order->info['tax']);
}
if (is_null($cheapest_rate) || ($shipping_rate < $cheapest_rate)) {
$cheapest_rate = $shipping_rate;
$cheapest_counter = $counter;
}
$counter++;
}
$params['L_SHIPPINGOPTIONISDEFAULT' . $cheapest_counter] = 'true';
} else {
$params['NO_SHIPPING_OPTION_DETAILS'] = '1';
}
$post_string = '';
foreach ($params as $key => $value) {
$post_string .= $key . '=' . urlencode(utf8_encode(trim($value))) . '&';
}
$post_string = substr($post_string, 0, -1);
echo $post_string;
}
tep_session_destroy();
exit;
break;
case 'retrieve':
// if there is nothing in the customers cart, redirect them to the shopping cart page
if ($cart->count_contents() < 1) {
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART, '', 'SSL'));
}
$response_array = $paypal_express->getExpressCheckoutDetails($HTTP_GET_VARS['token']);
if (($response_array['ACK'] == 'Success') || ($response_array['ACK'] == 'SuccessWithWarning')) {
if ( !tep_session_is_registered('ppe_secret') || ($response_array['PAYMENTREQUEST_0_CUSTOM'] != $ppe_secret) ) {
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART, '', 'SSL'));
}
if (!tep_session_is_registered('payment')) tep_session_register('payment');
$payment = $paypal_express->code;
if (!tep_session_is_registered('ppe_token')) tep_session_register('ppe_token');
$ppe_token = $response_array['TOKEN'];
if (!tep_session_is_registered('ppe_payerid')) tep_session_register('ppe_payerid');
$ppe_payerid = $response_array['PAYERID'];
if (!tep_session_is_registered('ppe_payerstatus')) tep_session_register('ppe_payerstatus');
$ppe_payerstatus = $response_array['PAYERSTATUS'];
if (!tep_session_is_registered('ppe_addressstatus')) tep_session_register('ppe_addressstatus');
$ppe_addressstatus = $response_array['ADDRESSSTATUS'];
$force_login = false;
// check if e-mail address exists in database and login or create customer account
if (!tep_session_is_registered('customer_id')) {
$force_login = true;
$email_address = tep_db_prepare_input($response_array['EMAIL']);
$check_query = tep_db_query("select * from " . TABLE_CUSTOMERS . " where customers_email_address = '" . tep_db_input($email_address) . "' limit 1");
if (tep_db_num_rows($check_query)) {
$check = tep_db_fetch_array($check_query);
// Force the customer to log into their local account if payerstatus is unverified and a local password is set
if ( ($response_array['PAYERSTATUS'] == 'unverified') && !empty($check['customers_password']) ) {
$messageStack->add_session('login', MODULE_PAYMENT_PAYPAL_EXPRESS_WARNING_LOCAL_LOGIN_REQUIRED, 'warning');
$navigation->set_snapshot();
$login_url = tep_href_link(FILENAME_LOGIN, '', 'SSL');
$login_email_address = tep_output_string($response_array['EMAIL']);
$output = <<<EOD
<form name="pe" action="{$login_url}" method="post" target="_top">
<input type="hidden" name="email_address" value="{$login_email_address}" />
</form>
<script type="text/javascript">
document.pe.submit();
</script>
EOD;
echo $output;
exit;
} else {
$customer_id = $check['customers_id'];
$customers_firstname = $check['customers_firstname'];
$customer_default_address_id = $check['customers_default_address_id'];
}
} else {
$customers_firstname = tep_db_prepare_input($response_array['FIRSTNAME']);
$customers_lastname = tep_db_prepare_input($response_array['LASTNAME']);
$sql_data_array = array('customers_firstname' => $customers_firstname,
'customers_lastname' => $customers_lastname,
'customers_email_address' => $email_address,
'customers_telephone' => '',
'customers_fax' => '',
'customers_newsletter' => '0',
'customers_password' => '');
if (isset($response_array['PHONENUM']) && tep_not_null($response_array['PHONENUM'])) {
$customers_telephone = tep_db_prepare_input($response_array['PHONENUM']);
$sql_data_array['customers_telephone'] = $customers_telephone;
}
tep_db_perform(TABLE_CUSTOMERS, $sql_data_array);
$customer_id = tep_db_insert_id();
tep_db_query("insert into " . TABLE_CUSTOMERS_INFO . " (customers_info_id, customers_info_number_of_logons, customers_info_date_account_created) values ('" . (int)$customer_id . "', '0', now())");
// Only generate a password and send an email if the Set Password Content Module is not enabled
if ( !defined('MODULE_CONTENT_ACCOUNT_SET_PASSWORD_STATUS') || (MODULE_CONTENT_ACCOUNT_SET_PASSWORD_STATUS != 'True') ) {
$customer_password = tep_create_random_value(max(ENTRY_PASSWORD_MIN_LENGTH, 8));
tep_db_perform(TABLE_CUSTOMERS, array('customers_password' => tep_encrypt_password($customer_password)), 'update', 'customers_id = "' . (int)$customer_id . '"');
// build the message content
$name = $customers_firstname . ' ' . $customers_lastname;
$email_text = sprintf(EMAIL_GREET_NONE, $customers_firstname) . EMAIL_WELCOME . sprintf(MODULE_PAYMENT_PAYPAL_EXPRESS_EMAIL_PASSWORD, $email_address, $customer_password) . EMAIL_TEXT . EMAIL_CONTACT . EMAIL_WARNING;
tep_mail($name, $email_address, EMAIL_SUBJECT, $email_text, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS);
}
}
if (SESSION_RECREATE == 'True') {
tep_session_recreate();
}
$customer_first_name = $customers_firstname;
tep_session_register('customer_id');
tep_session_register('customer_first_name');
// reset session token
$sessiontoken = md5(tep_rand() . tep_rand() . tep_rand() . tep_rand());
}
// check if paypal shipping address exists in the address book
$ship_firstname = tep_db_prepare_input(substr($response_array['PAYMENTREQUEST_0_SHIPTONAME'], 0, strpos($response_array['PAYMENTREQUEST_0_SHIPTONAME'], ' ')));
$ship_lastname = tep_db_prepare_input(substr($response_array['PAYMENTREQUEST_0_SHIPTONAME'], strpos($response_array['PAYMENTREQUEST_0_SHIPTONAME'], ' ')+1));
$ship_address = tep_db_prepare_input($response_array['PAYMENTREQUEST_0_SHIPTOSTREET']);
$ship_city = tep_db_prepare_input($response_array['PAYMENTREQUEST_0_SHIPTOCITY']);
$ship_zone = tep_db_prepare_input($response_array['PAYMENTREQUEST_0_SHIPTOSTATE']);
$ship_zone_id = 0;
$ship_postcode = tep_db_prepare_input($response_array['PAYMENTREQUEST_0_SHIPTOZIP']);
$ship_country = tep_db_prepare_input($response_array['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE']);
$ship_country_id = 0;
$ship_address_format_id = 1;
$country_query = tep_db_query("select countries_id, address_format_id from " . TABLE_COUNTRIES . " where countries_iso_code_2 = '" . tep_db_input($ship_country) . "' limit 1");
if (tep_db_num_rows($country_query)) {
$country = tep_db_fetch_array($country_query);
$ship_country_id = $country['countries_id'];
$ship_address_format_id = $country['address_format_id'];
}
if ($ship_country_id > 0) {
$zone_query = tep_db_query("select zone_id from " . TABLE_ZONES . " where zone_country_id = '" . (int)$ship_country_id . "' and (zone_name = '" . tep_db_input($ship_zone) . "' or zone_code = '" . tep_db_input($ship_zone) . "') limit 1");
if (tep_db_num_rows($zone_query)) {
$zone = tep_db_fetch_array($zone_query);
$ship_zone_id = $zone['zone_id'];
}
}
$check_query = tep_db_query("select address_book_id from " . TABLE_ADDRESS_BOOK . " where customers_id = '" . (int)$customer_id . "' and entry_firstname = '" . tep_db_input($ship_firstname) . "' and entry_lastname = '" . tep_db_input($ship_lastname) . "' and entry_street_address = '" . tep_db_input($ship_address) . "' and entry_postcode = '" . tep_db_input($ship_postcode) . "' and entry_city = '" . tep_db_input($ship_city) . "' and (entry_state = '" . tep_db_input($ship_zone) . "' or entry_zone_id = '" . (int)$ship_zone_id . "') and entry_country_id = '" . (int)$ship_country_id . "' limit 1");
if (tep_db_num_rows($check_query)) {
$check = tep_db_fetch_array($check_query);
$sendto = $check['address_book_id'];
} else {
$sql_data_array = array('customers_id' => $customer_id,
'entry_firstname' => $ship_firstname,
'entry_lastname' => $ship_lastname,
'entry_street_address' => $ship_address,
'entry_postcode' => $ship_postcode,
'entry_city' => $ship_city,
'entry_country_id' => $ship_country_id);
if (ACCOUNT_STATE == 'true') {
if ($ship_zone_id > 0) {
$sql_data_array['entry_zone_id'] = $ship_zone_id;
$sql_data_array['entry_state'] = '';
} else {
$sql_data_array['entry_zone_id'] = '0';
$sql_data_array['entry_state'] = $ship_zone;
}
}
tep_db_perform(TABLE_ADDRESS_BOOK, $sql_data_array);
$address_id = tep_db_insert_id();
$sendto = $address_id;
if ($customer_default_address_id < 1) {
tep_db_query("update " . TABLE_CUSTOMERS . " set customers_default_address_id = '" . (int)$address_id . "' where customers_id = '" . (int)$customer_id . "'");
$customer_default_address_id = $address_id;
}
}
$billto = $sendto;
if ( !tep_session_is_registered('sendto') ) {
tep_session_register('sendto');
}
if ( !tep_session_is_registered('billto') ) {
tep_session_register('billto');
}
if ($force_login == true) {
$customer_country_id = $ship_country_id;
$customer_zone_id = $ship_zone_id;
tep_session_register('customer_default_address_id');
tep_session_register('customer_country_id');
tep_session_register('customer_zone_id');
}
include(DIR_WS_CLASSES . 'order.php');
$order = new order;
if ($cart->get_content_type() != 'virtual') {
$total_weight = $cart->show_weight();
$total_count = $cart->count_contents();
// load all enabled shipping modules
include(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping;
$free_shipping = false;
if ( defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING') && (MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true') ) {
$pass = false;
switch (MODULE_ORDER_TOTAL_SHIPPING_DESTINATION) {
case 'national':
if ($order->delivery['country_id'] == STORE_COUNTRY) {
$pass = true;
}
break;
case 'international':
if ($order->delivery['country_id'] != STORE_COUNTRY) {
$pass = true;
}
break;
case 'both':
$pass = true;
break;
}
if ( ($pass == true) && ($order->info['total'] >= MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) ) {
$free_shipping = true;
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
}
}
if (!tep_session_is_registered('shipping')) tep_session_register('shipping');
$shipping = false;
if ( (tep_count_shipping_modules() > 0) || ($free_shipping == true) ) {
if ($free_shipping == true) {
$shipping = 'free_free';
} else {
// get all available shipping quotes
$quotes = $shipping_modules->quote();
$shipping_set = false;
// if available, set the selected shipping rate from PayPals order review page
if (isset($response_array['SHIPPINGOPTIONNAME']) && isset($response_array['SHIPPINGOPTIONAMOUNT'])) {
foreach ($quotes as $quote) {
if (!isset($quote['error'])) {
foreach ($quote['methods'] as $rate) {
if ($response_array['SHIPPINGOPTIONNAME'] == trim($quote['module'] . ' ' . $rate['title'])) {
$shipping_rate = $paypal_express->format_raw($rate['cost'] + tep_calculate_tax($rate['cost'], $quote['tax']));
if ($response_array['SHIPPINGOPTIONAMOUNT'] == $shipping_rate) {
$shipping = $quote['id'] . '_' . $rate['id'];
$shipping_set = true;
break 2;
}
}
}
}
}
}
if ($shipping_set == false) {
// select cheapest shipping method
$shipping = $shipping_modules->cheapest();
$shipping = $shipping['id'];
}
}
} else {
if ( defined('SHIPPING_ALLOW_UNDEFINED_ZONES') && (SHIPPING_ALLOW_UNDEFINED_ZONES == 'False') ) {
tep_session_unregister('shipping');
$messageStack->add_session('checkout_address', MODULE_PAYMENT_PAYPAL_EXPRESS_ERROR_NO_SHIPPING_AVAILABLE_TO_SHIPPING_ADDRESS, 'error');
tep_session_register('ppec_right_turn');
$ppec_right_turn = true;
tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING_ADDRESS, '', 'SSL'));
}
}
if (strpos($shipping, '_')) {
list($module, $method) = explode('_', $shipping);
if ( is_object($$module) || ($shipping == 'free_free') ) {
if ($shipping == 'free_free') {
$quote[0]['methods'][0]['title'] = FREE_SHIPPING_TITLE;
$quote[0]['methods'][0]['cost'] = '0';
} else {
$quote = $shipping_modules->quote($method, $module);
}
if (isset($quote['error'])) {
tep_session_unregister('shipping');
tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
} else {
if ( (isset($quote[0]['methods'][0]['title'])) && (isset($quote[0]['methods'][0]['cost'])) ) {
$shipping = array('id' => $shipping,
'title' => (($free_shipping == true) ? $quote[0]['methods'][0]['title'] : $quote[0]['module'] . ' ' . $quote[0]['methods'][0]['title']),
'cost' => $quote[0]['methods'][0]['cost']);
}
}
}
}
} else {
if (!tep_session_is_registered('shipping')) tep_session_register('shipping');
$shipping = false;
$sendto = false;
}
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL'));
} else {
$messageStack->add_session('header', stripslashes($response_array['L_LONGMESSAGE0']), 'error');
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART, '', 'SSL'));
}
break;
default:
// if there is nothing in the customers cart, redirect them to the shopping cart page
if ($cart->count_contents() < 1) {
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART, '', 'SSL'));
}
if (MODULE_PAYMENT_PAYPAL_EXPRESS_TRANSACTION_SERVER == 'Live') {
$paypal_url = 'https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&';
} else {
$paypal_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&';
}
include(DIR_WS_CLASSES . 'order.php');
$order = new order;
$params = array('PAYMENTREQUEST_0_CURRENCYCODE' => $order->info['currency'],
'ALLOWNOTE' => 0);
// A billing address is required for digital orders so we use the shipping address PayPal provides
// if ($order->content_type == 'virtual') {
// $params['NOSHIPPING'] = '1';
// }
$item_params = array();
$line_item_no = 0;
foreach ($order->products as $product) {
if ( DISPLAY_PRICE_WITH_TAX == 'true' ) {
$product_price = $paypal_express->format_raw($product['final_price'] + tep_calculate_tax($product['final_price'], $product['tax']));
} else {
$product_price = $paypal_express->format_raw($product['final_price']);
}
$item_params['L_PAYMENTREQUEST_0_NAME' . $line_item_no] = $product['name'];
$item_params['L_PAYMENTREQUEST_0_AMT' . $line_item_no] = $product_price;
$item_params['L_PAYMENTREQUEST_0_NUMBER' . $line_item_no] = $product['id'];
$item_params['L_PAYMENTREQUEST_0_QTY' . $line_item_no] = $product['qty'];
$item_params['L_PAYMENTREQUEST_0_ITEMURL' . $line_item_no] = tep_href_link(FILENAME_PRODUCT_INFO, 'products_id=' . $product['id'], 'NONSSL', false);
if ( (DOWNLOAD_ENABLED == 'true') && isset($product['attributes']) ) {
$item_params['L_PAYMENTREQUEST_n_ITEMCATEGORY' . $line_item_no] = $paypal_express->getProductType($product['id'], $product['attributes']);
} else {
$item_params['L_PAYMENTREQUEST_n_ITEMCATEGORY' . $line_item_no] = 'Physical';
}
$line_item_no++;
}
if (tep_not_null($order->delivery['street_address'])) {
$params['PAYMENTREQUEST_0_SHIPTONAME'] = $order->delivery['firstname'] . ' ' . $order->delivery['lastname'];
$params['PAYMENTREQUEST_0_SHIPTOSTREET'] = $order->delivery['street_address'];
$params['PAYMENTREQUEST_0_SHIPTOCITY'] = $order->delivery['city'];
$params['PAYMENTREQUEST_0_SHIPTOSTATE'] = tep_get_zone_code($order->delivery['country']['id'], $order->delivery['zone_id'], $order->delivery['state']);
$params['PAYMENTREQUEST_0_SHIPTOCOUNTRYCODE'] = $order->delivery['country']['iso_code_2'];
$params['PAYMENTREQUEST_0_SHIPTOZIP'] = $order->delivery['postcode'];
}
$quotes_array = array();
if ($cart->get_content_type() != 'virtual') {
$total_weight = $cart->show_weight();
$total_count = $cart->count_contents();
// load all enabled shipping modules
include(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping;
$free_shipping = false;
if ( defined('MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING') && (MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING == 'true') ) {
$pass = false;
switch (MODULE_ORDER_TOTAL_SHIPPING_DESTINATION) {
case 'national':
if ($order->delivery['country_id'] == STORE_COUNTRY) {
$pass = true;
}
break;
case 'international':
if ($order->delivery['country_id'] != STORE_COUNTRY) {
$pass = true;
}
break;
case 'both':
$pass = true;
break;
}
if ( ($pass == true) && ($order->info['total'] >= MODULE_ORDER_TOTAL_SHIPPING_FREE_SHIPPING_OVER) ) {
$free_shipping = true;
include(DIR_WS_LANGUAGES . $language . '/modules/order_total/ot_shipping.php');
}
}
if ( (tep_count_shipping_modules() > 0) || ($free_shipping == true) ) {
if ($free_shipping == true) {
$quotes_array[] = array('id' => 'free_free',
'name' => FREE_SHIPPING_TITLE,
'label' => '',
'cost' => '0.00',
'tax' => '0');
} else {
// get all available shipping quotes
$quotes = $shipping_modules->quote();
foreach ($quotes as $quote) {
if (!isset($quote['error'])) {
foreach ($quote['methods'] as $rate) {
$quotes_array[] = array('id' => $quote['id'] . '_' . $rate['id'],
'name' => $quote['module'],
'label' => $rate['title'],
'cost' => $rate['cost'],
'tax' => $quote['tax']);
}
}
}
}
} else {
if ( defined('SHIPPING_ALLOW_UNDEFINED_ZONES') && (SHIPPING_ALLOW_UNDEFINED_ZONES == 'False') ) {
tep_session_unregister('shipping');
$messageStack->add_session('checkout_address', MODULE_PAYMENT_PAYPAL_EXPRESS_ERROR_NO_SHIPPING_AVAILABLE_TO_SHIPPING_ADDRESS);
tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING_ADDRESS, '', 'SSL'));
}
}
}
$counter = 0;
$cheapest_rate = null;
$expensive_rate = 0;
$cheapest_counter = $counter;
$default_shipping = null;
foreach ($quotes_array as $quote) {
$shipping_rate = $paypal_express->format_raw($quote['cost'] + tep_calculate_tax($quote['cost'], $quote['tax']));
$item_params['L_SHIPPINGOPTIONNAME' . $counter] = trim($quote['name'] . ' ' . $quote['label']);
$item_params['L_SHIPPINGOPTIONAMOUNT' . $counter] = $shipping_rate;
$item_params['L_SHIPPINGOPTIONISDEFAULT' . $counter] = 'false';
if (is_null($cheapest_rate) || ($shipping_rate < $cheapest_rate)) {
$cheapest_rate = $shipping_rate;
$cheapest_counter = $counter;
}
if ($shipping_rate > $expensive_rate) {
$expensive_rate = $shipping_rate;
}
if (tep_session_is_registered('shipping') && ($shipping['id'] == $quote['id'])) {
$default_shipping = $counter;
}
$counter++;
}
if (!is_null($default_shipping)) {
$cheapest_rate = $item_params['L_SHIPPINGOPTIONAMOUNT' . $default_shipping];
$cheapest_counter = $default_shipping;
} else {
if ( !empty($quotes_array) ) {
$shipping = array('id' => $quotes_array[$cheapest_counter]['id'],
'title' => $item_params['L_SHIPPINGOPTIONNAME' . $cheapest_counter],
'cost' => $paypal_express->format_raw($quotes_array[$cheapest_counter]['cost']));
$default_shipping = $cheapest_counter;
} else {
$shipping = false;
}
if ( !tep_session_is_registered('shipping') ) {
tep_session_register('shipping');
}
}
// set shipping for order total calculations; shipping in $item_params includes taxes
if (!is_null($default_shipping)) {
$order->info['shipping_method'] = $item_params['L_SHIPPINGOPTIONNAME' . $default_shipping];
$order->info['shipping_cost'] = $item_params['L_SHIPPINGOPTIONAMOUNT' . $default_shipping];
$order->info['total'] = $order->info['subtotal'] + $order->info['shipping_cost'];
if ( DISPLAY_PRICE_WITH_TAX == 'false' ) {
$order->info['total'] += $order->info['tax'];
}
}
if (!is_null($cheapest_rate)) {
$item_params['PAYMENTREQUEST_0_INSURANCEOPTIONOFFERED'] = 'false';
$item_params['L_SHIPPINGOPTIONISDEFAULT' . $cheapest_counter] = 'true';
}
if ( !empty($quotes_array) && (MODULE_PAYMENT_PAYPAL_EXPRESS_INSTANT_UPDATE == 'True') && ((MODULE_PAYMENT_PAYPAL_EXPRESS_TRANSACTION_SERVER != 'Live') || ((MODULE_PAYMENT_PAYPAL_EXPRESS_TRANSACTION_SERVER == 'Live') && (ENABLE_SSL == true))) ) { // Live server requires SSL to be enabled
$item_params['CALLBACK'] = tep_href_link('ext/modules/payment/paypal/express.php', 'osC_Action=callbackSet', 'SSL', false, false);
$item_params['CALLBACKTIMEOUT'] = '6';
$item_params['CALLBACKVERSION'] = $paypal_express->api_version;
}
include(DIR_WS_CLASSES . 'order_total.php');
$order_total_modules = new order_total;
$order_totals = $order_total_modules->process();
// Remove shipping tax from total that was added again in ot_shipping
if (DISPLAY_PRICE_WITH_TAX == 'true') $order->info['shipping_cost'] = $order->info['shipping_cost'] / (1.0 + ($quotes_array[$default_shipping]['tax'] / 100));
$module = substr($shipping['id'], 0, strpos($shipping['id'], '_'));
$order->info['tax'] -= tep_calculate_tax($order->info['shipping_cost'], $quotes_array[$default_shipping]['tax']);
$order->info['tax_groups'][tep_get_tax_description($module->tax_class, $order->delivery['country']['id'], $order->delivery['zone_id'])] -= tep_calculate_tax($order->info['shipping_cost'], $quotes_array[$default_shipping]['tax']);
$order->info['total'] -= tep_calculate_tax($order->info['shipping_cost'], $quotes_array[$default_shipping]['tax']);
$items_total = $paypal_express->format_raw($order->info['subtotal']);
foreach ($order_totals as $ot) {
if ( !in_array($ot['code'], array('ot_subtotal', 'ot_shipping', 'ot_tax', 'ot_total')) ) {
$item_params['L_PAYMENTREQUEST_0_NAME' . $line_item_no] = $ot['title'];
$item_params['L_PAYMENTREQUEST_0_AMT' . $line_item_no] = $paypal_express->format_raw($ot['value']);
$items_total += $paypal_express->format_raw($ot['value']);
$line_item_no++;
}
}
$params['PAYMENTREQUEST_0_AMT'] = $paypal_express->format_raw($order->info['total']);
$item_params['MAXAMT'] = $paypal_express->format_raw($params['PAYMENTREQUEST_0_AMT'] + $expensive_rate + 100, '', 1); // safely pad higher for dynamic shipping rates (eg, USPS express)
$item_params['PAYMENTREQUEST_0_ITEMAMT'] = $items_total;
$item_params['PAYMENTREQUEST_0_SHIPPINGAMT'] = $paypal_express->format_raw($order->info['shipping_cost']);
$paypal_item_total = $item_params['PAYMENTREQUEST_0_ITEMAMT'] + $item_params['PAYMENTREQUEST_0_SHIPPINGAMT'];
if ( DISPLAY_PRICE_WITH_TAX == 'false' ) {
$item_params['PAYMENTREQUEST_0_TAXAMT'] = $paypal_express->format_raw($order->info['tax']);
$paypal_item_total += $item_params['PAYMENTREQUEST_0_TAXAMT'];
}
if ( $paypal_express->format_raw($paypal_item_total) == $params['PAYMENTREQUEST_0_AMT'] ) {
$params = array_merge($params, $item_params);
}
if (tep_not_null(MODULE_PAYMENT_PAYPAL_EXPRESS_PAGE_STYLE)) {
$params['PAGESTYLE'] = MODULE_PAYMENT_PAYPAL_EXPRESS_PAGE_STYLE;
}
$ppe_secret = tep_create_random_value(16, 'digits');
if ( !tep_session_is_registered('ppe_secret') ) {
tep_session_register('ppe_secret');
}
$params['PAYMENTREQUEST_0_CUSTOM'] = $ppe_secret;
// Log In with PayPal token for seamless checkout
if (tep_session_is_registered('paypal_login_access_token')) {
$params['IDENTITYACCESSTOKEN'] = $paypal_login_access_token;
}
$response_array = $paypal_express->setExpressCheckout($params);
if (($response_array['ACK'] == 'Success') || ($response_array['ACK'] == 'SuccessWithWarning')) {
tep_redirect($paypal_url . 'token=' . $response_array['TOKEN'] . '&useraction=commit');
} else {
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART, 'error_message=' . stripslashes($response_array['L_LONGMESSAGE0']), 'SSL'));
}
break;
}
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART, '', 'SSL'));
require(DIR_WS_INCLUDES . 'application_bottom.php');
?>
boom