title: PayPal Parallel Payment IPN
body: <p>I have been stuck for days! I am trying to get the details from PayPal IPN from a parallel payment.</p>
  
  <p>I need the two email addresses that money was sent to and the amount, also the status.</p>
  
  <p>I am looking here:</p>
  
  <p><a href="https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&amp;content_ID=developer/e_howto_api_APIPN" rel="nofollow">https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&amp;content_ID=developer/e_howto_api_APIPN</a></p>
  
  <p>These are the lines in my code where I try and get email and amount: </p>
  
  <pre><code>$Email1 = $_POST['transaction[0].receiver'];
  $Email2 = $_POST['transaction[1].receiver'];
  </code></pre>
  
  <p>And amount part:</p>
  
  <pre><code>$Amount1 = $_POST['transaction[0].amount'];
  $Amount2 =  $_POST['transaction[1].amount'];
  </code></pre>
  
  <p>I am use the IPN code from this page.</p>
  
  <p><a href="https://cms.paypal.com/cms_content/AU/en_AU/files/developer/IPN_PHP_41.txt" rel="nofollow">https://cms.paypal.com/cms_content/AU/en_AU/files/developer/IPN_PHP_41.txt</a></p>
  
  <p>Any help? The POST variables come up blank?</p>
  
  <hr>
  
  <p>Update: I Have found this:</p>
  
  <pre><code>&lt;source lang="php"&gt;
  &lt;?php
  error_reporting(E_ALL ^ E_NOTICE); 
  // By Gleb Esman, gleb@memberwing.com, http://www.memberwing.com/
  //
  // Pull raw POST data.
  // We need to pull raw data and build our own copy of $_POST in order to
  // workaround of invalid POST keys that Adaptive IPN request uses.
  
  $raw_post_data = file_get_contents('php://input');
  $raw_post_array = explode('&amp;', $raw_post_data);
  $_YOUR_POST = array();
  foreach ($raw_post_array as $keyval) {
    $keyval = explode('=', $keyval);
    if (count($keyval) == 2)
      $_YOUR_POST[$keyval[0]] = urldecode($keyval[1]);
  }
  if (count($_YOUR_POST) &lt; 3) {
    $_YOUR_POST = $_POST;
    $original_post_used = TRUE;
  }
  else
    $original_post_used = FALSE;
  
  // Build final $_req postback request
  // Paypal's IPN Sample
  // read the post from PayPal system and add 'cmd'
  
  if ($original_post_used) {
    $_req = 'cmd=_notify-validate';
    foreach ($_YOUR_POST as $key =&gt; $value) {
      $value = urlencode(stripslashes($value));
      $_req .= "&amp;$key=$value";
    }
  }
  else
    $_req = $raw_post_data . '&amp;cmd=_notify-validate';
  // $_req is ready for postback to Paypal here...
  $req = $_req;
  
  ////////////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////////////
  ////////////////////////////////////////////////////////////////////////////////
  
  
  
  // PHP 4.1
  // read the post from PayPal system and add 'cmd'
  //$req = 'cmd=_notify-validate';
  //
  //foreach ($_POST as $key =&gt; $value) {
  //  $value = urlencode(stripslashes($value));
  //  $req .= "&amp;$key=$value";
  //}
  
  // post back to PayPal system to validate
  $header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
  $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
  $header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
  $fp = fsockopen('ssl://www.paypal.com', 443, $errno, $errstr, 30);
  
  // throw all this junk into the local error log so we can see what happened!
  function log_arr($item, $key) {
    $p .= "$key = $item";
    error_log(urldecode($p));
  }
  array_walk_recursive($_YOUR_POST, 'log_arr');
  error_log(urldecode($req));
  
  // assign posted variables to local variables
  $item_name = $_POST['item_name'];
  $item_number = $_POST['item_number'];
  $payment_status = $_POST['payment_status'];
  $payment_amount = $_POST['mc_gross'];
  $payment_currency = $_POST['mc_currency'];
  $txn_id = $_POST['txn_id'];
  $receiver_email = $_POST['receiver_email'];
  $payer_email = $_POST['payer_email'];
  
  if (!$fp) {
  // HTTP ERROR
  } else {
    fputs($fp, $header . $req);
    while (!feof($fp)) {
      $res = fgets($fp, 1024);
      if (strcmp($res, "VERIFIED") == 0) {
  // check the payment_status is Completed
  // check that txn_id has not been previously processed
  // check that receiver_email is your Primary PayPal email
  // check that payment_amount/payment_currency are correct
  // process payment
      } else if (strcmp($res, "INVALID") == 0) {
  // log for manual investigation
      }
    }
    fclose($fp);
  }
  ?&gt;
  &lt;/source&gt;
  </code></pre>
  
  <p>which produces this in log file:</p>
  
  <pre><code>[10-Dec-2011 07:13:50] transaction[0].id_for_sender_txn = xxxxx
  [10-Dec-2011 07:13:50] log_default_shipping_address_in_transaction = xxx
  [10-Dec-2011 07:13:50] transaction[0].receiver = xxxxx
  [10-Dec-2011 07:13:50] action_type = xxxx
  
  [10-Dec-2011 07:13:50] transaction[1].paymentType = xxx
  [10-Dec-2011 07:13:50] transaction[0].amount = xxxx
  [10-Dec-2011 07:13:50] charset = xxx
  </code></pre>
  
  <p>Can anyone tell me how to get these into variables as this is what is printed in log file?</p>