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 Payment Data Transfers  >  example.php  >  Download  
File: example.php
Role: Example script
Content type: text/plain
Description: Example of use.
Class: Paypal Payment Data Transfers
Retrieve and process Paypal payments data with PDT
Author: By
Last change:
Date: 2006-03-23 07:23
Size: 6,517 bytes
 

Contents

Class file image Download
<?php

/**
 * @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.0
 * @package paypalPDT
 */

/**
 * If you notice, there is a great deal of similarity between the processing
 * of PDT data and IPN data.  Internally the only differences are:
 *
 *    1. The source of the data.
 *       IPN data is received at the IPN callback via a POST.
 *       PDT data is received at the PDT return via a GET and an interaction with Paypal.
 *
 *    2. httpPost needs to be different.
 *       It needs to interact with Paypal AND produce a source of data from which
 *       the PDT data can be extracted and processed.
 *
 *    3. processNotification needs to be different.
 *       Due to the change in interface for httpPost, the "front" end of processNotification
 *       has to be slightly different.
 *
 * All of which means that as written these classes are principally useful for sites which
 * use either PDT or IPN, but not both.
 *
 * Since the actual processing of the PDT or IPN data is functionally identical (at least for
 * most of the cases) it would be ideal if you could transparently plug in either the PDT or
 * IPN base class and do the right thing with a minimum of code duplication.
 *
 * Unfortunately this sort of thing is best done with "mixins" or with delegated interfaces.
 * Since PHP doesn't support multiple inheritance and since I REALLY dislike delagated
 * interfaces the way to reduce to code duplication burden and, more or less transparently,
 * do the same thing with either IPN or PDT invocations is to create a duplicate of the
 * paypalPDTBase class that inherits from the application IPN class, eliminate all the 
 * member functions which would normally be overridden by a super class, and things should
 * (more or less) work identically.
 *
 * I'm going to leave actually DOING this as an excersize to the reader, but rest assured that
 * I have to do this as well, so the architecture of these classes will be such that it
 * will be as easy as possible.
 */
 
include_once("SDD/class.SDD.php") ;
include_once(
"class.paypalPDTBase.php") ;

class 
examplePaypalPDT extends paypalPDTBase
{
    function 
examplePaypalPDT($theReceiverEmail
                              
$thePDTIdentityToken,
                              
$thePaypalURL NULL
                              
$theSandboxURL NULL)
    {
        
$this->paypalPDTBase($theReceiverEmail$thePDTIdentityToken$thePaypalURL$theSandboxURL) ;
    }
    
    function 
preprocess(&$theSource)
    {
        
$theSource array_merge(array('test_pdt' => '1'), $theSource) ;
        echo 
'preprocess:theSource = ',SDD::dump($theSource),SDD::newline() ;
        return 
true ;
    }
    
    function 
preprocessPDT(&$thePDT)
    {
        echo 
'preprocessPDT:thePDT = ',SDD::dump($thePDT),SDD::newline() ;
    }
    
    function 
checkTransactionId($theTransactionId)
    {
        echo 
'checkTransactionId = ',SDD::dump($theTransactionId),SDD::newline(2) ;
        return 
TRUE ;
    }

    function 
validateItem(&$thePDT)
    {
        echo 
'validateItem:thePDT = ',SDD::dump($thePDT),SDD::newline(2) ;
        return 
TRUE ;
    }

    function 
alternatePaymentStatus(&$thePDT)
    {
        echo 
'alternatePaymentStatus:thePDT = ',SDD::dump($thePDT),SDD::newline(2) ;
        return 
TRUE ;
    }

    function 
processPayment(&$thePDT)
    {
        echo 
'processPayment:thePDT = ',SDD::dump($thePDT),SDD::newline(2) ;
        return 
TRUE ;
    }

    function 
postprocess(&$thePDT$theStatus)
    {
        echo 
'postprocess:thePDT = ',SDD::dump($thePDT),SDD::newline(2) ;
        echo 
'postprocess:theStatus = '.SDD::dump($theStatus),SDD::newline(2) ;
    }    
} ;

/**
 * The identity token gets handed to you when you enable PDT for your site.  
 * See your profile under Selling Preferences->Website Payment Preferences 
 * for how to enable PDT.  The identity token is at the top of the page 
 * displayed AFTER you save your Website Payment Preferences.  Don't loose it.
 *
 * @var string The Paypal Payment Data Transfer Identity Token
 */
 
$thePDTIdentityToken 'XV20ACunItkcAQACjJOhIsWYUCt1D1Ce7HnqthqzwlmsHdAEddnp4si08OW' ;

$theSandbox "sandbox." ;
$theReceiverEmail "thewizard1@csworks.com" ;

if (
count($_GET) > 0)
{
    echo 
'serialize($_GET) = ',SDD::dump(serialize($_GET)),SDD::newline(2) ;
    echo 
'$_GET = ',SDD::dump($_GET),SDD::newline(2) ;

    
/*
     * For reasons I don't understand, I can't communicate reliably with the https
     * versions of paypal but the http versions work just fine and for testing
     * it doesn't matter.
     */
     
    
$thePDT = new ExamplePaypalPDT($theReceiverEmail
                                   
$thePDTIdentityToken,
                                   
'http://www.paypal.com/cgi-bin/webscr',
                                   
'http://www.sandbox.paypal.com/cgi-bin/webscr') ;
    
    
$thePDTData = array() ;
    
    
$theReturnStatus $thePDT->processNotification($_GET$thePDTData) ;
    
    echo 
'example.php:thePDT = ',SDD::dump($thePDT),SDD::newline(2) ;
    echo 
'example.php:theReturnStatus = ',SDD::dump($theReturnStatus),SDD::newline(2) ;
}
else
{
?>
<form action="https://www.<? echo $theSandbox ?>paypal.com/cgi-bin/webscr" method="post">
    <p>
        <input type="hidden" name="cmd" value="_xclick">
        <input type="hidden" name="business" value="<? echo $theReceiverEmail ?>">
        <input type="hidden" name="item_name" value="ESPlanner Individual (Download+CD)">
        <input type="hidden" name="item_number" value="000002">
        <input type="hidden" name="amount" value="164.00">
        <input type="hidden" name="no_shipping" value="2">
        <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="hidden" name="notify_url" value="">
        <input type="hidden" name="return" value="<? echo $_SERVER['SCRIPT_URI'] ; ?>">
        <input type="image" src="https://www.<? echo $theSandbox ?>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!">
        (Download+CD)..............164.00
        <img alt="" border="0" src="https://www.<? echo $theSandbox ?>paypal.com/en_US/i/scr/pixel.gif" width="1" height="1">
    </p>
</form>
<?php
}
?>