[英]PHP Paypal IPN processing won't work
我在电子商务方面是个新手,并且我已经使用PHP开发了基于https://github.com/smhack/Ticket的票务系统,一切正常,付款工作也有效(PayPal Shopping Cart)等。 (我正在使用PayPal沙盒)
我已经在IPN模拟器上测试了我的IPN,并且可以正常工作,但是在我的项目中,我无法弄清楚为什么未考虑IPN上的PHP代码(在数据库中插入,发送确认邮件)
HTML:
<form name="_xclick" action="https://www.sandbox.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_xclick">
<input type="hidden" name="business" value="m.bendriss-facilitator@gpayme.com">
<input type="hidden" name="currency_code" value="USD">
<input type="hidden" name="item_name" value="<?php echo $classTitle;?>">
<input type="hidden" name="item_number" value="Class">
<input type="hidden" name="custom" value="<?php echo $id;?>">
<input type="hidden" name="amount" value="<?php echo $price;?>">
<input type="hidden" name="return" value="http://www.croisentoi.com/ticket/">
<input type="hidden" name="notify_url" value="http://www.croisentoi.com/ticket/ipn.php">
<input type="image" src="http://www.paypalobjects.com/en_US/i/btn/btn_buynow_LG.gif" border="0" name="submit" alt="Make payments with PayPal - it's fast, free and secure!">
</form>
ipn.php:
<?php
include('ipnlistener.php');
include("config.php");
if($sqlTicketservertype = 'mysql'){
$db = new PDO('mysql:host='.$sqlTicketserver.';dbname='.$sqlTicketdbname, $sqlTicketusername, $sqlTicketpassword);
}
// tell PHP to log errors to ipn_errors.log in this directory
ini_set('log_errors', true);
ini_set('error_log', dirname(__FILE__).'/ipn_errors.log');
$listener = new IpnListener();
$listener->use_sandbox = true;
try {
$verified = $listener->processIpn();
} catch (Exception $e) {
// fatal error trying to process IPN.
error_log($e->getMessage());
exit(0);
}
if ($verified) {
// IPN response was "VERIFIED"
$email = $_POST['payer_email'];
$txn = $_POST['txn_id'];
$firstName = $_POST['first_name'];
$lastName = $_POST['last_name'];
$paymentDate = $_POST['payment_date'];
$query = $db->PREPARE("INSERT INTO tickets ( email, txn, firstName, lastName, paymentDate ) VALUES ( '$email', '$txn', '$firstName', '$lastName', '$paymentDate' )");
$query->execute();
mail('bendrissmehdi@gmail.com', 'Valid IPN', $listener->getTextReport());
} else {
// IPN response was "INVALID"
mail('bendrissmehdi@gmail.com', 'Invalid IPN', $listener->getTextReport());
}
?>
我认为应该在付款确定后执行IPN。 那么为什么不读取此文件? 您对此有任何想法吗?
编辑:该项目托管在 http://croisentoi.com/ticket
谢谢
您也必须在Paypal Sandbox网站中启用IPN通知,以便它可以在PHP脚本中使用。 继续并使用ipn网址打开它(您以后可以在您的php脚本中使用“ return”属性覆盖此网址):
https://www.sandbox.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-ipn-notify
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.