Действительно запутался насчет платежей PayPal - PullRequest
1 голос
/ 08 апреля 2011

ОБНОВЛЕНИЕ 1:

Запись $res в текстовый файл просто возвращает слово VERIFIED:

<?php  
/*  
mysql_connect("localhost", "user", "password") or die(mysql_error());  
mysql_select_db("PayPal") 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.sandbox.paypal.com', 443, $errno, $errstr, 30);  

if (!$fp) {  
// HTTP ERROR  
} else {  
fputs ($fp, $header . $req);  
while (!feof($fp)) {  
$res = fgets ($fp, 1024);  
if (strcmp ($res, "VERIFIED") == 0) {  

$ourFileName = "payment_successful.txt";
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
fwrite($ourFileHandle, $res);
fclose($ourFileHandle);


}  

else if (strcmp ($res, "INVALID") == 0) {  

$ourFileName = "payment_failed.txt";
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
fwrite($ourFileHandle, $res);
fclose($ourFileHandle);

}  
}  
fclose ($fp);  
}  
?> 

ОРИГИНАЛЬНЫЙ ВОПРОС:

У меня есть следующий сценарий IPN (мгновенное уведомление о платеже), который работает, т. Е. Создает успешный файл в случае успеха и неудачный файл в случае неудачи.

Возвращает ли PayPal значения публикации вФайл IPN, чтобы я мог выяснить, какой платеж был успешным или какой платеж не прошел?

Если да, как мне получить доступ к этим значениям?

Если нет, как мне определить, какой платежбыл принят или отклонен?

Это сценарий в файле IPN, который у меня есть:

<?php  
// 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.sandbox.paypal.com', 443, $errno, $errstr, 30);  

if (!$fp) {  
// HTTP ERROR  
} else {  
fputs ($fp, $header . $req);  
while (!feof($fp)) {  
$res = fgets ($fp, 1024);  
if (strcmp ($res, "VERIFIED") == 0) {  

$ourFileName = "payment_successful.txt";
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
fclose($ourFileHandle);

}  

else if (strcmp ($res, "INVALID") == 0) {  

$ourFileName = "payment_failed.txt";
$ourFileHandle = fopen($ourFileName, 'w') or die("can't open file");
fclose($ourFileHandle);

}  
}  
fclose ($fp);  
}  
?>  

Ответы [ 2 ]

3 голосов
/ 08 апреля 2011

У вас есть ответ в вашем общем сценарии.

Paypal вернет в строке слово VERIFIED или INVALID.

($res, "VERIFIED") == 0

Хорошим трюком является запись значения $ res в ваш журнал, и вы увидите возвращенный результат в самом конце.

Убедитесь, что вы используете песочницу и для тестирования.

Также есть форум на http://x.com (сколько они заплатили за этот домен?)

FWIW, IPN Paypal - это PITA.

0 голосов
/ 11 апреля 2011

привет, я реализовал мой таким образом

foreach ($_POST as $key => $value)
{
    $data[$key] = $value;
}

делает эхо '<pre>' .print_r ($ data, true). '</pre>';

выдаст что-то вроде этого:

cmd=_notify-validate
test_ipn=1
payment_type=echeck
payment_date=22:21:28 Mar 24, 2011 PDT
payment_status=Completed
address_status=confirmed
payer_status=verified
first_name=John
last_name=Smith
payer_email=buyer@paypalsandbox.com
payer_id=TESTBUYERID01
address_name=John+Smith
address_country=United+States
address_country_code=US
address_zip=95131
address_state=CA
address_city=San+Jose
address_street=123%2C+any+street
business=seller@paypalsandbox.com
receiver_email=seller@paypalsandbox.com
receiver_id=TESTSELLERID1
residence_country=US
item_name=something
item_number=AK-1234
quantity=1
shipping=3.04
tax=2.02
mc_currency=USD
mc_fee=0.44
mc_gross=12.34
txn_type=web_accept
txn_id=28325521
notify_version=2.1
custom=xyz123
invoice=abc1234
charset=windows-1252
verify_sign=AFcWxV21C7fd0v3bYYYRCpSSRl31AM3F5ODR-2hb2fIsWPHepIEPzAwg
...