Enterprise3.01 > Paypal Notify.php

Questions? Need Help? Want to share? » PHP Forum
Script Name:
Enterprise3.01

Download:
enterprise3.01.zip

Category:
E Commerce

Archive Content:

Content:

Admin

Admin > Htmlarea

Admin > Htmlarea > Images

Admin > Htmlarea > Popups

Admin > Htmlarea > Popups > File

Admin > Htmlarea > Popups > File > Icons

Admin > Htmlarea > Popups > File > Images

Admin > Images

Admin > Images > Categories

Admin > Images > Graphs

Admin > Images > Icons

Admin > Includes

Admin > Includes > Boxes

Admin > Includes > Classes

Admin > Includes > Functions

Admin > Includes > Graphs

Admin > Includes > Javascript

Admin > Includes > Javascript > SpiffyCal

Admin > Includes > Javascript > SpiffyCal > Images

Admin > Includes > Languages

Admin > Includes > Languages > English

Admin > Includes > Languages > English > CVS

Admin > Includes > Languages > English > Images > Buttons

Admin > Includes > Languages > English > Images > Buttons > CVS

Admin > Includes > Languages > English > Images > Copy Of Buttons

Admin > Includes > Languages > English > Images > Copy Of Buttons > CVS

Admin > Includes > Languages > English > Images > CVS

Admin > Includes > Languages > English > Modules > Newsletters

Admin > Includes > Languages > Espanol

Admin > Includes > Languages > Espanol > CVS

Admin > Includes > Languages > Espanol > Images > Buttons

Admin > Includes > Languages > Espanol > Images > Buttons > CVS

Admin > Includes > Languages > Espanol > Images > CVS

Admin > Includes > Languages > Espanol > Modules > Newsletters

Admin > Includes > Languages > German

Admin > Includes > Languages > German > CVS

Admin > Includes > Languages > German > Images > Buttons

Admin > Includes > Languages > German > Images > Buttons > CVS

Admin > Includes > Languages > German > Images > CVS

Admin > Includes > Languages > German > Modules > Newsletters

Admin > Includes > Local

Admin > Includes > Modules > Newsletters

Admin > Live Support

Admin > Live Support > Blue

Admin > Live Support > Green

Admin > Live Support > Red

Admin > Live Support > White

Admin > Live Support > Yellow

Download

Images

Images > Banners

Images > Default

Images > Icons

Images > Infobox

Images > Mail

Includes

Includes > Boxes

Includes > Classes

Includes > Color Schemes > 1

Includes > Color Schemes > 10

Includes > Color Schemes > 11

Includes > Color Schemes > 12

Includes > Color Schemes > 2

Includes > Color Schemes > 3

Includes > Color Schemes > 4

Includes > Color Schemes > 5

Includes > Color Schemes > 6

Includes > Color Schemes > 7

Includes > Color Schemes > 8

Includes > Color Schemes > 9

Includes > Functions

Includes > Javascript

Includes > Languages

Includes > Languages > English

Includes > Languages > English > CVS

Includes > Languages > English > Images

Includes > Languages > English > Images > Buttons

Includes > Languages > English > Images > Buttons > CVS

Includes > Languages > English > Images > CVS

Includes > Languages > English > Modules > Order Total

Includes > Languages > English > Modules > Payment

Includes > Languages > English > Modules > Shipping

Includes > Languages > Espanol

Includes > Languages > Espanol > CVS

Includes > Languages > Espanol > Images

Includes > Languages > Espanol > Images > Buttons

Includes > Languages > Espanol > Images > Buttons > CVS

Includes > Languages > Espanol > Images > CVS

Includes > Languages > Espanol > Modules > Order Total

Includes > Languages > Espanol > Modules > Payment

Includes > Languages > Espanol > Modules > Shipping

Includes > Languages > French

Includes > Languages > French > Images > Buttons

Includes > Languages > French > Modules > Payment

Includes > Languages > German

Includes > Languages > German > CVS

Includes > Languages > German > Images

Includes > Languages > German > Images > Buttons

Includes > Languages > German > Images > Buttons > CVS

Includes > Languages > German > Images > CVS

Includes > Languages > German > Modules > Order Total

Includes > Languages > German > Modules > Payment

Includes > Languages > German > Modules > Shipping

Includes > Local

Includes > Modules

Includes > Modules > Order Total

Includes > Modules > Payment

Includes > Modules > Shipping

Install

Install > Images

Install > Images > Layout

Install > Includes

Install > Includes > Functions

Install > Templates

Install > Templates > Main Page

Install > Templates > Pages

Live Support

Live Support > Blue

Live Support > Green

Live Support > Red

Live Support > White

Live Support > Yellow

Members

Members > Cashhub

Members > Cashhub > Images

Members > User

Members > User > Test Dir

Templates

Templates > Content

Paypal Notify.php:


