| Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
| Autor |
Nachricht |
ar Site Admin
Anmeldedatum: 30.05.2006 Beiträge: 78
|
Verfasst am: 19.05.2008, 11:06 Titel: Fehler in PayPal IPN Modul (falsche Währung bei PayPal) |
|
|
Das Modul hat als Währung immer Euro gewählt, auch wenn die Standardwährung im Shop auf Schweizer Franken gestellt war.
Grund war ein Fehler in der Datei paypal_ipn.php aus dem Verzeichnis includes/modules/payment
In der zweiten if-Anweisung der Funktion process_button() wird geprüft, welche Währungen für PayPal zugelassen sind.
Ich habe diese Währungen mal an die aktuell bei PayPal erlaubten Währungen angepasst (https://www.paypal.com/de/cgi-bin/webscr?cmd=p/sell/mc/mc_intro-outside):
| Code: |
/*
* Kanadische Dollar (CAD)
* Euro (EUR)
* Britische Pfund (GBP)
* US-Dollar (USD)
* Japanische Yen (JPY)
* Australische Dollar (AUD)
* Neuseeländische Dollar (NZD)
* Schweizer Franken (CHF)
* Hongkong-Dollar (HKD)
* Singapur-Dollar (SGD)
* Schwedische Kronen (SEK)
* Dänische Kronen (DKK)
* Polnische Zloty (PLN)
* Norwegische Kronen (NOK)
* Ungarische Forint (HUF)
* Tschechische Kronen (CZK)
*/
if (!in_array($my_currency, array ('CAD', 'EUR', 'GBP', 'USD', 'JPY', 'AUD', 'NZD', 'CHF', 'HKD', 'SGD', 'SEK', 'DKK', 'PLN', 'NOK', 'HUF', 'CZK'))) {
$my_currency = 'EUR';
}
|
Dabei ist auch gleich noch ein weiterer Fehler im Script aufgefallen. In der ersten if-Anweisung der Funktion process_button() wurde eine Falsche Konstante verwendet. Hier muss MODULE_PAYMENT_PAYPAL_CURRENCY durch MODULE_PAYMENT_PAYPAL_IPN_CURRENCY ersetzt werden.
Die komplette Datei gibte es hier:
| Code: |
<?php
/* -----------------------------------------------------------------------------------------
$Id: paypal_ipn.php v1.0 998 2005-08-16 14:18:20Z HHGAG $
XT-Commerce - community made shopping
http://www.xt-commerce.com
Copyright (c) 2005 XT-Commerce
-----------------------------------------------------------------------------------------
based on:
(c) 2000-2001 The Exchange Project (earlier name of osCommerce)
(c) 2002-2003 osCommerce(paypal.php,v 1.39 2003/01/29); www.oscommerce.com
(c) 2003 nextcommerce (paypal.php,v 1.8 2003/08/24); www.nextcommerce.org
Released under the GNU General Public License
---------------------------------------------------------------------------------------*/
class paypal_ipn {
var $code, $title, $description, $enabled, $identifier;
function paypal_ipn() {
global $order;
$this->code = 'paypal_ipn';
$this->title = MODULE_PAYMENT_PAYPAL_IPN_TEXT_TITLE;
$this->description = MODULE_PAYMENT_PAYPAL_IPN_TEXT_DESCRIPTION;
$this->sort_order = MODULE_PAYMENT_PAYPAL_IPN_SORT_ORDER;
$this->enabled = ((MODULE_PAYMENT_PAYPAL_IPN_STATUS == 'True') ? true : false);
$this->identifier = 'xt:Commerce PayPal IPN v1.0';
if ((int)MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID > 0) {
$this->order_status = MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID;
}
if (is_object($order))
$this->update_status();
$this->email_footer = MODULE_PAYMENT_PAYPAL_IPN_TEXT_EMAIL_FOOTER;
if (MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER == 'Live') {
$this->form_action_url = 'https://www.paypal.com/cgi-bin/webscr';
}else{
$this->form_action_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
}
}
function update_status() {
global $order;
if (($this->enabled == true) && ((int)MODULE_PAYMENT_PAYPAL_IPN_ZONE > 0)) {
$check_flag = false;
$check_query = xtc_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_PAYPAL_IPN_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id");
while ($check = xtc_db_fetch_array($check_query)) {
if ($check['zone_id'] < 1) {
$check_flag = true;
break;
}
elseif ($check['zone_id'] == $order->billing['zone_id']) {
$check_flag = true;
break;
}
}
if ($check_flag == false) {
$this->enabled = false;
}
}
}
function javascript_validation() {
return false;
}
function selection() {
return array('id' => $this->code,
'module' => $this->title);
}
function pre_confirmation_check() {
return false;
}
function confirmation() {
global $cartID;
if (xtc_session_is_registered('cartID')) {
xtc_session_register('order_ident_key');
$_SESSION['order_ident_key'] = xtc_input_validation(md5($_SESSION['cartID'] . '-' . $_SESSION['customer_id']),int,'');
}
return array('title' => MODULE_PAYMENT_PAYPAL_IPN_TEXT_DESCRIPTION );
}
function process_button() {
global $order, $xtPrice;
if (MODULE_PAYMENT_PAYPAL_IPN_CURRENCY == 'Selected Currency') {
$my_currency = $_SESSION['currency'];
} else {
$my_currency = substr(MODULE_PAYMENT_PAYPAL_IPN_CURRENCY, 5);
}
/*
* Kanadische Dollar (CAD)
* Euro (EUR)
* Britische Pfund (GBP)
* US-Dollar (USD)
* Japanische Yen (JPY)
* Australische Dollar (AUD)
* Neuseeländische Dollar (NZD)
* Schweizer Franken (CHF)
* Hongkong-Dollar (HKD)
* Singapur-Dollar (SGD)
* Schwedische Kronen (SEK)
* Dänische Kronen (DKK)
* Polnische Zloty (PLN)
* Norwegische Kronen (NOK)
* Ungarische Forint (HUF)
* Tschechische Kronen (CZK)
*/
if (!in_array($my_currency, array ('CAD', 'EUR', 'GBP', 'USD', 'JPY', 'AUD', 'NZD', 'CHF', 'HKD', 'SGD', 'SEK', 'DKK', 'PLN', 'NOK', 'HUF', 'CZK'))) {
$my_currency = 'EUR';
}
$parameters = array();
$parameters['cmd'] = '_xclick';
$parameters['item_name'] = STORE_NAME;
if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0 && $_SESSION['customers_status']['customers_status_add_tax_ot'] == 1) {
$parameters['amount'] = $order->info['total'] + $order->info['tax'];
} else {
$parameters['amount'] = $order->info['total'];
}
if ($_SESSION['currency'] == $my_currency) {
$parameters['shipping'] = round($order->info['shipping_cost'], $xtPrice->get_decimal_places($my_currency));
$parameters['amount'] = round($parameters['amount'], $xtPrice->get_decimal_places($my_currency)) - $parameters['shipping'];
} else {
$parameters['shipping'] = round($xtPrice->xtcCalculateCurrEx($order->info['shipping_cost'], $my_currency), $xtPrice->get_decimal_places($my_currency));
$parameters['amount'] = round($xtPrice->xtcCalculateCurrEx($parameters['amount'], $my_currency), $xtPrice->get_decimal_places($my_currency)) - $parameters['shipping'];
}
$parameters['business'] = MODULE_PAYMENT_PAYPAL_IPN_ID;
$parameters['currency_code'] = $my_currency;
$parameters['invoice'] = $_SESSION['order_ident_key'];
$parameters['custom'] = $_SESSION['customer_id'];
$parameters['no_shipping'] = '1';
$parameters['no_note'] = '1';
$parameters['notify_url'] = xtc_href_link('ipn.php', '', 'SSL', false, false);
$parameters['return'] = xtc_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
$parameters['cancel_return'] = xtc_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL');
// Add missing variables to prepopulate PayPal form. -- hostmistress 20050210
$parameters['first_name'] = $order->billing['firstname'];
$parameters['last_name'] = $order->billing['lastname'];
$parameters['address1'] = $order->billing['street_address'];
$parameters['address2'] = $order->billing['suburb'];
$parameters['email'] = $order->customer['email_address'];
$parameters['night_phone_a'] = $order->customer['telephone'];
$parameters['city'] = $order->billing['city'];
if ($order->billing['country']['iso_code_2']=='US') {
$order->billing['state'] = xtc_get_zone_code($order->billing['country_id'], $order->billing['zone_id'], $order->billing['state']);
}
$parameters['state'] = $order->billing['state'];
$parameters['zip'] = $order->billing['postcode'];
$parameters['country'] = $order->billing['country']['iso_code_2'];
$parameters['bn'] = $this->identifier;
if(xtc_not_null(MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE)) {
$parameters['page_style'] = MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE;
}
if (MODULE_PAYMENT_PAYPAL_IPN_EWP_STATUS == 'True') {
$parameters['cert_id'] = MODULE_PAYMENT_PAYPAL_IPN_EWP_CERT_ID;
$random_string = rand(100000, 999999) . '-' . $customer_id . '-';
$data = '';
while (list($key, $value) = each($parameters)) {
$data .= $key . '=' . $value . "\n";
}
$fp = fopen(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt', 'w');
fwrite($fp, $data);
fclose($fp);
unset($data);
if (function_exists('openssl_pkcs7_sign') && function_exists('openssl_pkcs7_encrypt')) {
openssl_pkcs7_sign(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt', MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt', file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY), file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY), array('From' => MODULE_PAYMENT_PAYPAL_IPN_ID), PKCS7_BINARY);
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt');
// remove headers from the signature
$signed = file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');
$signed = explode("\n\n", $signed);
$signed = base64_decode($signed[1]);
$fp = fopen(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt', 'w');
fwrite($fp, $signed);
fclose($fp);
unset($signed);
openssl_pkcs7_encrypt(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt', MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt', file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY), array('From' => MODULE_PAYMENT_PAYPAL_IPN_ID), PKCS7_BINARY);
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');
// remove headers from the encrypted result
$data = file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');
$data = explode("\n\n", $data);
$data = '-----BEGIN PKCS7-----' . "\n" . $data[1] . "\n" . '-----END PKCS7-----';
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');
}else{
exec(MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL . ' smime -sign -in ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt -signer ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY . ' -inkey ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY . ' -outform der -nodetach -binary > ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt');
exec(MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL . ' smime -encrypt -des3 -binary -outform pem ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY . ' < ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt > ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');
$fh = fopen(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt', 'rb');
$data = fread($fh, filesize(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt'));
fclose($fh);
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');
}
$process_button_string = xtc_draw_hidden_field('cmd', '_s-xclick') . xtc_draw_hidden_field('encrypted', $data);
unset($data);
}else{
while (list($key, $value) = each($parameters)) {
$process_button_string.=xtc_draw_hidden_field($key, $value);
}
}
return $process_button_string;
}
function before_process() {
return false;
}
function after_process() {
global $insert_id;
if ($this->order_status)
xtc_db_query("UPDATE ". TABLE_ORDERS ." SET orders_status='0' WHERE orders_id='".$insert_id."'");
xtc_db_query("UPDATE ". TABLE_ORDERS_STATUS_HISTORY ." SET orders_status='0' WHERE orders_id='".$insert_id."'");
}
function output_error() {
return false;
}
function check() {
if(!isset($this->_check)) {
$check_query = xtc_db_query("SELECT configuration_value
FROM " . TABLE_CONFIGURATION . "
WHERE configuration_key = 'MODULE_PAYMENT_PAYPAL_IPN_STATUS'");
$this->_check = xtc_db_num_rows($check_query);
}
return $this->_check;
}
function install() {
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_STATUS', 'False', '6', '3', 'xtc_cfg_select_option(array(\'True\', \'False\'), ', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " ( configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_ID', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_CURRENCY', 'Only EUR', '6', '6', 'xtc_cfg_select_option(array(\'Selected Currency\',\'Only AUD\',\'Only USD\',\'Only CAD\',\'Only EUR\',\'Only GBP\',\'Only JPY\'), ', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_SORT_ORDER', '0', '6', '0', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_ALLOWED', '', '6', '0', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, use_function, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_ZONE', '0', '6', '2', 'xtc_get_zone_class_title', 'xtc_cfg_pull_down_zone_classes(', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, use_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID', '0', '6', '0', 'xtc_cfg_pull_down_order_statuses(', 'xtc_get_order_status_name', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, use_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_ORDER_STATUS_ID', '0', '6', '0', 'xtc_cfg_pull_down_order_statuses(', 'xtc_get_order_status_name', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id,sort_order, set_function, use_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_DENIED_ORDER_STATUS_ID', '0', '6', '0', 'xtc_cfg_pull_down_order_statuses(', 'xtc_get_order_status_name', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER', 'Testing', '6', '6', 'xtc_cfg_select_option(array(\'Testing\',\'Live\'), ', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_DEBUG_EMAIL', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_STATUS', 'False', '6', '3', 'xtc_cfg_select_option(array(\'True\', \'False\'), ', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_CERT_ID', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY', '/tmp', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL', '/usr/bin/openssl', '6', '4', now())");
xtc_db_query("ALTER TABLE " . TABLE_ORDERS . " ADD paypal_ipn_success INT( 1 ) DEFAULT '0' NOT NULL");
}
function remove() {
xtc_db_query("DELETE FROM " . TABLE_CONFIGURATION . " WHERE configuration_key in ('" . implode("', '", $this->keys()) . "')");
xtc_db_query("ALTER TABLE " . TABLE_ORDERS . " DROP paypal_ipn_success");
}
function keys() {
return array('MODULE_PAYMENT_PAYPAL_IPN_STATUS',
'MODULE_PAYMENT_PAYPAL_IPN_ALLOWED',
'MODULE_PAYMENT_PAYPAL_IPN_ID',
'MODULE_PAYMENT_PAYPAL_IPN_CURRENCY',
'MODULE_PAYMENT_PAYPAL_IPN_ZONE',
'MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID',
'MODULE_PAYMENT_PAYPAL_IPN_ORDER_STATUS_ID',
'MODULE_PAYMENT_PAYPAL_IPN_DENIED_ORDER_STATUS_ID',
'MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER',
'MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE',
'MODULE_PAYMENT_PAYPAL_IPN_DEBUG_EMAIL',
'MODULE_PAYMENT_PAYPAL_IPN_SORT_ORDER',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_STATUS',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_CERT_ID',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL');
} // function keys()
}
?>
|
|
|
| Nach oben |
|
 |
ar Site Admin
Anmeldedatum: 30.05.2006 Beiträge: 78
|
Verfasst am: 08.07.2008, 08:08 Titel: |
|
|
Noch ein Fehler!?
Ich glaube die Funktion after_process() muss wie folgt aussehen:
| Code: |
function after_process() {
global $insert_id;
if (!$this->order_status)
xtc_db_query("UPDATE ". TABLE_ORDERS ." SET orders_status='0' WHERE orders_id='".$insert_id."'");
xtc_db_query("UPDATE ". TABLE_ORDERS_STATUS_HISTORY ." SET orders_status_id='0' WHERE orders_id='".$insert_id."'");
}
|
|
|
| Nach oben |
|
 |
ar Site Admin
Anmeldedatum: 30.05.2006 Beiträge: 78
|
Verfasst am: 25.07.2008, 07:24 Titel: |
|
|
Nach weiteren Fehlern im IPN-Modul, habe ich das Modul heute aus dem XT:Commerce Shop entfernt.
Das Modul erledigt den "Handshake" mit PayPal nicht.
Die Bestellung müsste entweder angelegt werden, bevor der Nutzer zur PayPal Seite weitergeleitet wird (also in der "function confirmation()" der paypal_ipn.php Datei). Oder wenn der Handshake mir PayPal erfolgt (also in der ipn.php).
Beides geschieht nicht.
Ein Problem für die Lösung via confirmation() ist, dass die Bestellung ab der Bestellzusammenfassung angelegt ist. Bricht der Nutzer nun ab, haben wir eine Bestellung, die der Nutzer gar nicht bestätigt hat.
Besser wäre es also in der ipn.php. Hier muss man aber alle Daten zur Bestellung erst wieder zusammen stellen (Rechnungs- und Lieferdresse, Versandart, Bemerkungen etc.)
Also doch sehr aufwendig!
Vielleicht ist das Standard-PayPal Modul bei dem der Nutzer aus der Bestätigungs-E-Mail zu PayPal geleitet wird die bessere Wahl!?
Die letzten Versionen der paypal_ipn.php und ipn.php gibt es hier:
paypal_ipn.php
| Code: | <?php
/* -----------------------------------------------------------------------------------------
$Id: paypal_ipn.php v1.0 998 2005-08-16 14:18:20Z HHGAG $
XT-Commerce - community made shopping
http://www.xt-commerce.com
Copyright (c) 2005 XT-Commerce
-----------------------------------------------------------------------------------------
based on:
(c) 2000-2001 The Exchange Project (earlier name of osCommerce)
(c) 2002-2003 osCommerce(paypal.php,v 1.39 2003/01/29); www.oscommerce.com
(c) 2003 nextcommerce (paypal.php,v 1.8 2003/08/24); www.nextcommerce.org
Released under the GNU General Public License
---------------------------------------------------------------------------------------*/
class paypal_ipn {
var $code, $title, $description, $enabled, $identifier;
function paypal_ipn() {
global $order;
$this->code = 'paypal_ipn';
$this->title = MODULE_PAYMENT_PAYPAL_IPN_TEXT_TITLE;
$this->description = MODULE_PAYMENT_PAYPAL_IPN_TEXT_DESCRIPTION;
$this->sort_order = MODULE_PAYMENT_PAYPAL_IPN_SORT_ORDER;
$this->enabled = ((MODULE_PAYMENT_PAYPAL_IPN_STATUS == 'True') ? true : false);
$this->info = MODULE_PAYMENT_PAYPAL_IPN_TEXT_INFO;
$this->identifier = 'xt:Commerce PayPal IPN v1.0';
if ((int)MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID > 0) {
$this->order_status = MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID;
}
if (is_object($order))
$this->update_status();
$this->email_footer = MODULE_PAYMENT_PAYPAL_IPN_TEXT_EMAIL_FOOTER;
if (MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER == 'Live') {
$this->form_action_url = 'https://www.paypal.com/cgi-bin/webscr';
}else{
$this->form_action_url = 'https://www.sandbox.paypal.com/cgi-bin/webscr';
}
}
function update_status() {
global $order;
if (($this->enabled == true) && ((int)MODULE_PAYMENT_PAYPAL_IPN_ZONE > 0)) {
$check_flag = false;
$check_query = xtc_db_query("select zone_id from " . TABLE_ZONES_TO_GEO_ZONES . " where geo_zone_id = '" . MODULE_PAYMENT_PAYPAL_IPN_ZONE . "' and zone_country_id = '" . $order->billing['country']['id'] . "' order by zone_id");
while ($check = xtc_db_fetch_array($check_query)) {
if ($check['zone_id'] < 1) {
$check_flag = true;
break;
}
elseif ($check['zone_id'] == $order->billing['zone_id']) {
$check_flag = true;
break;
}
}
if ($check_flag == false) {
$this->enabled = false;
}
}
}
function javascript_validation() {
return false;
}
function selection() {
return array('id' => $this->code, 'module' => $this->title, 'description' => $this->info);
}
function pre_confirmation_check() {
return false;
}
function confirmation() {
global $cartID;
if (xtc_session_is_registered('cartID')) {
xtc_session_register('order_ident_key');
$_SESSION['order_ident_key'] = xtc_input_validation(md5($_SESSION['cartID'] . '-' . $_SESSION['customer_id']),int,'');
}
return array('title' => MODULE_PAYMENT_PAYPAL_IPN_TEXT_DESCRIPTION );
}
function process_button() {
global $order, $xtPrice;
if (MODULE_PAYMENT_PAYPAL_IPN_CURRENCY == 'Selected Currency') {
$my_currency = $_SESSION['currency'];
} else {
$my_currency = substr(MODULE_PAYMENT_PAYPAL_IPN_CURRENCY, 5);
}
/*
* Kanadische Dollar (CAD)
* Euro (EUR)
* Britische Pfund (GBP)
* US-Dollar (USD)
* Japanische Yen (JPY)
* Australische Dollar (AUD)
* Neuseeländische Dollar (NZD)
* Schweizer Franken (CHF)
* Hongkong-Dollar (HKD)
* Singapur-Dollar (SGD)
* Schwedische Kronen (SEK)
* Dänische Kronen (DKK)
* Polnische Zloty (PLN)
* Norwegische Kronen (NOK)
* Ungarische Forint (HUF)
* Tschechische Kronen (CZK)
*/
if (!in_array($my_currency, array ('CAD', 'EUR', 'GBP', 'USD', 'JPY', 'AUD', 'NZD', 'CHF', 'HKD', 'SGD', 'SEK', 'DKK', 'PLN', 'NOK', 'HUF', 'CZK'))) {
$my_currency = 'EUR';
}
$parameters = array();
$parameters['cmd'] = '_xclick';
$parameters['item_name'] = STORE_NAME;
if ($_SESSION['customers_status']['customers_status_show_price_tax'] == 0 && $_SESSION['customers_status']['customers_status_add_tax_ot'] == 1) {
$parameters['amount'] = $order->info['total'] + $order->info['tax'];
} else {
$parameters['amount'] = $order->info['total'];
}
if ($_SESSION['currency'] == $my_currency) {
$parameters['shipping'] = round($order->info['shipping_cost'], $xtPrice->get_decimal_places($my_currency));
$parameters['amount'] = round($parameters['amount'], $xtPrice->get_decimal_places($my_currency)) - $parameters['shipping'];
} else {
$parameters['shipping'] = round($xtPrice->xtcCalculateCurrEx($order->info['shipping_cost'], $my_currency), $xtPrice->get_decimal_places($my_currency));
$parameters['amount'] = round($xtPrice->xtcCalculateCurrEx($parameters['amount'], $my_currency), $xtPrice->get_decimal_places($my_currency)) - $parameters['shipping'];
}
$parameters['business'] = MODULE_PAYMENT_PAYPAL_IPN_ID;
$parameters['currency_code'] = $my_currency;
$parameters['invoice'] = $_SESSION['order_ident_key'];
$parameters['custom'] = $_SESSION['customer_id'];
$parameters['no_shipping'] = '1';
$parameters['no_note'] = '1';
$parameters['notify_url'] = xtc_href_link('ipn.php', '', 'SSL', false, false);
$parameters['return'] = xtc_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
$parameters['cancel_return'] = xtc_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL');
// Add missing variables to prepopulate PayPal form. -- hostmistress 20050210
$parameters['first_name'] = $order->billing['firstname'];
$parameters['last_name'] = $order->billing['lastname'];
$parameters['address1'] = $order->billing['street_address'];
$parameters['address2'] = $order->billing['suburb'];
$parameters['email'] = $order->customer['email_address'];
$parameters['night_phone_a'] = $order->customer['telephone'];
$parameters['city'] = $order->billing['city'];
if ($order->billing['country']['iso_code_2']=='US') {
$order->billing['state'] = xtc_get_zone_code($order->billing['country_id'], $order->billing['zone_id'], $order->billing['state']);
}
$parameters['state'] = $order->billing['state'];
$parameters['zip'] = $order->billing['postcode'];
$parameters['country'] = $order->billing['country']['iso_code_2'];
$parameters['bn'] = $this->identifier;
if(xtc_not_null(MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE)) {
$parameters['page_style'] = MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE;
}
if (MODULE_PAYMENT_PAYPAL_IPN_EWP_STATUS == 'True') {
$parameters['cert_id'] = MODULE_PAYMENT_PAYPAL_IPN_EWP_CERT_ID;
$random_string = rand(100000, 999999) . '-' . $customer_id . '-';
$data = '';
while (list($key, $value) = each($parameters)) {
$data .= $key . '=' . $value . "\n";
}
$fp = fopen(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt', 'w');
fwrite($fp, $data);
fclose($fp);
unset($data);
if (function_exists('openssl_pkcs7_sign') && function_exists('openssl_pkcs7_encrypt')) {
openssl_pkcs7_sign(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt', MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt', file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY), file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY), array('From' => MODULE_PAYMENT_PAYPAL_IPN_ID), PKCS7_BINARY);
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt');
// remove headers from the signature
$signed = file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');
$signed = explode("\n\n", $signed);
$signed = base64_decode($signed[1]);
$fp = fopen(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt', 'w');
fwrite($fp, $signed);
fclose($fp);
unset($signed);
openssl_pkcs7_encrypt(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt', MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt', file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY), array('From' => MODULE_PAYMENT_PAYPAL_IPN_ID), PKCS7_BINARY);
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');
// remove headers from the encrypted result
$data = file_get_contents(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');
$data = explode("\n\n", $data);
$data = '-----BEGIN PKCS7-----' . "\n" . $data[1] . "\n" . '-----END PKCS7-----';
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');
}else{
exec(MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL . ' smime -sign -in ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt -signer ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY . ' -inkey ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY . ' -outform der -nodetach -binary > ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'data.txt');
exec(MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL . ' smime -encrypt -des3 -binary -outform pem ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY . ' < ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt > ' . MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'signed.txt');
$fh = fopen(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt', 'rb');
$data = fread($fh, filesize(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt'));
fclose($fh);
unlink(MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY . '/' . $random_string . 'encrypted.txt');
}
$process_button_string = xtc_draw_hidden_field('cmd', '_s-xclick') . xtc_draw_hidden_field('encrypted', $data);
unset($data);
}else{
while (list($key, $value) = each($parameters)) {
$process_button_string.=xtc_draw_hidden_field($key, $value);
}
}
return $process_button_string;
}
function before_process() {
return false;
}
function after_process() {
global $insert_id;
if (!$this->order_status)
xtc_db_query("UPDATE ". TABLE_ORDERS ." SET orders_status='0' WHERE orders_id='".$insert_id."'");
xtc_db_query("UPDATE ". TABLE_ORDERS_STATUS_HISTORY ." SET orders_status_id='0' WHERE orders_id='".$insert_id."'");
}
function output_error() {
return false;
}
function check() {
if(!isset($this->_check)) {
$check_query = xtc_db_query("SELECT configuration_value
FROM " . TABLE_CONFIGURATION . "
WHERE configuration_key = 'MODULE_PAYMENT_PAYPAL_IPN_STATUS'");
$this->_check = xtc_db_num_rows($check_query);
}
return $this->_check;
}
function install() {
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_STATUS', 'False', '6', '3', 'xtc_cfg_select_option(array(\'True\', \'False\'), ', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " ( configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_ID', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_CURRENCY', 'Only EUR', '6', '6', 'xtc_cfg_select_option(array(\'Selected Currency\',\'Only AUD\',\'Only USD\',\'Only CAD\',\'Only EUR\',\'Only GBP\',\'Only JPY\'), ', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_SORT_ORDER', '0', '6', '0', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_ALLOWED', '', '6', '0', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, use_function, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_ZONE', '0', '6', '2', 'xtc_get_zone_class_title', 'xtc_cfg_pull_down_zone_classes(', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, use_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID', '0', '6', '0', 'xtc_cfg_pull_down_order_statuses(', 'xtc_get_order_status_name', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, use_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_ORDER_STATUS_ID', '0', '6', '0', 'xtc_cfg_pull_down_order_statuses(', 'xtc_get_order_status_name', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id,sort_order, set_function, use_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_DENIED_ORDER_STATUS_ID', '0', '6', '0', 'xtc_cfg_pull_down_order_statuses(', 'xtc_get_order_status_name', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER', 'Testing', '6', '6', 'xtc_cfg_select_option(array(\'Testing\',\'Live\'), ', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_DEBUG_EMAIL', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, set_function, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_STATUS', 'False', '6', '3', 'xtc_cfg_select_option(array(\'True\', \'False\'), ', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_CERT_ID', '', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY', '/tmp', '6', '4', now())");
xtc_db_query("INSERT INTO " . TABLE_CONFIGURATION . " (configuration_key, configuration_value, configuration_group_id, sort_order, date_added)
VALUES ('MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL', '/usr/bin/openssl', '6', '4', now())");
xtc_db_query("ALTER TABLE " . TABLE_ORDERS . " ADD paypal_ipn_success INT( 1 ) DEFAULT '0' NOT NULL");
}
function remove() {
xtc_db_query("DELETE FROM " . TABLE_CONFIGURATION . " WHERE configuration_key in ('" . implode("', '", $this->keys()) . "')");
xtc_db_query("ALTER TABLE " . TABLE_ORDERS . " DROP paypal_ipn_success");
}
function keys() {
return array('MODULE_PAYMENT_PAYPAL_IPN_STATUS',
'MODULE_PAYMENT_PAYPAL_IPN_ALLOWED',
'MODULE_PAYMENT_PAYPAL_IPN_ID',
'MODULE_PAYMENT_PAYPAL_IPN_CURRENCY',
'MODULE_PAYMENT_PAYPAL_IPN_ZONE',
'MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID',
'MODULE_PAYMENT_PAYPAL_IPN_ORDER_STATUS_ID',
'MODULE_PAYMENT_PAYPAL_IPN_DENIED_ORDER_STATUS_ID',
'MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER',
'MODULE_PAYMENT_PAYPAL_IPN_PAGE_STYLE',
'MODULE_PAYMENT_PAYPAL_IPN_DEBUG_EMAIL',
'MODULE_PAYMENT_PAYPAL_IPN_SORT_ORDER',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_STATUS',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_PRIVATE_KEY',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_PUBLIC_KEY',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_PAYPAL_KEY',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_CERT_ID',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_WORKING_DIRECTORY',
'MODULE_PAYMENT_PAYPAL_IPN_EWP_OPENSSL');
} // function keys()
}
?> |
ipn.php
| Code: | <?php
/* -----------------------------------------------------------------------------------------
$Id: paypal_ipn.php v1.0 998 2005-08-16 14:18:20Z HHGAG $
XT-Commerce - community made shopping
http://www.xt-commerce.com
Copyright (c) 2005 XT-Commerce
-----------------------------------------------------------------------------------------
based on:
(c) 2000-2001 The Exchange Project (earlier name of osCommerce)
(c) 2002-2003 osCommerce(paypal.php,v 1.39 2003/01/29); www.oscommerce.com
(c) 2003 nextcommerce (paypal.php,v 1.8 2003/08/24); www.nextcommerce.org
Released under the GNU General Public License
---------------------------------------------------------------------------------------*/
require('includes/application_top.php');
$parameters = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$parameters .= '&' . $key . '=' . urlencode(stripslashes($value));
}
if(MODULE_PAYMENT_PAYPAL_IPN_GATEWAY_SERVER == 'Live') {
$server = 'www.paypal.com';
}else{
$server = 'www.sandbox.paypal.com';
}
$fsocket = false;
$curl = false;
$result = false;
if ((PHP_VERSION >= 4.3) && ($fp = @fsockopen('ssl://' . $server, 443, $errno, $errstr, 30))) {
$fsocket = true;
}
elseif (function_exists('curl_exec')) {
$curl = true;
}
elseif ($fp = @fsockopen($server, 80, $errno, $errstr, 30)) {
$fsocket = true;
}
if ($fsocket == true) {
$header = 'POST /cgi-bin/webscr HTTP/1.0' . "\r\n" .
'Host: ' . $server . "\r\n" .
'Content-Type: application/x-www-form-urlencoded' . "\r\n" .
'Content-Length: ' . strlen($parameters) . "\r\n" .
'Connection: close' . "\r\n\r\n";
@fputs($fp, $header . $parameters);
$string = '';
while (!@feof($fp)) {
$res = @fgets($fp, 1024);
$string .= $res;
if (($res == 'VERIFIED') || ($res == 'INVALID')) {
$result = $res;
break;
}
}
@fclose($fp);
}
elseif ($curl == true) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://' . $server . '/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $parameters);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
curl_close($ch);
}
if(isset($_POST['invoice']) && is_numeric($_POST['invoice']) && ($_POST['invoice'] > 0)) {
$order_query = xtc_db_query("SELECT currency, currency_value
FROM " . TABLE_ORDERS . "
WHERE orders_ident_key = '" . xtc_db_prepare_input($_POST['invoice']) . "'
AND customers_id = '" . (int)$_POST['custom'] . "'");
if(xtc_db_num_rows($order_query) > 0) {
$order = xtc_db_fetch_array($order_query);
$total_query = xtc_db_query("SELECT value
FROM " . TABLE_ORDERS_TOTAL . "
WHERE orders_ident_key = '" . xtc_db_prepare_input($_POST['invoice']) . "'
AND class = 'ot_total' limit 1");
$total = xtc_db_fetch_array($total_query);
$comment_status = xtc_db_prepare_input($_POST['payment_status']) . ' ' . xtc_db_prepare_input($_POST['mc_gross']) . xtc_db_prepare_input($_POST['mc_currency']) . '.';
$comment_status .= ' ' . xtc_db_prepare_input($_POST['first_name']) . ' ' . xtc_db_prepare_input($_POST['last_name']) . ' ' . xtc_db_prepare_input($_POST['payer_email']);
if(isset($_POST['payer_status'])) {
$comment_status .= ' is ' . xtc_db_prepare_input($_POST['payer_status']);
}
$comment_status .= '.' . $crlf . $crlf . ' [';
if(isset($_POST['test_ipn']) && is_numeric($_POST['test_ipn']) && ($_POST['test_ipn'] > 0)) {
$debug = '(Sandbox-Test Mode) ';
}
$comment_status .= $crlf . 'Fee=' . xtc_db_prepare_input($_POST['mc_fee']) . xtc_db_prepare_input($_POST['mc_currency']);
if(isset($_POST['pending_reason'])) {
$comment_status .= $crlf . ' Pending Reason=' . xtc_db_prepare_input($_POST['pending_reason']);
}
if(isset($_POST['reason_code'])) {
$comment_status .= $crlf . ' Reason Code=' . xtc_db_prepare_input($_POST['reason_code']);
}
$comment_status .= $crlf . ' Payment=' . xtc_db_prepare_input($_POST['payment_type']);
$comment_status .= $crlf . ' Date=' . xtc_db_prepare_input($_POST['payment_date']);
if(isset($_POST['parent_txn_id'])) {
$comment_status .= $crlf . ' ParentID=' . xtc_db_prepare_input($_POST['parent_txn_id']);
}
$comment_status .= $crlf . ' ID=' . xtc_db_prepare_input($_POST['txn_id']);
//Set status for default (Pending)
$order_status_id = MODULE_PAYMENT_PAYPAL_IPN_PREPARE_ORDER_STATUS_ID;
if($result == 'VERIFIED') {
//Set status for Completed
if(($_POST['payment_status'] == 'Completed') AND ($_POST['business'] == MODULE_PAYMENT_PAYPAL_IPN_ID) AND ($_POST['mc_gross'] == number_format($total['value'] * $order['currency_value'], $xtPrice->get_decimal_places($order['currency'])))) {
if (MODULE_PAYMENT_PAYPAL_IPN_ORDER_STATUS_ID > 0) {
$order_status_id = MODULE_PAYMENT_PAYPAL_IPN_ORDER_STATUS_ID;
}
}
//Set status for Denied, Failed, Refunded or Reversed
elseif(($_POST['payment_status'] == 'Denied') OR ($_POST['payment_status'] == 'Failed') OR ($_POST['payment_status'] == 'Refunded') OR ($_POST['payment_status'] == 'Reversed')) {
$order_status_id = MODULE_PAYMENT_PAYPAL_IPN_DENIED_ORDER_STATUS_ID;
} // if(($_POST['payment_status'] == 'Completed') AND ($_POST['business'] == MODULE_PAYMENT_PAYPAL_IPN_ID) AND ($_POST['mc_gross'] == number_format($total['value'] * $order['currency_value'], $currencies->get_decimal_places($order['currency'])))) elseif(($_POST['payment_status'] == 'Denied') OR ($_POST['payment_status'] == 'Failed') OR ($_POST['payment_status'] == 'Refunded') OR ($_POST['payment_status'] == 'Reversed'))
}else{
$debug .= '[INVALID VERIFIED FAILED] ';
$order_status_id = MODULE_PAYMENT_PAYPAL_IPN_DENIED_ORDER_STATUS_ID;
$error_reason = 'Received INVALID responce but invoice and Customer matched.' ;
}
$comment_status .= ']' ;
xtc_db_query("UPDATE " . TABLE_ORDERS . "
SET orders_status = '" . $order_status_id . "',
last_modified = now()
WHERE orders_id = '" . xtc_db_prepare_input($_POST['invoice']) . "'");
$sql_data_array = array('orders_id' => xtc_db_prepare_input($_POST['invoice']),
'orders_status_id' => $order_status_id,
'date_added' => 'now()',
'customer_notified' => '0',
'comments' => 'PayPal IPN ' . $debug . $comment_status . '');
xtc_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array);
}else{
$error_reason = 'No order found for invoice=' . xtc_db_prepare_input($_POST['invoice']) . ' with customer=' . (int)$_POST['custom'] . '.' ;
}
}else{
$error_reason = 'No invoice id found on received data.' ;
}
if(xtc_not_null(MODULE_PAYMENT_PAYPAL_IPN_DEBUG_EMAIL) && strlen($error_reason)) {
$email_body = $error_reason . "\n\n";
$email_body .= $_SERVER["REQUEST_METHOD"] . " - " .$_SERVER["REMOTE_ADDR"] . " - " .$_SERVER["HTTP_REFERER"] . " - " .$_SERVER["HTTP_ACCEPT"] . "\n\n";
$email_body .= '$_POST:' . "\n\n";
foreach($_POST as $key => $value) {
$email_body .= $key . '=' . $value . "\n";
}
$email_body .= "\n" . '$_GET:' . "\n\n";
foreach ($_GET as $key => $value) {
$email_body .= $key . '=' . $value . "\n";
}
xtc_php_mail(
EMAIL_BILLING_ADDRESS,
EMAIL_BILLING_NAME,
MODULE_PAYMENT_PAYPAL_IPN_DEBUG_EMAIL,
MODULE_PAYMENT_PAYPAL_IPN_DEBUG_EMAIL,
'',
EMAIL_BILLING_ADDRESS,
EMAIL_BILLING_NAME,
false,
false,
'PayPal IPN Invalid Process',
$email_body,
$email_body
);
}
require('includes/application_bottom.php');
?> |
|
|
| Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|