Я знаю, что в систему PayPal IPN было внесено несколько изменений с 15 мая 2018 года. Я нахожусь в процессе внедрения моего первого прослушивателя 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 решений не сработало.
Пожалуйста, помогите!