<?php
/*
  $Id: paypal_notify.php, v 0.981 2003-16-07 10:57:31 pablo_pasqualino Exp pablo_pasqualino $
  Enterprise Shopping Cart
  http://www.enterprisecart.com

  Paypal IPN v0.981 for Milestone 2
  Copyright (c) 2003 Pablo Pasqualino
  pablo_osc <at> osmosisdc <dot> com
  http://www.osmosisdc.com

  Released under the GNU General Public License
*/

  
include('includes/application_top.php');
  include(
DIR_WS_LANGUAGES $language '/' FILENAME_CHECKOUT_PROCESS);

// load paypal_ipn payment module
  
$payment 'paypalipn';
  require(
DIR_WS_CLASSES 'payment.php');
  
$payment_modules = new payment($payment);

  if (
phpversion() <= '4.0.6') {
    
$_POST $HTTP_POST_VARS;
  }

  require(
DIR_WS_CLASSES 'order.php');
  
$order = new order($_POST['item_number']);

  
$req 'cmd=_notify-validate';

  foreach (
$_POST as $key => $value) {
    
$req .= '&' $key '=' urlencode($value);
    $
$key $value;
  }

  
$response_verified '';
  
$paypal_response '';

  if (
MODULE_PAYMENT_PAYPALIPN_TEST_MODE=='True') {

    if (
$item_number) {
      
$paypal_response $_POST[ipnstatus];

    echo 
'TEST IPN Processed for order #'.$item_number;
    } else {

    echo 
'You need to specify an order #';

    };

  } elseif (
MODULE_PAYMENT_PAYPALIPN_CURL=='True') { // IF CURL IS ON,  SEND DATA USING CURL (SECURE MODE,  TO https://)

    
$ch curl_init();
    
curl_setopt($ch,  CURLOPT_URL, "https://www.paypal.com/cgi-bin/webscr");
    
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);
    
$paypal_response curl_exec($ch);
    
curl_close ($ch);

  } else { 
// ELSE,  SEND IT WITH HEADERS (STANDARD MODE,  TO http://)

    
$header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
    
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
    
$header .= "Content-Length: " strlen ($req) . "\r\n\r\n";
    
$fp fsockopen ("www.paypal.com",  80,  $errno,  $errstr,  30);

    
fputs ($fp,  $header $req);
    while (!
feof($fp)) {
      
$paypal_response .= fgets($fp,  1024);
    };

    
fclose ($fp);

  };

  if (
ereg('VERIFIED', $paypal_response)) {
    
$response_verified 1;
    
$ipn_result 'VERIFIED';
  } else if (
ereg('INVALID', $paypal_response)) {
    
$response_invalid 1;
    
$ipn_result 'INVALID';
  } else {
    echo 
'Error: no valid $paypal_response received.';
  };

  if (
$txn_id && ($response_verified==|| $response_invalid==1)) {

    
$txn_check escs_db_query("select txn_id from " TABLE_PAYPALIPN_TXN " where txn_id='$txn_id'");
    if (
escs_db_num_rows($txn_check)==0) { // If txn no previously registered,  we should register it

      
$sql_data_array = array('txn_id' => $txn_id,
                              
'ipn_result' => $ipn_result,
                              
'receiver_email' => $receiver_email,
                              
'business' => $business,
                              
'item_name' => $item_name,
                              
'item_number' => $item_number,
                              
'quantity' => $quantity,
                              
'invoice' => $invoice,
                              
'custom' => $custom,
                              
'option_name1' => $option_name1,
                              
'option_selection1' => $option_selection1,
                              
'option_name2' => $option_name2,
                              
'option_selection2' => $option_selection2,
                              
'num_cart_items' => $num_cart_items,
                              
'payment_status' => $payment_status,
                              
'pending_reason' => $pending_reason,
                              
'payment_date' => $payment_date,
                              
'settle_amount' => $settle_amount,
                              
'settle_currency' => $settle_currency,
                              
'exchange_rate' => $exchange_rate,
                              
'payment_gross' => $payment_gross,
                              
'payment_fee' => $payment_fee,
                              
'mc_gross' => $mc_gross,
                              
'mc_fee' => $mc_fee,
                              
'mc_currency' => $mc_currency,
                              
'tax' => $tax,
                              
'txn_type' => $txn_type,
                              
'for_auction' => $for_auction,
                              
'memo' => $memo,
                              
'first_name' => $first_name,
                              
'last_name' => $last_name,
                              
'address_street' => $address_street,
                              
'address_city' => $address_city,
                              
'address_state' => $address_state,
                              
'address_zip' => $address_zip,
                              
'address_country' => $address_country,
                              
'address_status' => $address_status,
                              
'payer_email' => $payer_email,
                              
'payer_id' => $payer_id,
                              
'payer_status' => $payer_status,
                              
'payment_type' => $payment_type,
                              
'notify_version' => $notify_version,
                              
'verify_sign' => $verify_sign);

      
escs_db_perform(TABLE_PAYPALIPN_TXN, $sql_data_array);

    } else { 
// else we update it to the new status

      
$sql_data_array = array('payment_status' => $payment_status,
                              
'pending_reason' => $pending_reason,
                              
'ipn_result' => $ipn_result,
                              
'payer_email' => $payer_email,
                              
'payer_id' => $payer_id,
                              
'payer_status' => $payer_status,
                              
'payment_type' => $payment_type);

      
escs_db_perform(TABLE_PAYPALIPN_TXN, $sql_data_array, 'update', 'txn_id=\''.$txn_id.'\'');

    };

  };

  if (
$response_verified==1) {
    if (
strtolower($receiver_email)==strtolower(MODULE_PAYMENT_PAYPALIPN_ID) || strtolower($business)==strtolower(MODULE_PAYMENT_PAYPALIPN_ID)) {
      if (
$payment_status=='Completed') {
        if (
MODULE_PAYMENT_PAYPALIPN_UPDATE_STOCK_BEFORE_PAYMENT=='False') {
          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 = '" 
escs_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 escs_db_query($stock_query_raw);
              } else {
                
$stock_query escs_db_query("select products_quantity from " TABLE_PRODUCTS " where products_id = '" escs_get_prid($order->products[$i]['id']) . "'");
              }
              if (
escs_db_num_rows($stock_query) > 0) {
                
$stock_values escs_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'];
                }
                
escs_db_query("update " TABLE_PRODUCTS " set products_quantity = '" $stock_left "' where products_id = '" escs_get_prid($order->products[$i]['id']) . "'");
                if ( (
$stock_left 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) {
                  
escs_db_query("update " TABLE_PRODUCTS " set products_status = '0' where products_id = '" escs_get_prid($order->products[$i]['id']) . "'");
                }
              }
            }
          }
        }

        if (
is_numeric(MODULE_PAYMENT_PAYPALIPN_ORDER_STATUS_ID) && (MODULE_PAYMENT_PAYPALIPN_ORDER_STATUS_ID 0) ) {
          
$order_status MODULE_PAYMENT_PAYPALIPN_ORDER_STATUS_ID;
        } else {
          
$order_status DEFAULT_ORDERS_STATUS_ID;
        };

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

        
escs_db_perform(TABLE_ORDERS, $sql_data_array, 'update', 'orders_id='.$item_number);

        
$customer_notification = (SEND_EMAILS == 'true') ? '1' '0';
        
