| 
<?php
 //
 // Edit History:
 //
 //  Last $Author: munroe $
 //  Last Modified: $Date: 2006/03/25 11:43:02 $
 //
 //  Dick Munroe ([email protected]) 28-Feb-2006
 //      Initial version created
 //
 //  Dick Munroe ([email protected]) 14-Mar-2006
 //      Add alternatePaymentStatus method.
 //
 //    Dick Munroe ([email protected]) 25-Mar-2006
 //        Put in a notify_url field into the button so that
 //        we get back to this script from the sandbox.
 //
 
 /**
 * @author Dick Munroe <[email protected]>
 * @copyright copyright @ 2006 by Dick Munroe, Cottage Software Works, Inc.
 * @license http://www.csworks.com/publications/ModifiedNetBSD.html
 * @version 1.0.2
 * @package dm.paypal
 * @example ./example.php
 *
 * Is an example of how to write Paypal IPN processors using the classes provided
 * by dm.paypal from phpclasses.org.  The overall process is pretty simple.
 *
 * 1. Create a class that extends paypalIPNBase.
 * 2. Override the following methods:
 *
 *         A. preprocess - called before any $_POST processing has occurred.
 *      B. [optional] sourceNotEmpty - called if there is any data left in $_POST after extracting Paypal IPN data.
 *      C. alternatePaymentStatus - called if the IPN is not a completed payment.
 *      D. checkTransactionId - called to determine if the transaction Id is unique in your application.
 *      E. processPayment - called when the payment has been fully verified.
 *      F. postprocess - called after any/all processing has occurred.
 *
 * 3. Create your Purchasing environment.
 * 4. Configure Paypal to invoke your IPN page.
 * 5. Test, test, test.
 */
 
 include_once("class.paypalIPNBase.php") ;
 include_once("SDD/class.SDD.php") ;
 
 /*
 * An example class to process IPNs in the context of the virtual_payment.php
 * invocation.
 */
 
 class examplePaypalIPN extends paypalIPNBase
 {
 var $m_localEmail = "" ;
 var $m_message = "" ;
 
 function examplePaypalIPN($theLocalEmail, $theReceiverEmail, $thePaypalURL = NULL, $theSandboxURL = NULL)
 {
 $this->m_localEmail = $theLocalEmail ;
 
 $this->paypalIPNBase($theReceiverEmail, $thePaypalURL, $theSandboxURL) ;
 }
 
 function preprocess(&$theSource)
 {
 $this->m_message .= "<pre>\n" ;
 $this->m_message .= "preprocess: \n\n" ;
 $this->m_message .= "The Source: \n" ;
 $this->m_message .= SDD::dump($theSource, FALSE) ;
 $this->m_message .= "\n" ;
 }
 
 function postprocess(&$theIPN, $theStatus)
 {
 $this->m_message .= "postprocess: \n\n" ;
 $this->m_message .= "The IPN: \n" ;
 $this->m_message .= SDD::dump($theIPN, FALSE) ;
 $this->m_message .= "\nThe Status: \n" ;
 $this->m_message .= SDD::dump($theStatus, FALSE) ;
 $this->m_message .= "</pre>\n" ;
 
 if ($this->m_localEmail != '')
 {
 mail($this->m_localEmail, "dm.paypal debugging", $this->m_message) ;
 }
 else
 {
 $f = fopen("./log/message.html", "w") ;
 fwrite($f, $this->m_message) ;
 fclose($f) ;
 }
 }
 
 function sourceNotEmpty(&$theIPN, &$theSource)
 {
 $this->m_message .= "sourceNotEmpty: \n\n" ;
 $this->m_message .= "The IPN: \n" ;
 $this->m_message .= SDD::dump($theIPN, FALSE) ;
 $this->m_message .= "\nThe Source: \n\n" ;
 $this->m_message .= SDD::dump($theSource, FALSE) ;
 $this->m_message .= "\n" ;
 $theReturnStatus = parent::sourceNotEmpty($theIPN, $theSource) ;
 $this->m_message .= "\nThe Status: \n\n" ;
 $this->m_message .= SDD::dump($theReturnStatus, FALSE) ;
 $this->m_message .= "\n" ;
 return $theReturnStatus ;
 }
 
 function alternatePaymentStatus(&$theIPN)
 {
 $this->m_message .= "alternatePaymentStatus: \n\n" ;
 $this->m_message .= "The IPN: \n" ;
 $this->m_message .= SDD::dump($theIPN, FALSE) ;
 $this->m_message .= "\n" ;
 
 /*
 * Indicate that the alternate payment status has been successfully
 * processed.
 */
 
 return true ;
 }
 
 /**
 * This is not normally overridden.  I do so here to provide additional information
 * in the context of the example.
 */
 
 function httpPost ($url, &$theIPN)
 {
 $this->m_message .= "httpPost: \n\n" ;
 $theReturnStatus = parent::httpPost($url, $theIPN) ;
 $this->m_message .= "The Curl: \n\n" ;
 $this->m_message .= SDD::dump($this->m_curl, FALSE) ;
 $this->m_message .= "\n" ;
 $this->m_message .= "The Status: \n\n" ;
 $this->m_message .= SDD::dump($theReturnStatus, FALSE) ;
 $this->m_message .= "\n" ;
 return $theReturnStatus ;
 }
 
 function checkTransactionId($theTransactionId)
 {
 $this->m_message .= "checkTransactionId: \n\n" ;
 $this->m_message .= "The Transaction Id: \n" ;
 $this->m_message .= SDD::dump($theTransactionId, FALSE) ;
 $this->m_message .= "\n" ;
 return true ;
 }
 
 function processPayment(&$theIPN)
 {
 $this->m_message .= "processPayment: \n\n" ;
 $this->m_message .= "The IPN: \n" ;
 $this->m_message .= SDD::dump($theIPN, FALSE) ;
 $this->m_message .= "\n" ;
 return true ;
 }
 }
 
 if(count($_POST)>0)
 {
 
 /*
 * Since this is a test environment, always use the receiver email provided from Paypal, and
 * write output to a log file (./log/message.html).  If you wish to have email sent to an
 * account instead, provide your email address as the first argument when creating the
 * example Paypal IPN object.
 */
 
 $ipn = new examplePaypalIPN("", $_POST['receiver_email']) ;
 $theStatus = $ipn->processNotification($_POST) ;
 }
 else
 {
 ?>
 <pre>
 <!--
 This button was generated by the paypal sandbox and is specific to your particular site.  Generate a new one
 using the sandbox tools for your site and insert the html here.
 -->
 
 <form action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
 <input type="hidden" name="cmd" value="_xclick">
 <input type="hidden" name="business" value="[email protected]">
 <input type="hidden" name="item_name" value="Test Purchase">
 <input type="hidden" name="item_number" value="000001">
 <input type="hidden" name="amount" value="10.00">
 <input type="hidden" name="notify_url" value="<? echo $_SERVER['SCRIPT_URI'] ;?>">
 <input type="hidden" name="no_shipping" value="1">
 <input type="hidden" name="no_note" value="1">
 <input type="hidden" name="currency_code" value="USD">
 <input type="hidden" name="bn" value="PP-BuyNowBF">
 <input type="image" src="https://www.sandbox.paypal.com/en_US/i/btn/x-click-but23.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
 <img alt="" border="0" src="https://www.sandbox.paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
 </form>
 <pre>
 <?php
 }
 
 ?>
 
 |