Здравствуйте! У меня почему-то не работает код-обработчик IPN PHP: <?php // STEP 1: Read POST data // reading posted data from directly from $_POST causes serialization // issues with array data in POST // reading raw POST data from input stream instead. $raw_post_data = file_get_contents('php://input'); $raw_post_array = explode('&', $raw_post_data); $myPost = array(); foreach ($raw_post_array as $keyval) { $keyval = explode ('=', $keyval); if (count($keyval) == 2) $myPost[$keyval[0]] = urldecode($keyval[1]); } // read the post from PayPal system and add 'cmd' $req = 'cmd=_notify-validate'; if(function_exists('get_magic_quotes_gpc')) { $get_magic_quotes_exists = true; } foreach ($myPost 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"; } // STEP 2: Post IPN data back to paypal to validate $ch = curl_init('https://www.paypal.com/cgi-bin/webscr'); // change to [...]sandbox.paypal[...] when using sandbox to test curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_POSTFIELDS, $req); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); curl_setopt($ch, CURLOPT_FORBID_REUSE, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close', 'User-Agent: Legal Consulting')); // In wamp like environments that do not come bundled with root authority certificates, // please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path // of the certificate as shown below. // curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem'); if( !($res = curl_exec($ch)) ) { error_log("Got " . curl_error($ch) . " when processing IPN data"); curl_close($ch); exit; } curl_close($ch); // STEP 3: Inspect IPN validation result and act accordingly if (strcmp ($res, "VERIFIED") == 0) { echo "VERIFIED"; } else if (strcmp ($res, "INVALID") == 0) { echo "INVALID"; } ?> если использую sandbox то var_dump($req) выдаст информацию типа: cmd=_notify-validate&mc_gross=37.50&protection_eligibility=Ineligible&payer_id=J86MHHMUDEHZU&tax=0.00&payment_date=07%3A04%3A48+Mar+30%2C+2015+PDT&payment_status=Completed&charset=windows-1252&first_name=test&mc_fee=1.39... в live же выводит просто : cmd=_notify-validate Уже кучу информации перечитал, перепробовал море методов, но ничего не получается.
Можно попробовать использовать примеры от paypal https://github.com/paypal/ipn-code-samples/tree/master/php
класс добавил в function.php на странице пишу: PHP: <?php include_once('functions.php'); use PaypalIPN; $ipn = new PaypalIPN(); // Use the sandbox endpoint during testing. $ipn->useSandbox(); $verified = $ipn->verifyIPN(); if ($verified) { echo "VERIFIED"; } else { echo "INVALID"; } // Reply with an empty 200 response to indicate to paypal the IPN was received correctly. header("HTTP/1.1 200 OK"); ?> выводит ошибку
удали это, посмотрим что получится --- Добавлено --- как добавил? можно было и отдельно в файл положить
Почему тогда ошибка непонятная выходит? на скриншоте ошибка если я все в один файл закину, а текстом если только use уберу.
мне она довольна понятна, скрипт видимо ожидает какие-то POST данные, ты их не предоставил, вот он и вызвал ошибку
В общем, я делал проверку вардампом - получается, что пост-данные приходят, но после вызова класса $_POST масив очищается. По-этому постоянно исполняется PHP: if ( ! count($_POST)) { throw new Exception("Missing POST Data"); и я не понимаю почему --- Добавлено --- Я буду невероятно признателен, если поможете с этим разобраться.
Без wordpress? К сожалению нельзя - весь сайт на нем и он практически готов - остался только этот paypal