Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Failed to write session data (files).


Paulz

Recommended Posts

Posted

On my worldpay payment received page I get the following warning:

 

Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0

 

Ive looked at a number of solutions on the forum, but cant sort the problem out.

 

Can anyone Help please :(

Posted

this might help, in your config files for both admin and catalog, switch the very bottem control to 'mysql'. This will make the files use MYSQL to handle all the sessions instead of a temp directory. This is how I fixed this problem.

 

DF

Posted

Thanks Dennis,

 

I'd already tried that and it cleared that error but resulted in the following errors

 

1062 - Duplicate entry '1b55cca38d77e9f6db5ab4dc136e0fc9' for key 1

 

insert into sessions values ('1b55cca38d77e9f6db5ab4dc136e0fc9?language=en', '1077094418', 'cart|O:12:\"shoppingcart\":4:{s:8:\"contents\";a:0:{}s:5:\"total\";i:0;s:6:\"weight\";i:0;s:12:\"content_type\";b:0;}language|s:7:\"english\" ......etc etc

Posted

Hi Paul,

 

Well there are a couple of different solutions for you to consider.

 

1. If you can set up your sessions directory (i.e. /tmp or maybe some where in your home directory) and chmod that directory 777 - full read/write/executable, then set this in your admin configuration.

 

2. The worldpay module is adding the "?language=en" to the end of the session id. This causes the session id to be longer than 32 characters and messes up the login in sessions.php that trys to either update or insert sessions. This only occurs if SSL is set to true. If you set SSL to false the error does not occur.

 

Matt (ecartz) deserves the credit on coming up with the solution on this one. Although Chris never responded in the following the thread that it did indeed fix his problem.

 

http://www.oscommerce.com/forums/index.php?showtopic=77591&hl=

 

I hope one of the above helps you out.

 

Tom

Posted

Thanks Tom,

 

Ive tried all of the suggestions, on each occasion they seem to provide more errors than the original.

 

Im beggining to think I should ignore the warning as everything works fine with it?

 

Warning: Failed to write session data (files). Please verify that the current setting of session.save_path is correct (/tmp) in Unknown on line 0

 

 

Any other suggestions appreciated :huh:

 

Paul

Posted

Thanks Tom after all your link did help:

 

I gave it one last try following the link from Matt (ecartz)

http://www.oscommerce.com/forums/index.php?showtopic=77591&hl=

to make sure Id made no mistakes previously, and no it didnt work!!

 

I Reversed the changes Id made but then made a mistake and forgot to change

the last line in worldpay.php and yes you guest it, IT WORKED!!!!!!!! :lol:

 

So all that was required for me was 1 simple change to the code

 

The change was around line 123

from

// tep_draw_hidden_field('MC_callback', $worldpay_callback[1] . '?language=' . $language_code) .

 

to:

tep_draw_hidden_field('MC_callback', $worldpay_callback[1]) .

 

with this and changing all the configure.php files:

from:

define('STORE_SESSIONS', '');

To:

define('STORE_SESSIONS', 'mysql');

 

did the trick!!

 

 

The revised version of the worldpay.php that worked for me:

 

<?php

/*

$Id: worldpay.php,v MS1a 2003/04/06 21:30

Author : Graeme Conkie ([email protected])

Title: WorldPay Payment Callback Module V4.0 Version 1.4

 

Revisions:

Version MS1a Cleaned up code, moved static English to language file to allow for bi-lingual use,

Now posting language code to WP, Redirect on failure now to Checkout Payment,

Reduced re-direct time to 8 seconds, added MD5, made callback dynamic

NOTE: YOU MUST CHANGE THE CALLBACK URL IN WP ADMIN TO <wpdisplay item="MC_callback">

Version 1.4 Removes boxes to prevent users from clicking away before update,

Fixes currency for Yen,

Redirects to Checkout_Process after 10 seconds or click by user

Version 1.3 Fixes problem with Multi Currency

Version 1.2 Added Sort Order and Default order status to work with snapshots after 14 Jan 2003

Version 1.1 Added Worldpay Pre-Authorisation ability

Version 1.0 Initial Payment Module

 

osCommerce, Open Source E-Commerce Solutions

http://www.oscommerce.com

 

Copyright © 2003

Released under the GNU General Public License

*/

 

class worldpay {

var $code, $title, $description, $enabled;

 

// class constructor

function worldpay() {

$this->code = 'worldpay';

$this->title = MODULE_PAYMENT_WORLDPAY_TEXT_TITLE;

$this->description = MODULE_PAYMENT_WORLDPAY_TEXT_DESCRIPTION;

$this->sort_order = MODULE_PAYMENT_WORLDPAY_SORT_ORDER;

$this->enabled = ((MODULE_PAYMENT_WORLDPAY_STATUS == 'True') ? true : false);

if ((int)MODULE_PAYMENT_WORLDPAY_ORDER_STATUS_ID > 0) {

$this->order_status = MODULE_PAYMENT_WORLDPAY_ORDER_STATUS_ID;

}

 

if ( ($this->enabled == true) && ((int)MODULE_PAYMENT_WORLDPAY_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_WORLDPAY_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;

}

}

$this->form_action_url = 'https://select.worldpay.com/wcc/purchase';

}

 

// class methods

function javascript_validation() {

return false;

}

 

function selection() {

return array('id' => $this->code,

'module' => $this->title);

}

 

function pre_confirmation_check() {

return false;

}

 

function confirmation() {

return false;

}

 

function process_button() {

// Ian-san: Need to declare language_id global here 6/4/2003:

global $HTTP_POST_VARS, $languages_id, $shipping_cost, $total_cost, $shipping_selected, $shipping_method, $currencies, $currency, $customer_id , $order;

$worldpay_url = tep_session_name() . '=' . tep_session_id();

 

// Multi Currency - Graeme Conkie ver 1.3 - Set up variable

// Added decimal point code - contributed by Ian Davidson (Feb 08,2003) - For Yen currency

$OrderAmt = number_format($order->info['total'] * $currencies->get_value($currency), $currencies->get_decimal_places($currency), '.', '') ;

 

// Multi Currency - ver 1.3

$process_button_string =

tep_draw_hidden_field('instId', MODULE_PAYMENT_WORLDPAY_ID) .

tep_draw_hidden_field('currency', $currency) .

tep_draw_hidden_field('desc', 'Purchase from '.STORE_NAME) .

 

// Send URL and session name - contributed by Nick Vermeulen 08 Feb, 2003

tep_draw_hidden_field('cartId', $worldpay_url ) .

 

// Assign Multi Currency Variable to Amount

tep_draw_hidden_field('amount', $OrderAmt) ;

 

// Pre Auth Mod 3/1/2002 - Graeme Conkie

if (MODULE_PAYMENT_WORLDPAY_USEPREAUTH == 'True') $process_button_string .= tep_draw_hidden_field('authMode', MODULE_PAYMENT_WORLDPAY_PREAUTH);

 

// Ian-san: Create callback and language links here 6/4/2003:

$callback_url = tep_href_link(FILENAME_WPCALLBACK);

$worldpay_callback = explode('http://', $callback_url);

$language_code_raw = tep_db_query("select code from " . TABLE_LANGUAGES . " where languages_id ='$languages_id'");

$language_code_array = tep_db_fetch_array($language_code_raw);

$language_code = $language_code_array['code'];

 

 

 

$address = htmlspecialchars($order->customer['street_address'] . "\n" . $order->customer['suburb'] . "\n" . $order->customer['city'] . "\n" . $order->customer['state'], ENT_QUOTES);

$process_button_string .=

tep_draw_hidden_field('testMode', MODULE_PAYMENT_WORLDPAY_MODE) .

tep_draw_hidden_field('name', $order->customer['firstname'] . ' ' . $order->customer['lastname']) .

tep_draw_hidden_field('address', $address) .

tep_draw_hidden_field('postcode', $order->customer['postcode']) .

tep_draw_hidden_field('country', $order->customer['country']['iso_code_2']) .

tep_draw_hidden_field('tel', $order->customer['telephone']) .

tep_draw_hidden_field('myvar', 'Y') .

tep_draw_hidden_field('fax', $order->customer['fax']) .

tep_draw_hidden_field('email', $order->customer['email_address']) .

 

// Ian-san: Added dynamic callback and languages link here 6/4/2003:

tep_draw_hidden_field('lang', $language_code) .

tep_draw_hidden_field('MC_callback', $worldpay_callback[1]) .

// tep_draw_hidden_field('MC_callback', $worldpay_callback[1] . '?language=' . $language_code) .

tep_draw_hidden_field('MC_oscsid', $oscSid);

 

// Ian-san: Added MD5 here 6/4/2003:

if (MODULE_PAYMENT_WORLDPAY_USEMD5 == '1') {

$md5_signature_fields = 'amount:language:email';

$md5_signature = MODULE_PAYMENT_WORLDPAY_MD5KEY . ':' . (number_format($order->info['total'] * $currencies->get_value($currency), $currencies->get_decimal_places($currency), '.', '')) . ':' . $language_code . ':' . $order->customer['email_address'];

$md5_signature_md5 = md5($md5_signature);

 

$process_button_string .= tep_draw_hidden_field('signatureFields', $md5_signature_fields ) .

tep_draw_hidden_field('signature',$md5_signature_md5);

}

return $process_button_string ;

}

 

function before_process() {

global $HTTP_POST_VARS;

}

 

function after_process() {

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_WORLDPAY_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, set_function, date_added) values ('Enable WorldPay Module', 'MODULE_PAYMENT_WORLDPAY_STATUS', 'True', 'Do you want to accept WorldPay payments?', '6', '1', 'tep_cfg_select_option(array(\'True\', \'False\'), ', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Worldpay Installation ID', 'MODULE_PAYMENT_WORLDPAY_ID', '00000', 'Your WorldPay Select Junior ID', '6', '2', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Mode', 'MODULE_PAYMENT_WORLDPAY_MODE', '100', 'The mode you are working in (100 = Test Mode Accept, 101 = Test Mode Decline, 0 = Live', '6', '5', now())");

 

// Ian-san: Added MD5 here 6/4/2003:

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Use MD5', 'MODULE_PAYMENT_WORLDPAY_USEMD5', '0', 'Use MD5 encyption for transactions? (1 = Yes, 0 = No)', '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 ('MD5 secret key', 'MODULE_PAYMENT_WORLDPAY_MD5KEY', '', 'MD5 secret key. Must also be entered into Worldpay installation config', '6', '5', now())");

 

// Pre Auth Mod - Graeme Conkie 13/1/2003

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Sort order of display.', 'MODULE_PAYMENT_WORLDPAY_SORT_ORDER', '0', 'Sort order of display. Lowest is displayed first.', '6', '0', 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 ('Use Pre-Authorisation?', 'MODULE_PAYMENT_WORLDPAY_USEPREAUTH', 'False', 'Do you want to pre-authorise payments? Default=False. You need to request this from WorldPay before using it.', '6', '3', 'tep_cfg_select_option(array(\'True\', \'False\'), ', 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 ('Set Order Status', 'MODULE_PAYMENT_WORLDPAY_ORDER_STATUS_ID', '0', 'Set the status of orders made with this payment module to this value', '6', '0', 'tep_cfg_pull_down_order_statuses(', 'tep_get_order_status_name', now())");

tep_db_query("insert into " . TABLE_CONFIGURATION . " (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Pre-Auth', 'MODULE_PAYMENT_WORLDPAY_PREAUTH', 'A', 'The mode you are working in (A = Pay Now, E = Pre Auth). Ignored if Use PreAuth is False.', '6', '4', now())");

 

// Ian-san: Added MD5 here 6/4/2003:

tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_WORLDPAY_USEMD5'");

tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key = 'MODULE_PAYMENT_WORLDPAY_MD5KEY'");

}

 

function remove() {

tep_db_query("delete from " . TABLE_CONFIGURATION . " where configuration_key in ('" . implode("', '", $this->keys()) . "')");

}

 

function keys() {

return array('MODULE_PAYMENT_WORLDPAY_STATUS', 'MODULE_PAYMENT_WORLDPAY_ID','MODULE_PAYMENT_WORLDPAY_MODE','MODULE_PAYMENT_WORLDPAY_USEPREAUTH','MODULE_PAYMENT_WORLDPAY_PREAUTH','MODULE_PAYMENT_WORLDPAY_SORT_ORDER','MODULE_PAYMENT_WORLDPAY_ORDER_STATUS_ID');

}

}

?>

  • 3 months later...
Posted

the "?" should be "&"

tep_draw_hidden_field('MC_callback', $worldpay_callback[1] . '&language=' . $language_code)

Posted

ignore my previous msg, use the below instead

 

in catalog/includes/modules/payment/worldpay.php, find:

"tep_draw_hidden_field('MC_callback', $worldpay_callback[1] . '?language=' . $language_code) "

change to:

// tep_draw_hidden_field('MC_callback', $worldpay_callback[1] . '?language=' . $language_code) .

//remove ...language=......

tep_draw_hidden_field('MC_callback', $worldpay_callback[1]) .

//add this line

tep_draw_hidden_field('MC_language', $language_code) .

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...