Intereting Posts

Не получать ответ от Paypal IPN Sandbox

Я помещаю paypal checkout на свой сайт, но я падаю со слушателем. Для тех из вас, кто не знаком с системой IPN Paypal, в основном Paypal отправляет ваш скрипт с сообщением о транзакции, которую вы отправляете обратно с добавлением нескольких добавленных битов. Если Paypal получит правильный ответ, он ответит «VERIFIED», и если нет, он скажет «INVALID».

Я преуспел с первым битом. Мой код может получать информацию от PayPal, добавлять дополнительные данные и отправлять их обратно. Тем не менее, я не получаю ответа от Sandbox, говорящего «VERIFIED» или «INVALID». Я в значительной степени скопировал свой код с веб-сайта paypal, поэтому я надеялся, что это будет довольно просто, поэтому, если вы могли бы потратить минуту на мой код, возможно, некоторые новые глаза могли бы выбрать, где я ошибся ,

Вот код. Ничего особенного, он буквально просто получает информацию, настраивает ее, передает ее и читает ответ (который он либо не получает, либо не понимает, что это получает)

<?php $debug=true; //Put together postback info $postback = 'cmd=_notify-validate'; foreach($_POST as $key =>$value){ $postback .= "&$key=$value"; } // build the header string to post back to PayPal system to validate $header = "POST /cgi-bin/webscr HTTP/1.1\r\n"; $header .= "Host: www.sandbox.paypal.com\r\n"; $header .= "Content-Type: application/x-www-form-urlencoded\r\n"; $header .= "Content-Length: " . strlen($postback) . "\r\n\r\n"; $fp = fsockopen ('www.sandbox.paypal.com', 80, $errno, $errstr, 30);//open the connection if(!$fp){ //no conn die(); } //post data back fputs($fp, $header . $postback); while(!feof($fp)){ $res=fgets ($fp, 1024); if((strcmp($res, "VERIFIED")) == 0){ //verified! if($debug){ $filename = 'debug/debug5_verified.txt'; //create a file telling me we're verified $filehandle=fopen($filename, 'w'); fwrite($filehandle,'VERIFIED!'); fclose($filehandle); } } } ?> 

Заранее спасибо!

Solutions Collecting From Web of "Не получать ответ от Paypal IPN Sandbox"

Переключитесь на использование HTTPS-url, я не уверен, когда в последнее время все мои тестовые скрипты начали сбой при простой HTTP-версии. Они выглядят мигрирующими.

Я использую тот же код примера PayPal, который вы:

  $fp = fsockopen ('ssl://www.sandbox.paypal.com', 443, $errno, $errstr, 30); 

или

  $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30); 

Поэтому я думаю, что нашел решение. Оказывается, у него не было проблем с подключением к ssl: // sandbox …., он действительно получал ответ. Код повесился на

 while(!feof($fp)){ $res=fgets($fp,1024); } в while(!feof($fp)){ $res=fgets($fp,1024); } 

немного. Все, что я сделал, это заменить его:

 $res=stream_get_contents($fp, 1024); 

и это сработало в первый раз! Теперь я могу продолжить свою жизнь. Еще раз спасибо за помощь в этом.

Возможно, исходный код отсутствовал: $header .= "Connection: close\r\n\r\n";

Обратите внимание, что в примере кода Paypal используется HTTP / 1.0, поэтому нет этой строки. И HTTP / 1.1 отлично, но может понадобиться строка.

По другой причине Sandbox может больше не поддерживать порт 80. Я получаю перенаправление 302 на https://www.sandbox.paypal.com .

Я заметил, что URL-адрес, который вы публикуете, немного отличается от приведенного ниже, не так ли?

это со страницы справки по тестированию IPN:

Убедитесь, что вы отправляете свой ответ на правильный URL-адрес: https://www.sandbox.paypal.com/cgi-bin/webscr или https://www.paypal.com/cgi-bin/webscr , в зависимости от тестируете ли вы в песочнице или вы живете, соответственно.

Убедитесь, что ваш ответ содержит точно такие же переменные и значения IPN в том же порядке, которому предшествует cmd = _notify-validate.

Убедитесь, что вы кодируете строку ответа и используете ту же кодировку символов, что и исходное сообщение.

EDIT: К сожалению, я также хотел упомянуть, что порт для HTTP и HTTPS отличается от 80, а не 443. Я не слишком хорошо знаком с API Paypal, но могу посмотреть на него, поскольку вижу, что вы используете 80.

Тест-сервер PayPal перенесен в:

 $fp = fsockopen('ssl://ipnpb.paypal.com', 443, $errno, $errstr, 30); 

проверьте версию php версии tls. он должен быть tls 1.2, чтобы получить ответ от учетной записи sandbox. обновите версию php до 5.5, чтобы получить разъем tls 1.2.

paypal отключил службу sslv3 и изменился на tls 1.2.

если вам нужно получить ответ, для версии php потребуется tls 1.2, чтобы получить tls 1.2 php можно обновить до 5,5 или более.

перейдите по ссылке .