Php PayPal IPN возвращает НЕДЕЙСТВИТЕЛЬНО

Я знаю, что по состоянию на 15 мая 2018 года в систему PayPal IPN было внесено несколько изменений. Я как раз в процессе реализации своего первого прослушивателя IPN; и Я не уверен, что я потерялся из-за того, что мои ресурсы (включая сообщения SO, некоторые из которых относятся к 2009 году по этой теме) были устаревшими из-за изменений PayPal, или просто потому, что я неопытен в этой области.

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

$fh = fsockopen('ssl://www.paypal.com',443,$errno,$errstr,30);
//$fh = fsockopen('https://www.sandbox.paypal.com',80,$errno,$errstr,30);
//$fh = fsockopen('https://ipnpb.sandbox.paypal.com/cgi-bin/webscr',80,$errno,$errstr,30);

Первый адрес завершается успешным рукопожатием с PayPal, но возвращает INVALID в качестве ответа IPN. Вторые два рукопожатия, но не проходят тест if (!$fh).

Я пробовал как код ниже, так и код CURL, найденный в ответе Криса Мюнха здесь: PayPal IPN возвращает недействительный в песочнице

<?php
// Paypal IPN code

header('HTTP/1.1 200 OK'); // send header

$resp = 'cmd=_notify-validate';
foreach ($_POST as $parm => $var){
    $var = urlencode(stripslashes($var));
    $resp .= "&$parm=$var";
}

$httphead = "POST /cgi-bin/webscr HTTP/1.1\r\n";
$httphead .= "Content-Type: application/x-www-form-urlencoded\r\n";
$httphead .= "Content-Length: " . strlen($resp) . "\r\n\r\n";

// create a  = "file handle" for writing to a URL to paypal.com on Port 443 (the IPN port)
$errno ='';
$errstr='';

$fh = fsockopen('ssl://www.paypal.com',443,$errno,$errstr,30);
//$fh = fsockopen('https://www.sandbox.paypal.com',443,$errno,$errstr,30);
//$fh = fsockopen('https://ipnpb.sandbox.paypal.com/cgi-bin/webscr',443,$errno,$errstr,30);

if (!$fh) {
    // if-fh does not work - cnxn FAILED
} 
else{
    // Connection opened, so spit back the response and get PayPal's view whether it was an authentic notification
    fputs ($fh,$httphead.$resp);
    while (!feof($fh)){
        $readresp = fgets ($fh, 1024);
        if (strcmp(trim($readresp),"VERIFIED") == 0){
            // if-fh works - cnxn OPEN';
            // WE ALL WIN!!
        }
        else if (strcmp(trim($readresp),"INVALID") == 0){
            // A possible hacking attempt, or
            // In my case, a possible hacking false-positive
        }
    }
fclose ($fh);
}
?>

Я тестирую симулятор IPN в своей учетной записи песочницы.

Ни одно из рекомендованных SO решений не сработало.

Пожалуйста помоги!

PayPal сообщает о проблеме с их средой Sandbox и новым адресом ipnpb.

Parapluie 25.05.2018 15:17
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
1
260
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Для записи, этот URL-адрес, похоже, работает нормально: https://www.paypal.com/cgi-bin/webscr

Другие вопросы по теме