Paypal IPN не может быть подтвержден - PullRequest
0 голосов
/ 17 апреля 2011

Я пытаюсь внедрить Paypal IPN, но он никогда не достигает URL-адреса, который я установил. Я написал скрипт для регистрации посещений этого URL, и все, что я получаю, это мои посещения.

Сколько времени потребуется Paypal для отправки уведомления?

EDIT

Внезапно начали приходить IPN, но теперь я не могу проверить ... Вот код:

$url = 'https://www.paypal.com/cgi-bin/webscr';
        $postdata = '';
        foreach ($_POST as $i => $v) {
            $postdata .= $i . '=' . urlencode($v) . '&';
        }
        $postdata .= 'cmd=_notify-validate';

        $web = parse_url($url);
        if ($web['scheme'] == 'https') {
            $web['port'] = 443;
            $ssl = 'ssl://';
        } else {
            $web['port'] = 80;
            $ssl = '';
        }
        $fp = @fsockopen($ssl . $web['host'], $web['port'], $errnum, $errstr, 30);

        if (!$fp) {
            echo $errnum . ': ' . $errstr;
        } else {
            fputs($fp, "POST " . $web['path'] . " HTTP/1.1\r\n");
            fputs($fp, "Host: " . $web['host'] . "\r\n");
            fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
            fputs($fp, "Content-length: " . strlen($postdata) . "\r\n");
            fputs($fp, "Connection: close\r\n\r\n");
            fputs($fp, $postdata . "\r\n\r\n");

            while (!feof($fp)) {
                $info[] = @fgets($fp, 1024);
            }
            fclose($fp);
            $info = implode(',', $info);
            if (eregi('VERIFIED', $info)) {

            } else {

}

}

1 Ответ

0 голосов
/ 17 апреля 2011

Я уже прокомментировал выше.Но я почти уверен, что код HTML & испортил ваш обратный вызов.

Существует большая разница между кодировкой URL и кодировкой HTML .

Измените '&' на '&'.& - это символ url / post, используемый для разделения различных наборов пар ключ / значение.Изменив его на &, вы сделали весь обратный вызов одним значением.

Кроме того, просто несколько советов, но я бы отказался от этого

if (eregi('VERIFIED', $info)) {} else {}

и заменил бы его на

if (preg_match('/VERIFIED/', $info))  {} else {}

eregi амортизируется.
http://php.net/manual/en/function.eregi.php

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