Я прочитал несколько сообщений здесь относительно IPN и связанных платежей, и мне трудно понять это, так как это все для меня в новинку. Но мой сценарий прост, и вот что я пытаюсь достичь.
покупатель платит продавцу (продавцу) продавец платит мне комиссию. Это все работает. Но мне нужна проверка для серверной работы.
Я указываю мой слушатель ipn с переменной
$ipnurl = "http://example.com/ipnlistener.php?adid=$adid
Потому что adid — мой ключ ко всему в бэкэнде.
В моем API я использую NVP и определяю вызов следующим образом. Имейте в виду, что все это работает, кроме IPN.
$request_parameters = array (
"actionType" => "PAY",
"ipnNotificationUrl" => "$ipnurl",
"clientDetails.applicationID" => "$ppappid",
"clientDetails.ipAddress" => "127.0.0.1",
"feesPayer" => "PRIMARYRECEIVER",
"memo" => "$adtitle",
"receiverList.receiver(0).amount" => "$r1amount",
"receiverList.receiver(0).email" => "$r1email",
"receiverList.receiver(0).primary" => "true",
"receiverList.receiver(1).amount" => "$r2amount",
"receiverList.receiver(1).email" => "$r2email",
"receiverList.receiver(1).primary" => "false",
"requestEnvelope.errorLanguage" => "en_US",
"requestEnvelope.detailLevel" => "ReturnAll",
"currencyCode" => "USD",
"returnUrl" => $adpage,
"cancelUrl" => $adpage
);
Для простого теста у меня есть следующее как часть моего ipnlistener, чтобы я мог видеть, что входит.
foreach ($_POST as $key => $value) {
if($get_magic_quotes_exists == true && get_magic_quotes_gpc() == 1){
$value = urlencode(stripslashes($value));
} else {
$value = urlencode($value);
}
$req .= "&$key=$value";
}
$result = print_r($_POST, true);
file_put_contents('/tmp/ipnlistener.txt', $result);
В приведенном выше сценарии файл журнала содержит следующее:
Array
(
[transaction] => Array
(
[0] => NONE
[1] => Completed
)
[log_default_shipping_address_in_transaction] => false
[action_type] => PAY
[ipn_notification_url] => http://www.example.com/ipnlistener.php
[charset] => windows-1252
[transaction_type] => Adaptive Payment PAY
[notify_version] => UNVERSIONED
[cancel_url] => http://www.example.com/showad.php?adid=20
[verify_sign] => ********
[sender_email] => ******
[fees_payer] => PRIMARYRECEIVER
[return_url] => http://www.example.com/showad.php?adid=20
[memo] => Leica M Lens CLOSE UP to Sony NEX
[reverse_all_parallel_payments_on_error] => false
[pay_key] => *******
[status] => COMPLETED
[payment_request_date] => Tue Oct 14 11:10:18 PDT 2014
)
Как вы можете видеть, это выглядит как IPN для конкретного приложения. Мне нужны реальные данные для завершения транзакции.
Если я удаляю ipnurl и настраиваю уведомления ipn обратно на сайте, я получаю то, что ожидаю, НО БЕЗ adid, в котором я так отчаянно нуждаюсь.
Это выглядит так
Array
(
[transaction_subject] =>
[payment_date] => 07:40:38 Oct 14, 2014 PDT
[txn_type] => web_accept
[last_name] => ***
[residence_country] => US
[item_name] =>
[payment_gross] => 0.03
[mc_currency] => USD
[business] => ***
[payment_type] => instant
[protection_eligibility] => Ineligible
[verify_sign] => ***
[payer_status] => unverified
[tax] => 0.00
[payer_email] => ***
[txn_id] => ***
[quantity] => 0
[receiver_email] => ***
[first_name] => Jorge
[payer_id] => ***
[receiver_id] => ***
[memo] => Leica M Lens CLOSE UP to Sony NEX
[item_number] =>
[payer_business_name] => ZeissImages
[payment_status] => Completed
[payment_fee] => 0.03
[mc_fee] => 0.03
[mc_gross] => 0.03
[custom] =>
[charset] => windows-1252
[notify_version] => 3.8
[ipn_track_id] => ***
)
Вопрос в том, как получить IPN транзакции с добавленным параметром cutom?
Спасибо
Сохраните запись в своей локальной базе данных, которая содержит необходимые данные вместе с PayKey транзакции, которую вы делаете. Затем, когда IPN конкретного приложения попадет, вы можете извлечь эти данные из вашей базы данных, используя этот PayKey.
Других решений пока нет …