Это мой код для интерпретации уведомления PayPal. Я продолжаю получать «INVALID» из PayPal. Мне жаль, что этот вопрос - это всего лишь фрагмент кода, но я долгое время работаю над ним и не вижу никакого прогресса.PayPal IPN, возвращающий INVALID
Если у кого-то есть какие-то идеи, но вам нужно увидеть некоторую отладочную информацию, то способ, которым я получаю это, - это функция php mail(), поэтому просто спросите, и я могу ее получить.
<?php
$debugmessage = "";
require($_SERVER['DOCUMENT_ROOT'] . '/xxxx.php');
mysql_connect("$server", "$user", "$password") or die(mysql_error());
mysql_select_db("$database") or die(mysql_error());
// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: " . strlen($req) . "\r\n\r\n";
$fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);
if (!$fp) {
// HTTP ERROR
echo "http error";
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
$debugmessage .= "|".$res;
$debugmessage .= "|".strlen($req);
if (strcmp ($res, "VERIFIED") == 0) {
// PAYMENT VALIDATED & VERIFIED!
$debugmessage .= "|"+"payment VALID";
$email = $_POST['payer_email'];
$password = mt_rand(100000, 999999);
mysql_query("INSERT INTO users (email, password) VALUES('". mysql_escape_string($email) ."', '".md5($password)."') ") or die(mysql_error());
$to = $email;
$subject = 'Download Area | Login Credentials';
$message = '
Thank you for your purchase!
Your account information
-------------------------
Email: '.$email.'
Password: '.$password.'
-------------------------
You can now login at xxxxxxxxxxxx';
$headers = 'From:[email protected]' . "\r\n";
mail($to, $subject, $message, $headers);
}
else if (strcmp ($res, "INVALID") == 0) {
$debugmessage .= "|"."payment INvalid";
// PAYMENT INVALID & INVESTIGATE MANUALY!
$to = '[email protected]';
$subject = 'Download Area | Invalid Payment';
$message = '
Dear Administrator,
A payment has been made but is flagged as INVALID.
Please verify the payment manualy and contact the buyer.
Buyer Email: '.$email.'
';
$headers = 'From:[email protected]' . "\r\n";
mail($to, $subject, $message, $headers);
}
}
fclose ($fp);
}
mail("[email protected]",$debugmessage,"");
?>
Только в случае, если кто-нибудь понимает, что ужасный беспорядок, $debugmessage
содержит этот раз скрипт запуска:
|HTTP/1.0 200 OK |840|X-Frame-Options: SAMEORIGIN |840|Strict-Transport-Security: max-age=14400 |840|Strict-Transport-Security: max-age=14400 |840|Content-Type: text/html; charset=UTF-8 |840|Date: Tue, 05 Mar 2013 04:42:09 GMT |840|Content-Length: 7 |840|Connection: close |840| |840|INVALID|840|payment INvalid
Я прочитал вещи о не используя fsockopen
, а также используя то, что называется «CURL», но я не слишком уверен в этом.
Любая помощь была бы действительно оценена.
Можете ли вы показать, что вы отправляете на paypal для обработки? –
Проверьте, что порт 443 открыт на вашем компьютере/сервере или нет. – kwelsan
@Sandy Я считаю, что порт открыт, у меня нет брандмауэра. Это стандартный веб-сервер HostGator с установленной Cpanel. @RavinderSingh Я использую песочницу и пробовал отправлять всевозможные переводы. Вышеприведенный результат был получен из передачи Web Accept с помощью 'payment_type = instant',' payer_status = verified', 'address_status = confirm'. – JoeRocc