<?php
// // Edit History: // // Last $Author: munroe $ // Last Modified: $Date: 2006/03/25 11:43:02 $ // // Dick Munroe (munroe@csworks.com) 28-Feb-2006 // Initial version created // // Dick Munroe (munroe@csworks.com) 14-Mar-2006 // Add alternatePaymentStatus method. // // Dick Munroe (munroe@csworks.com) 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 <munroe@csworks.com> * @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="thewizard1@csworks.com"> <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 }
?>
|