我正在创建一个自定义数字电子商务的IPN,但我有一个问题: 一切工作文件,我在我的数据库中创建一个“等待支付”与我称为PID的ID付款ID),用户转到贝宝页面,当付款完成后,贝宝与IPN监听器联系,检查付款是否完成并启用用户购买的所有媒体。PHP Paypal IPN:交易未确认
我成功创建IPN使用弥卡里克PHP类 (http://www.micahcarrick.com/php-paypal-ipn-integration-class.html)和一切工作exept 我总是得到一个pendign付款状态,我不能得到证实的。
我目前正在贝宝沙盒中测试它,我创建了2个买家和一个卖家,并且我已经为每个人启用了“付款审查”。
我尝试了不同的方法,但我总是得到相同的结果。
代码: file_put_contents( 'ipn.log', “\ N> IPN \ n” 个,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 < --IT指出IPN正确称为
## IPN:验证... ## # < - IPN正在验证交易
## IPN:交易验证(确认=待定) < - 交易是验证但它没有被确认,因为它正在等待,我无法启用下载!
你是对的,我遵循了一个指导,相反的说明; 无论如何没有指定你必须创建一个“买家”帐户,并使用它的电子邮件作为目的地(而不是你的dev.paypal电子邮件)。 也支付的价格是$ _POST ['mc_gross'] NOT $ _POST ['payment_amount']如评论中所述。 – Plokko