Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Moneybookers Madness


RobPaul

Recommended Posts

Hi Osc Community

 

Having a hard time setting up the money bookers module. Every time i get to the confirm order page, i click confirm order then the following message appears. Transaction not allowed invalid amount. Ive used all the updates that need to be installed but still this headache. When i click cancel on that page i receive another mystery message.

 

Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in /usr/local/www/data-dist/mysite/htdocs/checkout_moneybookersipn_cancel.php on line 49

 

Line 49-50

require(DIR_WS_CLASSES . 'order.php');

$order = new order;

 

These are all the files. Maybe i am mistaken but everything looks okay.

checkout_moneybookersipn

 

<?php

/*

$Id: checkout_moneybookersipn.php

 

Copyright © 2007 Datalink UK t/a as Holbi

 

http://www.holbi.co.uk

 

Author: Vladislav B. Malyshev

e-mail: [email protected]

 

description:

the file for creating the order before go to moneybookers.

*/

 

include('includes/application_top.php');

 

// if the customer is not logged on, redirect them to the login page

if (!tep_session_is_registered('customer_id')) {

$navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));

tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));

}

 

if (!tep_session_is_registered('sendto')) {

tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));

}

 

if ( (tep_not_null(MODULE_PAYMENT_INSTALLED)) && (!tep_session_is_registered('payment')) ) {

tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));

}

 

// avoid hack attempts during the checkout procedure by checking the internal cartID

if (isset($cart->cartID) && tep_session_is_registered('cartID')) {

if ($cart->cartID != $cartID) {

tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));

}

}

 

include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS);

 

// load selected payment module

require(DIR_WS_CLASSES . 'payment.php');

$payment_modules = new payment($payment);

 

// load the selected shipping module

require(DIR_WS_CLASSES . 'shipping.php');

$shipping_modules = new shipping($shipping);

 

require(DIR_WS_CLASSES . 'order.php');

$order = new order;

 

// load the before_process function from the payment modules

$payment_modules->before_process();

 

require(DIR_WS_CLASSES . 'order_total.php');

$order_total_modules = new order_total;

 

$order_totals = $order_total_modules->process();

 

$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' => MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_BEFORE,

'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);

}

 

$customer_notification = (SEND_EMAILS == 'true') ? '1' : '0';

 

$sql_data_array = array('orders_id' => $insert_id,

'orders_status_id' =>MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_BEFORE,

'date_added' => 'now()',

'customer_notified' => $customer_notification,

'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;

$total_weight = 0;

$total_cost = 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']) . "'");

 

$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();

 

//------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);

 

$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);

}

$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($order->products[$i]['final_price'], $order->products[$i]['tax']) * $order->products[$i]['qty'];

$total_cost += $order->products[$i]['final_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";

}

 

// load the after_process function from the payment modules

$payment_modules->after_process();

 

//for moneybookers

if (MODULE_PAYMENT_MONEYBOOKERS_IPN_LANGUAGE == 'Selected Language') {

$moneybookers_language = 'EN';

} else {

$moneybookers_language = MODULE_PAYMENT_MONEYBOOKERS_IPN_LANGUAGE;

}

 

if (MODULE_PAYMENT_MONEYBOOKERS_IPN_CURRENCY == 'Selected Currency') {

$moneybookers_currency = $currency;

// echo "hehe1";

} else {

// $moneybookers_currency = substr(MODULE_PAYMENT_MONEYBOOKERS_IPN_CURRENCY, 3);

$moneybookers_currency = MODULE_PAYMENT_MONEYBOOKERS_IPN_CURRENCY;

// echo MODULE_PAYMENT_MONEYBOOKERS_IPN_CURRENCY;

// echo "hehe2";

}

 

//echo $moneybookers_currency . "zuzu<br>";

 

if (!in_array($moneybookers_currency, array('EUR', 'USD', 'GBP', 'HKD', 'SGD', 'JPY', 'CAD', 'AUD', 'CHF', 'DKK', 'SEK', 'NOK', 'ILS', 'MYR', 'NZD', 'TWD', 'THB', 'CZK', 'HUF', 'SKK', 'ISK', 'INR'))) {

$moneybookers_currency = 'EUR';

}

 

//echo $moneybookers_currency . "zuzu2<br>";

 

//die();

$country_id = $order->billing['country']['id'];

