Location: PHPKode > scripts > Paypal NVP > paypal-nvp/example.php
<?php

/*
 * Copyright @ 2007, Economic Security Planning, Inc., All rights reserved.
 *
 * $Author: dickmunroe $
 * $Date: 2007/12/30 13:47:30 $
 *
 * Edit History:
 *
 *  Dick Munroe (hide@address.com) 22-Dec-2007
 *      Initial Version Created.
 */

/**
 * @author Dick Munroe (hide@address.com)
 * @copyright copyright @ 2004-2007, Dick Munroe, released under the GPL.
 * @license http://www.csworks.com/publications/ModifiedNetBSD.html
 * @version 1.0.0
 * @package PaypalNVP
 *
 * An example collecting transactions and corresponsing details from Paypal
 * using the Paypal NVP framework.
 */

/**
 * @desc Generate a paypal timestamp.
 * @param integer $theTime Unix timestamp.
 * @return string Paypal Timestamp.  Format is: yyyy-mm-ddThh:mm:ssZ
 */

function paypalDate(
    $theTime)
{
    return date('Y-m-d', $theTime) .'T' . date('H:i:s', $theTime) . 'Z' ;
}

include_once('class.GetTransactionDetailsRequestNVP.php') ;
include_once('class.GetTransactionDetailsResponseNVP.php') ;
include_once('class.TransactionSearchRequestNVP.php') ;
include_once('class.TransactionSearchResponseNVP.php') ;
include_once('class.TransportNVP.php') ;

/**
 * @var $paypalAPIconfiguration Paypal configuration data available from Paypal.
 */

$paypalAPIconfiguration =
    array(
        'Credential' => 'API Signature',
        'Username' => '',
        'Password' => '',
        'Signature' => '',
        'RequestDate' => '') ;

/**
 * @var object $transport PaypalNVP transport object, responsible for issuing requests and receiving responses.
 */

$transport =&
    new TransportNVP(
        $paypalAPIconfiguration['Username'],
        $paypalAPIconfiguration['Password'],
        $paypalAPIconfiguration['Signature']) ;

/**
 * @var integer $startDate Unix timestamp of the beginning of period.
 */

$startDate = mktime(0, 0, 0, 12, 1, 2007) ;

/**
 * @var object $searchRequest Search for Paypal transactions.
 */

$searchRequest =&
    new TransactionSearchRequestNVP(
        paypalDate($startDate),
        paypalDate($startDate)) ;

/**
 * @var object $searchResponse Response to searches for Paypal transactions.
 */

$searchResponse =&
    new TransactionSearchResponseNVP() ;

/**
 * @var integer $interval the number of seconds between the start and end of the search period.
 */

$interval = 86400 ;

/**
 * @var object $detailsRequest object requesting the details of a transaction.
 */

$detailsRequest =&
    new GetTransactionDetailsRequestNVP() ;

/**
 * @var object $detailsResponse object containing the details of a transaction.
 */

$detailsResponse =&
    new GetTransactionDetailsResponseNVP() ;

/**
 * The overall algorithm is to request all transactions for a period of
 * interval seconds.
 *
 * If there was an error, reduce the interval by half (assuming that there
 * are too many transactions) and try again.  Keep going until the interval
 * gets too small.
 *
 * Once transactions have been accumulated, go through the transactions one at
 * a time and request the details.
 */

do
{
    $startDate += $interval ;                           // Advance to the beginning of the next day.

    $searchRequest->setENDDATE(paypalDate($startDate - 1)) ;
                                                        // To avoid duplication of transactions,
                                                        // go to the last second of the day.
	$searchRequest->validate(TRUE) ;					// Validate the search request.

    $transport->doRequest($searchRequest, $searchResponse) ;
                                                        // Execute the search and collect the response.
    if ($transport->getStatus()->isSuccess())
    {
        /*
         * The last request was successful, so the search reponse will have
         * data it in.
         */

        var_dump($searchResponse) ;

        $xxx =& $searchResponse->getResponse() ;

        /*
         * The TransactionSearchResponse object organizes the returned data as
         * an array of hashes.  One array element for each returned transaction.
         */

        foreach (array_keys($xxx)  as $aKey)
        {
            /*
             * Since each returned transaction will have a transaction ID,
             * get the details of the transaction given the transaction ID.
             */

            $detailsRequest->setTRANSACTIONID($xxx[$aKey]['L_TRANSACTIONID']) ;

			$detailsRequest->validate(TRUE) ;			// Validate the details request.

            $transport->doRequest($detailsRequest, $detailsResponse) ;

            if ($transport->getStatus()->isSuccess())
            {
                var_dump($detailsResponse) ;
            }
            else
            {
                echo $transport->getStatus()->getLongMessage(TRUE) ;
            }
        }

        $interval = 86400 ;

        $searchRequest->setSTARTDATE(paypalDate($startDate)) ;
    }
    else
    {
        /*
         * for the purposes of this example, I assume that the only
         * error that can be returned is the results list being truncated.
         * Since the Paypal API doesn't have any way to limit the number
         * of transactions returned other than shortening the interval until
         * we get 100 or fewer transactions.
         */

        echo $transport->getStatus()->getLongMessage(TRUE) ;

        $startDate -= $interval ;

        $interval = intval($interval / 2) ;

        if ($interval < 1)
        {
            die('Site is too busy') ;
        }
    }
} while ($startDate < time()) ;
?>
Return current item: Paypal NVP