Ошибка IPN Paypal со встроенной новой строкой в ​​адресе - PullRequest
5 голосов
/ 22 ноября 2010

Итак, это новый для меня. Мой Paypal IPN работал некоторое время, и сегодня я получил сообщение об ошибке.

Во время обратной отправки для проверки с помощью PayPal (добавив cmd = _notify-validate), ответчик PayPal говорит «нет, это не от меня» Единственное, что странно в этой записи - это (я считаю) способ, которым пользователь указал свой адрес:

123 Адрес Улица
# 789

Все остальное кажется нормальным, и обработчик IPN довольно успешно обрабатывает другие уведомления.

Кто-нибудь видел что-нибудь подобное?

Ответы [ 3 ]

4 голосов
/ 22 ноября 2010

Хорошо, я нашел свою ошибку, и да, она связана с новой строкой в ​​адресе.

В основном я делал это:

foreach ($post_array as $name => $value) {
  $value = urlencode($value);
  $post_string .= $name . '=' . $value . '&';
}
$post_string .= "cmd=_notify-validate";

Когда мне было нужнотакже преобразовать /n в /r/n, например так:

foreach ($post_array as $name => $value) {
  $value = urlencode(str_replace("\n", "\r\n", $value));
  $post_string .= $name . '=' . $value . '&';
}
$post_string .= "cmd=_notify-validate";

Теперь PayPal счастлив.

Le sigh.

1 голос
/ 16 июня 2018

Обновление 2018, поскольку я только что ударился головой об эту ошибку СНОВА после обновления сайта с CI v2 до CI v3 ...

Начиная с CodeIgniter v3, стандартизация новой строки теперь отключена по умолчанию (ранее был включен по умолчанию).А что касается CI v3.1.3, standardize_newlines считается устаревшим , так что пора отучить его, если вы этого еще не сделали.

Результатом этого стало то, что в первый раз мой сценарий IPNЯ должен был обработать адрес с разрывом строки, а Paypal ответил, что он недействителен.

Потребовалось время, чтобы выяснить это, так как я не понимал, что стандартное значение стандартизации новой строки отличается.Но решение состоит в том, чтобы упростить код, который объединяет эту строку ответа для отправки обратно в Paypal, просто извлекая часть (str_replace("\n", "\r\n", $value) и заменяя ее просто $value (все еще выполняя urlencode, хотя).

Итак, вернемся к тому, как это должно было работать в первую очередь, по сути ... и теперь PayPal снова счастлив.

0 голосов
/ 01 мая 2014

Немного больше информации, так как я сам потратил полдня на эту ошибку.

Похоже, что это ошибка, введенная платформой CodeIgniter, которую я также использую, CodeIgniter стандартизирует новые строки https://github.com/EllisLab/CodeIgniter/blob/2.1.4/system/core/Input.php#L707

Это, кажется, нарушает ответ IPN, и ответ выше -лучший способ исправить это.

$value = urlencode(str_replace("\n", "\r\n", $value));
...