$country_moneybookers_ipn_query = "select countries_moneybookers from " . TABLE_COUNTRIES . " where countries_id = '" . $country_id . "'";

$country_moneybookers_ipn_res = tep_db_query($country_moneybookers_ipn_query);

$country_moneybookers_ipn_data = tep_db_fetch_array($country_moneybookers_ipn_res);

$country_moneybookers = $country_moneybookers_ipn_data['countries_moneybookers'];

 

$trx_id = sprintf("%'820d", rand());

 

$update_order = "update " . TABLE_ORDERS . " set moneybookers_transaction_id = '" . $trx_id . "' where orders_id = '" . $insert_id . "'";

tep_db_query($update_order);

 

$process_button_string = 'pay_to_email=' . MODULE_PAYMENT_MONEYBOOKERS_IPN_ID .

'&language=' . $moneybookers_language.

'&amount=' . number_format($order->info['total'] * $currencies->get_value($moneybookers_currency), $currencies->get_decimal_places($moneybookers_currency), '.', '') .

'&amount2=' . number_format($order->info['shipping_cost'] * $currencies->get_value($moneybookers_currency), $currencies->get_decimal_places($moneybookers_currency), '.', '') .

'&amount2_description=' . urlencode($order->info['shipping_method']) .

'&amount3=' . number_format($order->info['tax'] * $currencies->get_value($moneybookers_currency), $currencies->get_decimal_places($moneybookers_currency), '.', '') .

'&amount3_description=' . urlencode($order->info['tax_groups'][0]) .

'&currency=' . $moneybookers_currency .

'&detail1_description=' . STORE_NAME .

'&detail1_text=' . urlencode('Order # ' . $insert_id).

'&transaction_id=' . $trx_id .

'&firstname=' . $order->billing['firstname'] .

'&lastname=' . $order->billing['lastname'] .

'&address=' . $order->billing['street_address'] .

'&postal_code=' . $order->billing['postcode'] .

'&city=' . $order->billing['city'] .

'&state=' . $order->billing['billing_state'] .

'&country=' . $country_moneybookers .

'&merchant_fields=' . urlencode('softwareprovider,distributor') .

'&softwareprovider=' . 'holbi' .

'&distributor=' . 'holbi' .

'&pay_from_email=' . $order->customer['email_address'] .

'&status_url=' . tep_href_link(FILENAME_MONEYBOOKERS_NOTIFY, '', 'SSL') .

'&return_url=' . tep_href_link(FILENAME_CHECKOUT_CHECKOUT_MONEYBOOKERSIPN_AFTER, '', 'NONSSL') .

'&cancel_url=' . tep_href_link(FILENAME_CHECKOUT_MONEYBOOKERSIPN_CANCEL, 'order_id=' . $insert_id, 'SSL');

 

/*tep_draw_hidden_field('pay_from_email', $order->customer['email_address']) .*/

 

$moneybookersurl = 'https://www.moneybookers.com/app/payment.pl';

if (strlen(MODULE_PAYMENT_MONEYBOOKERS_IPN_REFID) <= '5') {$moneybookersurl = $moneybookersurl . '?rid=3045110';}

else {$moneybookersurl = $moneybookersurl . '?rid=' . MODULE_PAYMENT_MONEYBOOKERS_IPN_REFID;}

 

//echo $moneybookersurl . "&" . $process_button_string;

tep_redirect($moneybookersurl . "&" . $process_button_string);

?>

 

 

Checkout_moneybookersipn_after

 

 

<?php

/*

$Id: moneybookers_ipn.php

 

Copyright © 2007 Datalink UK t/a as Holbi

 

http://www.holbi.co.uk

 

Author: Vladislav B. Malyshev

e-mail: [email protected]

 

description:

 

the suport file. When we returns from moneybookers ok we remove cart and other data in this file

*/

 

include('includes/application_top.php');

 

// if the customer is not logged on, redirect them to the login page

if ($osC_Customer->isLoggedOn() == false) {

$navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_SUCCESS));

 

tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));

}

 

if (tep_session_is_registered('sendto') == false) {

tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));

}

 

if (tep_not_null(MODULE_PAYMENT_INSTALLED) && (tep_session_is_registered('payment') == false)) {

tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));

}

 

// avoid hack attempts during the checkout procedure by checking the internal cartID