$sql_data_array = array('orders_id' => $item_number,
                                
'orders_status_id' => $order_status,
                                
'date_added' => 'now()',
                                
'customer_notified' => $customer_notification);
        
escs_db_perform(TABLE_ORDERS_STATUS_HISTORY,  $sql_data_array);

// lets start with the email confirmation
        
for ($i=0,  $n=sizeof($order->products); $i<$n$i++) {
          if (
sizeof($order->products[$i]['attributes']) > 0) {
            
$attributes_exist '1';
            
$products_ordered_attributes "\n";
            for (
$j 0,  $k sizeof($order->products[$i]['attributes']); $j $k$j++) {
              
$products_ordered_attributes .= '  '$order->products[$i]['attributes'][$j]['option'] . ': ' $order->products[$i]['attributes'][$j]['value'];
              if (
$order->products[$i]['attributes'][$j]['price'] != '0'$products_ordered_attributes .= ' (' $order->products[$i]['attributes'][$j]['prefix'] . $currencies->format($order->products[$i]['attributes'][$j]['price'] * $order->products[$i]['qty'],  true,  $order->info['currency'],  $order->info['currency_value']) . ')' "\n";
            }
          }

          
$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";
          
$products_ordered_attributes '';
        }

        
$email_order STORE_NAME "\n" .
                       
EMAIL_SEPARATOR "\n" .
                       
EMAIL_TEXT_ORDER_NUMBER ' ' $item_number "\n" .
                       
EMAIL_TEXT_INVOICE_URL ' ' escs_href_link(FILENAME_ACCOUNT_HISTORY_INFO,  'order_id=' $item_number,  'SSL',  false) . "\n" .
                       
EMAIL_TEXT_DATE_ORDERED ' ' strftime(DATE_FORMAT_LONG) . "\n\n";
        if (
$order->info['comments']) {
          
$email_order .= escs_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";

        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 (
$payment_class->email_footer) {
            
$email_order .= $payment_class->email_footer "\n\n";
          }
        }

        
escs_mail($order->customer['name'], $order->customer['email_address'],  EMAIL_TEXT_SUBJECT,  nl2br($email_order),  STORE_OWNER,  STORE_OWNER_EMAIL_ADDRESS,  '');

        if (
SEND_EXTRA_ORDER_EMAILS_TO != '') { // send emails to other people
          
escs_mail('',  SEND_EXTRA_ORDER_EMAILS_TO,  EMAIL_TEXT_SUBJECT,   nl2br($email_order),  STORE_OWNER,  STORE_OWNER_EMAIL_ADDRESS,  '');
        };

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

      };

    };

  };
?>


Other E Commerce Scripts:

WebMaster Resources Home

©RingsWorld.com