Сообщение PayPal IPN INVALID Когда есть специальные символы - PullRequest
1 голос
/ 02 июня 2011

Когда я делаю платеж кредитной картой в песочнице PayPal, я заполняю некоторые специальные символы (например:! @ # @% ^ & ) в текстовых полях адрес 1 / адрес 2. После оплаты я получаю сообщение IPN, отправляю сообщение обратно на PP и получаю сообщение INVALID (ошибка HTTP 200).

Я установил UTF-8 на профиль / язык на PP. Но проблема все еще там.

Примечание: Процесс оплаты работает нормально, если я оплачиваю с использованием учетной записи PP (означает войти в систему и нажать кнопку оплаты).

1 Ответ

3 голосов
/ 02 июня 2011

Вы должны быть осторожны, чтобы отправить в Paypal точные данные, которые вы получили при вызове IPN, с заметным исключением параметра cmd, который должен быть установлен на _notify-validate.

Вот некоторый код PHP, который принимает необработанные данные POST, анализирует их в массив, изменяет параметр cmd, преобразует его обратно в данные POST и отправляет в Paypal. Получение необработанных данных POST позволяет обойти встроенный в PHP синтаксический анализ, который может привести к беспорядочным вещам, таким как магические кавычки, в зависимости от вашей конфигурации.

$post = file_get_contents('php://input');
parse_str($post, $data);
$data['cmd'] = '_notify-validate';
$post = http_build_query($data);

$ch = curl_init('https://www.paypal.com/cgi-bin/webscr');
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

$result = curl_exec($ch);
curl_close($ch);

if ($result == 'VERIFIED') {
    // process the payment
}
...