if (isset($cart->cartID) && tep_session_is_registered('cartID') && ($cart->cartID != $cartID)) {

tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));

}

 

include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS);

 

// load selected payment module

require(DIR_WS_CLASSES . 'payment.php');

$payment_modules = new payment($payment);

 

// load the selected shipping module

require(DIR_WS_CLASSES . 'shipping.php');

$shipping_modules = new shipping($shipping');

 

require(DIR_WS_CLASSES . 'order.php');

$order = new order;

 

// load the before_process function from the payment modules

$payment_modules->before_process();

 

require(DIR_WS_CLASSES . 'order_total.php');

$order_total_modules = new order_total;

 

$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_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'NONSSL'));

?>

 

 

checkout_moneybookersipn_cancel

 

 

<?php

/*

$Id: checkout_moneybookersipn_cancel.php

 

Copyright © 2007 Datalink UK t/a as Holbi

 

http://www.holbi.co.uk

 

Author: Vladislav B. Malyshev

e-mail: [email protected]

 

description:

 

support file. it remove's order in case of cancel on moneybookers

*/

 

include('includes/application_top.php');

 

// if the customer is not logged on, redirect them to the login page

if (tep_session_is_registered('customer_id')== false) {

$navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));

 

tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));

}

 

if (tep_session_is_registered('sendto') == false) {

tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));

}

 

if (tep_not_null(MODULE_PAYMENT_INSTALLED) && (tep_session_is_registered('payment') == false)) {

tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL'));

}

 

// avoid hack attempts during the checkout procedure by checking the internal cartID

if (isset($cart->cartID) && tep_session_is_registered('cartID') && ($cart->cartID != $cartID)) {

tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));

}

 

include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS);

 

// load selected payment module

require(DIR_WS_CLASSES . 'payment.php');

$payment_modules = new payment($payment);

 

// load the selected shipping module

require(DIR_WS_CLASSES . 'shipping.php');

$shipping_modules = new shipping($shipping');

 

require(DIR_WS_CLASSES . 'order.php');

$order = new order;

 

// load the before_process function from the payment modules

$payment_modules->before_process();

 

require(DIR_WS_CLASSES . 'order_total.php');

$order_total_modules = new order_total;

 

 

if (phpversion() <= '4.0.6') {

$_POST = $HTTP_POST_VARS;

}

 

if(!tep_not_null($_GET['order_id'])) {

remove_order($_GET['order_id']);

}

 

tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'NONSSL'));

 

