Jump to content

Recommended Posts

I am using CS-Cart as a shopping cart system and am trying to sort out the payment processor.  I want to use "PayPal Standard" but its not working.

 

I keep getting the error: You have entered an invalid quantity value. A quantity value must be an integer greater than or equal to one.

 

 

This is the PayPal page which I think may contain an error (possibly with the "quantity" value):

 

Can anyone help? :S!!

 

Plz :)

 

<?php

 

 

//

// $Id: paypal.php 9088 2010-03-15 10:40:51Z 2tl $

//

 

if ( !defined('AREA') ) { die('Access denied'); }

 

// Return from paypal website

if (defined('PAYMENT_NOTIFICATION')) {

if ($mode == 'notify' && !empty($_REQUEST['order_id'])) {

 

if (fn_check_payment_script('paypal.php', $_REQUEST['order_id'], $processor_data)) {

 

$pp_response = array();

 

$order_info = fn_get_order_info($_REQUEST['order_id']);

 

$pp_mc_gross = !empty($_REQUEST['mc_gross']) ? $_REQUEST['mc_gross'] : 0;

 

if ($pp_mc_gross != $order_info['total']) {

$pp_response['order_status'] = 'F';

$pp_response['reason_text'] = fn_get_lang_var('order_total_not_correct');

$pp_response['transaction_id'] = @$_REQUEST['txn_id'];

} elseif (stristr($_REQUEST['payment_status'], 'Completed')) {

$params = $processor_data['params'];

$paypal_host = ($params['mode'] == 'test' ? "www.sandbox.paypal.com" : "www.paypal.com");

$post_data = array();

$paypal_post = $_REQUEST;

unset($paypal_post['dispatch']);

 

$paypal_post["cmd"] = "_notify-validate";

foreach ($paypal_post as $k => $v) {

$post_data[] = "$k=$v";

}

 

list($headers, $result) = fn_https_request('POST', "https://$paypal_host:443/cgi-bin/webscr", $post_data);

 

if (stristr($result, 'VERIFIED')) {

$pp_response['order_status'] = 'P';

$pp_response['reason_text'] = '';

$pp_response['transaction_id'] = @$_REQUEST['txn_id'];

} elseif (stristr($result, 'INVALID')) {

$pp_response['order_status'] = 'D';

$pp_response['reason_text'] = '';

$pp_response['transaction_id'] = @$_REQUEST['txn_id'];

} else {

$pp_response['order_status'] = 'F';

$pp_response['reason_text'] = '';

$pp_response['transaction_id'] = @$_REQUEST['txn_id'];

}

} elseif (stristr($_REQUEST['payment_status'], 'Pending')) {

$pp_response['order_status'] = 'O';

$pp_response['reason_text'] = '';

$pp_response['transaction_id'] = @$_REQUEST['txn_id'];

 

} elseif (stristr($_REQUEST['payment_status'], 'Refunded')) {

$_order = db_get_row("SELECT status, total FROM ?:orders WHERE order_id = ?i", $_REQUEST['order_id']);

 

$pp_response['order_status'] = (floatval($_order['total']) - abs(floatval($_REQUEST['payment_gross'])) == 0) ? 'I' : $_order['status'];

$pp_response['reason_text'] = '';

$pp_response['transaction_id'] = @$_REQUEST['txn_id'];

 

} else {

$pp_response['order_status'] = 'D';

$pp_response['reason_text'] = '';

$pp_response['transaction_id'] = @$_REQUEST['txn_id'];

}

 

fn_finish_payment($_REQUEST['order_id'], $pp_response);

}

exit;

 

} elseif ($mode == 'return') {

fn_order_placement_routines($_REQUEST['order_id'], false);

 

} elseif ($mode == 'cancel') {

$order_info = fn_get_order_info($_REQUEST['order_id']);

 

$pp_response['order_status'] = 'F';

$pp_response["reason_text"] = fn_get_lang_var('text_transaction_declined');

 

fn_finish_payment($_REQUEST['order_id'], $pp_response, false);

fn_order_placement_routines($_REQUEST['order_id']);

}

 

} else {

 

$paypal_account = $processor_data['params']['account'];

 

$current_location = Registry::get('config.current_location');

 

if ($processor_data['params']['mode'] == 'test') {

$paypal_url = "https://www.sandbox.paypal.com/cgi-bin/webscr";

} else {

$paypal_url = "https://www.paypal.com/cgi-bin/webscr";

}

 

$paypal_currency = $processor_data['params']['currency'];

$paypal_item_name = $processor_data['params']['item_name'];

//Order Total

$paypal_total = fn_format_price($order_info['total'] - fn_order_shipping_cost($order_info));

$paypal_shipping = fn_order_shipping_cost($order_info);

$paypal_order_id = $processor_data['params']['order_prefix'].(($order_info['repaid']) ? ($order_id .'_'. $order_info['repaid']) : $order_id);

 

$_phone = preg_replace('/[^\d]/', '', $order_info['phone']);

$_ph_a = $_ph_b = $_ph_c = '';

 

if ($order_info['b_country'] == 'US') {

$_phone = substr($_phone, -10);

$_ph_a = substr($_phone, 0, 3);

$_ph_b = substr($_phone, 3, 3);

$_ph_c = substr($_phone, 6, 4);

} elseif ($order_info['b_country'] == 'GB') {

if ((strlen($_phone) == 11) && in_array(substr($_phone, 0, 2), array('01', '02', '07', '08'))) {

$_ph_a = '44';

$_ph_b = substr($_phone, 1);

} elseif (substr($_phone, 0, 2) == '44') {

$_ph_a = '44';

$_ph_b = substr($_phone, 2);

} else {

$_ph_a = '44';

$_ph_b = $_phone;

}

} elseif ($order_info['b_country'] == 'AU') {

if ((strlen($_phone) == 10) && $_phone[0] == '0') {

$_ph_a = '61';

$_ph_b = substr($_phone, 1);

} elseif (substr($_phone, 0, 2) == '61') {

$_ph_a = '61';

$_ph_b = substr($_phone, 2);

} else {

$_ph_a = '61';

$_ph_b = $_phone;

}

} else {

$_ph_a = substr($_phone, 0, 3);

$_ph_b = substr($_phone, 3);

}

 

// US states

if (strlen($order_info['b_state'] == 2)) {

$_b_state = $order_info['b_state'];

// all other states

} else {

$_b_state = fn_get_state_name($order_info['b_state'], $order_info['b_country']);

}

 

$msg = fn_get_lang_var('text_cc_processor_connection');

$msg = str_replace('[processor]', 'PayPal', $msg);

echo <<<EOT

<html>

<body onLoad="document.paypal_form.submit();">

<form action="{$paypal_url}" method="post" name="paypal_form">

<input type=hidden name="charset" value="utf-8">

<input type=hidden name="cmd" value="_cart">

<input type=hidden name="custom" value="$order_id">

<input type=hidden name="invoice" value="$paypal_order_id">

<input type=hidden name="redirect_cmd" value="_xclick">

<input type=hidden name="rm" value="2">

<input type=hidden name="email" value="{$order_info['email']}">

<input type=hidden name="first_name" value="{$order_info['b_firstname']}">

<input type=hidden name="last_name" value="{$order_info['b_lastname']}">

<input type=hidden name="address1" value="{$order_info['b_address']}">

<input type=hidden name="address2" value="{$order_info['b_address_2']}">

<input type=hidden name="country" value="{$order_info['b_country']}">

<input type=hidden name="city" value="{$order_info['b_city']}">

<input type=hidden name="state" value="{$_b_state}">

<input type=hidden name="zip" value="{$order_info['b_zipcode']}">

<input type=hidden name="day_phone_a" value="{$_ph_a}">

<input type=hidden name="day_phone_b" value="{$_ph_b}">

<input type=hidden name="day_phone_c" value="{$_ph_c}">

<input type=hidden name="night_phone_a" value="{$_ph_a}">

<input type=hidden name="night_phone_b" value="{$_ph_b}">

<input type=hidden name="night_phone_c" value="{$_ph_c}">

<input type=hidden name="business" value="{$paypal_account}">

<input type=hidden name="item_name" value="{$paypal_item_name}">

<input type=hidden name="amount" value="{$paypal_total}">

<input type=hidden name="upload" value="1">

<input type=hidden name="handling_cart" value="{$paypal_shipping}">

<input type=hidden name="currency_code" value="{$paypal_currency}">

<input type=hidden name="return" value="$current_location/$index_script?dispatch=payment_notification.return&payment=paypal&order_id=$order_id">

<input type=hidden name="cancel_return" value="$current_location/$index_script?dispatch=payment_notification.cancel&payment=paypal&order_id=$order_id" />

<input type=hidden name="notify_url" value="$current_location/$index_script?dispatch=payment_notification.notify&payment=paypal&order_id=$order_id">

<input type=hidden name="bn" value="ST_ShoppingCart_Upload_US">

EOT;

 

$i = 1;

// Products

if (empty($order_info['use_gift_certificates']) && !floatval($order_info['subtotal_discount'])) {

if (!empty($order_info['items'])) {

foreach ($order_info['items'] as $k => $v) {

$suffix = '_'.($i++);

$v['product'] = htmlspecialchars($v['product']);

$v['price'] = fn_format_price(($v['subtotal'] - fn_external_discounts($v)) / $v['amount']);

echo <<<EOT

<input type="hidden" name="item_name{$suffix}" value="{$v['product']}" />

<input type="hidden" name="amount{$suffix}" value="{$v['price']}" />

<input type="hidden" name="quantity{$suffix}" value="{$v['amount']}" />

EOT;

if (!empty($v['product_options'])) {

foreach ($v['product_options'] as $_k => $_v) {

$_v['option_name'] = htmlspecialchars($_v['option_name']);

$_v['variant_name'] = htmlspecialchars($_v['variant_name']);

echo <<<EOT

<input type="hidden" name="on{$_k}{$suffix}" value="{$_v['option_name']}" />

<input type="hidden" name="os{$_k}{$suffix}" value="{$_v['variant_name']}" />

EOT;

}

}

}

}

 

// Gift Certificates

if (!empty($order_info['gift_certificates'])) {

foreach ($order_info['gift_certificates'] as $k => $v) {

$suffix = '_'.($i++);

$v['gift_cert_code'] = htmlspecialchars($v['gift_cert_code']);

$v['amount'] = (!empty($v['extra']['exclude_from_calculate'])) ? 0 : $v['amount'];

echo <<<EOT

<input type="hidden" name="item_name{$suffix}" value="{$v['gift_cert_code']}" />

<input type="hidden" name="amount{$suffix}" value="{$v['amount']}" />

<input type="hidden" name="quantity{$suffix}" value="1" />

EOT;

}

}

 

// Payment surcharge

if (floatval($order_info['payment_surcharge'])) {

$suffix = '_' . ($i++);

$name = fn_get_lang_var('surcharge');

 

echo <<<EOT

<input type="hidden" name="item_name{$suffix}" value="{$name}" />

<input type="hidden" name="amount{$suffix}" value="{$order_info['payment_surcharge']}" />

<input type="hidden" name="quantity{$suffix}" value="1" />

EOT;

}

} else {

$total_description = fn_get_lang_var('total_product_cost');

echo <<<EOT

<input type="hidden" name="item_name_1" value="{$total_description}" />

<input type="hidden" name="amount_1" value="{$paypal_total}" />

<input type="hidden" name="quantity_1" value="1" />

EOT;

}

 

 

echo <<<EOT

</form>

<div align=center>{$msg}</div>

</body>

</html>

EOT;

 

fn_flush();

}

exit;

?>

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

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

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  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...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.