Paypal Multiple Ipn Setup

Paypal multiple IPN setup

I found this script from http://codeseekah.com/ which will enable you to set-up multiple PayPal IPN listeners. It allows you to filter the notifications which means that you can send to different listeners depending on conditions that you set (so useful!):

<?php

ini_set( 'max_execution_time', 0 ); // Do not abort with timeouts
ini_set( 'display_errors', 'Off' ); // Do not display any errors to anyone
$urls = array(); // The broadcast session queue

// List of IPN listener points ** ADJUST THESE TO POINT TO YOUR LISTENERS
$ipns = array(
'first' => 'http://www.yourwebsite1.co.uk//paypal/ipn.php',
'second' => 'http://www.yourwebsite2.co.uk//paypal/ipn.php',
'third' => 'http://www.yourwebsite3.co.uk//paypal/ipn.php'
);

// ** ADJUST THESE CONDITIONS TO FILTER
if($_POST['txn_type']!='cart') $urls []= $ipns['first']; // Choose this IPN URL if all conditions have been met
if(isset($_POST['auction_buyer_id'])) $urls []= $ipns['second']; // Choose this IPN URL if all conditions have been met
$urls []= $ipns['third']; // maybe this one is always sent to

// Broadcast
if ( !sizeof($urls) ) $urls = $ipns; // No URLs have been matched
$urls = array_unique( $urls ); // Unique, just in case

// Broadcast (excluding IPNs from the list according to filter is possible
foreach ( $urls as $url ) broadcast( $url );

header( 'HTTP/1.1 200 OK', true, 200 );
exit();

// Perform a simple cURL-powered proxy request to broadcast
function broadcast( $url ) {

// Format POST data accordingly
$data = array();
foreach ($_POST as $key => $value) $data []= urlencode($key).'='.urlencode($value);
$data = implode('&', $data);

// Log the broadcast
file_put_contents('_logs/'.time().'.'.reverse_lookup( $url ).'-'.rand(1,100), $data);

$ch = curl_init(); // Initialize

curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, count($data));
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_exec($ch); // Execute HTTP request
curl_close($ch); // Close
}

function reverse_lookup( $url ) {
global $ipns;
foreach ( $ipns as $tag => $_url ) {
if ( $url == $_url ) return $tag;
}
return 'unknown';
}
?>

Just customise the parts you need to (with **s), save it in a file, for example called "multiple-paypal-ipn.php", then put it on one of your servers. Then in your PayPal IPN URL setting (in PayPal) put in the full URL where you have just placed it, e.g. http://www.yourwebsite/paypal/multiple-paypal-ipn.php

This saved me BIG time so hopefully will for others!_g

PayPal ipn notify_url on different sites

Yes, specifying notify_url in the payment will override any value set in the PayPal account profile.

The only time this wouldn't work out for you is if you're working with subscriptions/recurring payments. In that case, the IPNs that are sent for the future payments that belong to the profile would go to the URL listed in the PayPal account.

Multiple receivers for IPNs

If you have IPN configured in your PayPal account profile that will act as a default catch-all. If you then set an IPN URL via the NotifyURL parameter of payment requests that would override the value set in your profile.

If you need to have IPN data sent to more than one IPN URL with a single transaction you can daisy-chain the IPN scripts. PayPal would send the IPN to your URL, which could then forward that IPN data on to as many secondary URL's as you need to.



Related Topics



Leave a reply



Submit