function remove_order($order_id) {

$order_query = tep_db_query("select products_id, products_quantity from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$order_id . "'");

while ($order = tep_db_fetch_array($order_query)) {

tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = products_quantity + " . $order['products_quantity'] . ", products_ordered = products_ordered - " . $order['products_quantity'] . " where products_id = '" . (int)$order['products_id'] . "'");

}

 

tep_db_query("delete from " . TABLE_ORDERS . " 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_STATUS_HISTORY . " where orders_id = '" . (int)$order_id . "'");

tep_db_query("delete from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int)$order_id . "'");

}

 

?>

 

 

moneybookers_notify

 

 

 

<?php

/*

$Id: moneybookers_ipn.php

 

Copyright © 2007 Datalink UK t/a as Holbi

 

http://www.holbi.co.uk

 

Author: Vladislav B. Malyshev

e-mail: [email protected]

 

description:

 

the file where moneybookers sends paymet confirmation

*/

 

/*

include('mail.php');

 

ob_start();

// print_r($HTTP_POST_VARS);

foreach ($HTTP_POST_VARS as $key => $value)

{

echo "Key: $key; Value: '$value'<br>\n";

}

$email_order = ob_get_contents();

ob_end_clean();

 

my_sendmail_only_text('[email protected]', '[email protected]', 'what we have', $email_order);

die();

*/

include('includes/application_top.php');

 

if(!$language) $language = 'english';

include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS);

 

// load paypal_ipn payment module

$payment = 'moneybookers_ipn';

require(DIR_WS_CLASSES . 'payment.php');

$payment_modules = new payment($payment);

 

if (phpversion() <= '4.0.6') {

$_POST = $HTTP_POST_VARS;

}

 

$order_id_select = "select orders_id from " . TABLE_ORDERS . " where moneybookers_transaction_id = '" . $_POST['transaction_id'] . "'";

$order_id_res = tep_db_query($order_id_select);

$order_id_data = tep_db_fetch_array($order_id_res);

$order_id = $order_id_data['orders_id'];

 

require(DIR_WS_CLASSES . 'order.php');

$order = new order($order_id);

 

foreach ($_POST as $key => $value) {

$$key = $value;

}

/*

//prepare details for checking on server

$req = 'action=status_trn&email=' . urlencode(MODULE_PAYMENT_MONEYBOOKERS_IPN_ID) . "&password=" . md5(MODULE_PAYMENT_MONEYBOOKERS_IPN_PASSWORD) . "&trn_id=" . $transaction_id . "&mb_trn_id=" . $mb_transaction_id;

*/

 

//checking here

 

if ($transaction_id && is_object($order) && $merchant_id = MODULE_PAYMENT_MONEYBOOKERS_IPN_REFID) {

 

$transaction_status = $status;

 

//checking on server has disabled now

/*

//checking on the server

 

$url = 'https://www.moneybookers.com/app/query.pl';

if (strlen(MODULE_PAYMENT_MONEYBOOKERS_IPN_CURL_PATH) == 0) {//phpcurl

 

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,$url);

curl_setopt($ch, CURLOPT_FAILONERROR, 1);

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

curl_setopt($ch, CURLOPT_POST, 1);

curl_setopt($ch, CURLOPT_POSTFIELDS, $req);

$mb_response = split(chr(10),curl_exec($ch));

curl_close ($ch);

 

} else {//system curl

 

$command = MODULE_PAYMENT_MONEYBOOKERS_IPN_CURL_PATH . " -k -d \"$req\" " . $url;

exec($command, $mb_response);

 

}

 

$request_flag = false;

if (is_array($mb_response)) {

$message = trim($mb_response[0]);

if (strstr($message, "OK") ) {

$value_string = $mb_response[1];

parse_str($value_string);

if(is_numeric($status)) {

$request_flag = true;

$transaction_status =$status;

}

}

}

*/

//$request_flag all the time true now. It was added for future updates.

 

$md5_string = $merchant_id . $transaction_id . strtoupper(md5(MODULE_PAYMENT_MONEYBOOKERS_IPN_SECRET_WORD)) . $mb_amount . $mb_currency . $status;

 

$result_of_md5 = strtoupper(md5($md5_string));

$request_flag = false;

if ($result_of_md5 == $md5sig) $request_flag = 'True';

 

if ($request_flag) {

 

switch($transaction_status) {

case '-1'://cancel

if (is_numeric(MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_CANCELLED) && (MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_CANCELLED > 0) ) {

$order_status = MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_CANCELLED;

} else {

$order_status = DEFAULT_ORDERS_STATUS_ID;

};

break;

case '2'://ok

if (is_numeric(MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_AFTER) && (MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_AFTER > 0) ) {

$order_status = MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_AFTER;

} else {

$order_status = DEFAULT_ORDERS_STATUS_ID;

};

break;

case '1'://scheduled

if (is_numeric(MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_SCHEDULED) && (MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_SCHEDULED > 0) ) {

$order_status = MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_SCHEDULED;

} else {

$order_status = DEFAULT_ORDERS_STATUS_ID;

};

break;

case '0'://pending

default:

if (is_numeric(MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_PENDING) && (MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_PENDING > 0) ) {

$order_status = MODULE_PAYMENT_MONEYBOOKERS_IPN_ORDER_STATUS_ID_PENDING;

} else {

$order_status = DEFAULT_ORDERS_STATUS_ID;

};

break;

}

 

$sql_data_array = array('orders_status' => $order_status);

 

tep_db_perform(TABLE_ORDERS,$sql_data_array,'update','orders_id='.$order_id);

 

$customer_notification = (SEND_EMAILS == 'true') ? '1' : '0';

$sql_data_array = array('orders_id' => $order_id,

'orders_status_id' => $order_status,

'date_added' => 'now()',

'customer_notified' => $customer_notification);

tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);

 

if( ((int)$transaction_status == 0 || (int)$transaction_status == 2) && $customer_notification) {

 

 

$products_ordered = '';

$subtotal = 0;

$total_tax = 0;

$total_weight = 0;

$total_cost = 0;

 

for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {

 

//------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($order->products[$i]['final_price'], $order->products[$i]['tax']) * $order->products[$i]['qty'];

$total_cost += $order->products[$i]['final_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";

if ($order->delivery['company']) { $email_order .= $order->delivery['company'] . "\n"; };

$email_order .= $order->delivery['name'] . "\n" .

$order->delivery['street_address'] . "\n";

if ($order->delivery['suburb']) { $email_order .= $order->delivery['suburb'] . "\n"; };

$email_order .= $order->delivery['city'] . ', ' . $order->delivery['postcode'] . "\n";

if ($order->delivery['state']) { $email_order .= $order->delivery['state'] . ', '; };

$email_order .= $order->delivery['country'] . "\n";

}

 

$email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" .

EMAIL_SEPARATOR . "\n";

if ($order->billing['company']) { $email_order .= $order->billing['company'] . "\n"; };

$email_order .= $order->billing['name'] . "\n" .

$order->billing['street_address'] . "\n";

if ($order->billing['suburb']) { $email_order .= $order->billing['suburb'] . "\n"; };

$email_order .= $order->billing['city'] . ', ' . $order->billing['postcode'] . "\n";

if ($order->billing['state']) { $email_order .= $order->billing['state'] . ', '; };

$email_order .= $order->billing['country'] . "\n\n";

 

$payment =& $payment;

 

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 (isset($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);

}

 

}

tep_db_query("delete from " .TABLE_CUSTOMERS_BASKET. " where customers_id=".$order->customer['id']);

tep_db_query("delete from " .TABLE_CUSTOMERS_BASKET_ATTRIBUTES. " where customers_id=".$order->customer['id']);

 

echo "OK";

}

} else {

echo "FAIL";

};

 

?>

 

 

 

Tia

Rob

Link to comment
Share on other sites

// load the selected shipping module
require(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping($shipping');

The last line should be

 

$shipping_modules = new shipping($shipping);

If I suggest you edit any file(s) make a backup first - I'm not perfect and neither are you.

 

"Given enough impetus a parallelogramatically shaped projectile can egress a circular orifice."

- Me -

 

"Headers already sent" - The definitive help

 

"Cannot redeclare ..." - How to find/fix it

 

SSL Implementation Help

 

Like this post? "Like" it again over there >

Link to comment
Share on other sites

// load the selected shipping module
require(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping($shipping');

The last line should be

 

$shipping_modules = new shipping($shipping);

 

 

Thanks for sorting that error out. Cancel works fine now. Its always helpful to have a fresh set of eyes look over something like that.

 

 

Hope somebody is able to help with the main problem though. It must be something set up wrong in moneybookers account side. So confused...

Link to comment
Share on other sites

Anybody know what may be causing this error? Haven t heard back from moneybookers yet.

In the file that is causing the error (checkout_moneybookersipn_cancel.php) there is a stray single quote on line 47 (in $shipping')

$shipping_modules = new shipping($shipping');

Link to comment
Share on other sites

In the file that is causing the error (checkout_moneybookersipn_cancel.php) there is a stray single quote on line 47 (in $shipping')

$shipping_modules = new shipping($shipping');

 

 

Thank you. Germ already pointed that out for me though. Works great for the minor problem i had with returning back to checkout. It must be something in accounts but still no word from moneybookers about this problem.

Link to comment
Share on other sites

Hello,

 

In the checkout_moneybookersipn.php

 

try to change the line 306

//echo $moneybookersurl . "&" . $process_button_string;

to

echo $moneybookersurl . "&" . $process_button_string; exit();

 

and show the debug result here

 

 

Stanislav

Link to comment
Share on other sites

https://www.moneybookers.com/app/payment.pl...tion=Challenger Flashlights&detail1_text=Order+%23+19&transaction_id=88888888888839567853&firstname=Test&lastname=Name&address=1 street add&postal_code=8888&city=city&state=&country=SOU&merchant_fields=softwareprovider%2Cdistributor&softwareprovider=holbi&distributor=holbi&[email protected]&status_url=http://www.challengerflashlights.co.za/moneybookers_notify.php&return_url=http://www.challengerflashlights.co.za/checkout_moneybookersipn_after.php&cancel_url=http://www.challengerflashlights.co.za/checkout_moneybookersipn_cancel.php?order_id=19
Link to comment
Share on other sites

Hello,

Yes the amount is 0:

amount=0&amount2=0&amount2_description=Table+Rate+%28Best+Way%29&amount3=0&amount3_description=&currency=EUR

 

 

before the line 274:

$process_button_string = 'pay_to_email=' . MODULE_PAYMENT_MONEYBOOKERS_IPN_ID .

add this:

echo $order->info['total'].'-total
';
echo $currencies->get_value($moneybookers_currency).'-getvalue
';
echo $currencies->get_decimal_places($moneybookers_currency).'-get_decimal_places
';
exit();

 

 

and show the debug result here

 

Stanislav

Link to comment
Share on other sites

Here is the new code.

 

currencies Object ( [currencies] => Array ( [ZAR] => Array ( [title] => Rand [symbol_left] => R [symbol_right] => [decimal_point] => . [thousands_point] => , [decimal_places] => 2 [value] => 1.00000000 ) ) ) print_r

Link to comment
Share on other sites

Hello,

 

As you see your site know only ZAR

while the module tries to pay in EUR

 

you should go to the site admin -> Localization -> Currencies

and add euro currency.

 

Here is how it looks on my test site:

Title: Euro

Code: EUR

 

Symbol Left:

Symbol Right: EUR

 

Decimal Point: .

Thousands Point: ,

Decimal Places: 2

 

Last Updated: 04/07/2009

Value: 1.10360003

 

Example Output:

$30.00 = 33.11EUR

 

Note: If ZAR is set as default currency with value 1.00000000 on your site

then the Value: for the EUR currency will be = EUR / ZAR

 

 

 

Stanislav

Link to comment
Share on other sites

Thank you for taking some time out to help me solve this issue. Works great for EUR unfortunately i need payments done in ZAR if possible.

 

 

Do you know a way of making the module pay in ZAR instead of the site conforming to EUR?

Link to comment
Share on other sites

Thank you for taking some time out to help me solve this issue. Works great for EUR unfortunately i need payments done in ZAR if possible.

 

 

Do you know a way of making the module pay in ZAR instead of the site conforming to EUR?

Hello,

 

If moneybookers allow ZAR currency

 

You should set in your site admin - > modules -> moneybookers module configuration

 

then replace:

if (!in_array($moneybookers_currency, array('EUR', 'USD', 'GBP', 'HKD', 'SGD', 'JPY', 'CAD', 'AUD', 'CHF', 'DKK', 'SEK', 'NOK', 'ILS', 'MYR', 'NZD', 'TWD', 'THB', 'CZK', 'HUF', 'SKK', 'ISK', 'INR'))) {
$moneybookers_currency = 'EUR';
}

 

with:

if (!in_array($moneybookers_currency, array('EUR', 'USD', 'GBP', 'HKD', 'SGD', 'JPY', 'CAD', 'AUD', 'CHF', 'DKK', 'SEK', 'NOK', 'ILS', 'MYR', 'NZD', 'TWD', 'THB', 'CZK', 'HUF', 'SKK', 'ISK', 'INR', 'ZAR'))) {
$moneybookers_currency = 'EUR';
}

 

in the checkout_moneybookersipn.php

 

 

Stanislav

Link to comment
Share on other sites

Looks like it is working. I will make sure to process a transaction during the week as it takes a little time to setup MB accounts in SA. I will then update this thread if all goes accordingly.

 

To germ, Jan Zonjee and Pektsekye (Stanislav) Thank you for all the great support.

 

Rob

Link to comment
Share on other sites

  • 3 weeks later...

I have uploaded a new updated MoneyBookers module with Zillion bug fixes, check it out!

Link to comment
Share on other sites

I have uploaded a new updated MoneyBookers module with Zillion bug fixes, check it out!

I installed Your contribution from 26 Jul 2009 to clean installation of MS2.2 RC2a.

It works good in Opera browser, but in IE when pressing "Confirm Order" button it opens whole site in the center part of original page instead of transferring me to moneybookers.

problem.jpg

What is the problem?

Can You help me?

Thank You!

Link to comment
Share on other sites

Yes, it basically suppose to open IFRAME when you click confirm, not redirect you to Moneybookers, so Opera's behavior is the wrong one.

This mod works with IFRAME before I updated it, check the previous uploads, it was added in a previous version.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...