Login   Register  
PHP Classes
elePHPant
Icontem

File: example.php

Recommend this page to a friend!
Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Richard Munroe  >  Paypal Instant Payment Notification  >  example.php  >  Download  
File: example.php
Role: Example script
Content type: text/plain
Description: Example using buy now and Paypal IPN integration
Class: Paypal Instant Payment Notification
Process payments with Paypal IPN
Author: By
Last change: Update the Buy Now button to always return to the current script.
Date: 2006-03-25 03:50
Size: 6,544 bytes
 

Contents

Class file image Download
<?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($theSourceFALSE) ;
    
$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($theIPNFALSE) ;
    
$this->m_message .= "\nThe Status: \n" ;
    
$this->m_message .= SDD::dump($theStatusFALSE) ;
    
$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($theIPNFALSE) ;
    
$this->m_message .= "\nThe Source: \n\n" ;
    
$this->m_message .= SDD::dump($theSourceFALSE) ;
    
$this->m_message .= "\n" ;
    
$theReturnStatus parent::sourceNotEmpty($theIPN$theSource) ;
    
$this->m_message .= "\nThe Status: \n\n" ;
    
$this->m_message .= SDD::dump($theReturnStatusFALSE) ;
    
$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($theIPNFALSE) ;
        
$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_curlFALSE) ;
    
$this->m_message .= "\n" ;
    
$this->m_message .= "The Status: \n\n" ;
    
$this->m_message .= SDD::dump($theReturnStatusFALSE) ;
    
$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($theTransactionIdFALSE) ;
    
$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($theIPNFALSE) ;
    
$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
}

?>