Вы должны быть осторожны, чтобы отправить в 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
}