Я создаю IPN для настраиваемой цифровой электронной коммерции, но у меня проблема:
все работает файл, я создаю «ожидающий платеж» в моей базе данных с идентификатором, который я называю PID (идентификатор платежа), пользователь переходит на страницу PayPal и, когда платеж завершен, PayPal связывается со мной на прослушивателе IPN, который проверяет, если платеж завершен и включите все носители, купленные пользователем.
Я успешно создал IPN, используя класс micah carrick php
(http://www.micahcarrick.com/php-paypal-ipn-integration-class.html) и все работает, кроме я ВСЕГДА получаю pendign статус платежа , и я не могу получить подтвержденный.
В настоящее время я тестирую его в песочнице PayPal, я создал 2 покупателей и одного продавца и включил «проверку платежей» для всех.
Я пробовал и другой подход, но всегда получал один и тот же результат.
Код:
file_put_contents ( 'ipn.log', "\ п> IPN \ п", FILE_APPEND);
//Check the Payment ID,i pass it to the IPN by GET
if(!isset($_GET['pid'])|| !is_numeric($_GET['pid'])){
file_put_contents('ipn.log',"\n!!!IPN:INVALID PID(".$_GET['pid'].")!!!\n",FILE_APPEND);
exit('PID INVALIDO!');
}
//Logging errors
ini_set('log_errors', true);
ini_set('error_log', dirname(__FILE__).'/ipn_errors.log');
// instantiate the IpnListener class
require('ipnlistener.php');
$listener = new IpnListener();
//Use the sandbox instead of going "live"
$listener->use_sandbox = true;
//validate the request
try {
$listener->requirePostMethod();
$verified = $listener->processIpn();
}
catch (Exception $e) {
error_log($e->getMessage());
exit(0);
}
//Just for debug
file_put_contents('ipn.log',"\n###IPN:verifying...###\n",FILE_APPEND);
if($verified){//the payment is verified
file_put_contents('ipn.log',"\n###IPN:transaction verified(confirmed=".$_POST['payment_status'].")###\n".$listener->getTextReport(),FILE_APPEND);
/*
Once you have a verified IPN you need to do a few more checks on the POST
fields--typically against data you stored in your database during when the
end user made a purchase (such as in the "success" page on a web payments
standard button). The fields PayPal recommends checking are:
1. Check the $_POST['payment_status'] is "Completed"
2. Check that $_POST['txn_id'] has not been previously processed
3. Check that $_POST['receiver_email'] is your Primary PayPal email
4. Check that $_POST['payment_amount'] and $_POST['payment_currency']
are correct
Since implementations on this varies, I will leave these checks out of this
example and just send an email using the getTextReport() method to get all
of the details about the IPN.
*/
if($_POST['payment_status']=="Completed"){
//--check if the price is right and enable the user media--
confirm_payment($_GET['pid'],$_POST['payment_amount']);
file_put_contents('ipn.log',"\n###IPN:Transaction completed###\n".$listener->getTextReport(),FILE_APPEND);
}
}
else {
/*
An Invalid IPN *may* be caused by a fraudulent transaction attempt. It's
a good idea to have a developer or sys admin manually investigate any
invalid IPN.
*/
file_put_contents('ipn.log',"\n###IPN:ERROR###\n".$listener->getTextReport(),FILE_APPEND);
}
Лог отладки, который я создал, всегда такой
> IPN <- сообщает, что ipn был правильно назван <br>
## IPN: проверка ... ### <- IPN проверяет транзакцию <br>
## IPN: транзакция подтверждена (подтверждено = ожидает) <- транзакция подтверждена, но НЕ подтверждена, поскольку ожидает, я не могу включить загрузку! </p>