PayPal Параллельный платеж IPN - PullRequest
1 голос
/ 10 декабря 2011

Я застрял на несколько дней!Я пытаюсь получить данные из PayPal IPN из параллельного платежа.

Мне нужны два адреса электронной почты, на которые были отправлены деньги, и сумма, а также статус.

Я ищу здесь:

https://cms.paypal.com/us/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_api_APIPN

Это строки в моем коде, где я пытаюсь получить электронную почту, и сумма:

$Email1 = $_POST['transaction[0].receiver'];
$Email2 = $_POST['transaction[1].receiver'];

И часть суммы:

$Amount1 = $_POST['transaction[0].amount'];
$Amount2 =  $_POST['transaction[1].amount'];

Я использую код IPN с этой страницы.

https://cms.paypal.com/cms_content/AU/en_AU/files/developer/IPN_PHP_41.txt

Любая помощь?Переменные POST появляются пустыми?


Обновление: Я нашел это:

<source lang="php">
<?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('&', $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) < 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 => $value) {
    $value = urlencode(stripslashes($value));
    $_req .= "&$key=$value";
  }
}
else
  $_req = $raw_post_data . '&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 => $value) {
//  $value = urlencode(stripslashes($value));
//  $req .= "&$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);
}
?>
</source>

, который производит это в файле журнала:

[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

Может кто-нибудьподскажите, как получить их в переменные, как это то, что напечатано в файле журнала?

1 Ответ

0 голосов
/ 10 декабря 2011

Попробуйте $_POST['transaction']['0']['receiver'] и так далее. Кроме того, включите E_ALL сообщения об ошибках, чтобы вы видели уведомления о подобных вещах. Если бы это было включено, и вы проверили свой журнал ошибок, вы бы увидели неопределенное уведомление об индексе. Кроме того, если вы когда-нибудь отчаянно пытаетесь отладить материал $_POST/$_GET/whatever, и не вы управляете запросом, вы всегда можете записать содержимое в файл и проверить его.

...