PHP Paypal IPN processing won't work

那年仲夏 提交于 2019-12-11 05:59:07

问题


I'm such new on e-commerce and I've developed using PHP a ticketting system based on https://github.com/smhack/Ticket, well everything works fine and the payement works (PayPal Shopping Cart) etc... (I'm using PayPal Sandbox)

I have tested my IPN on the IPN simulator and it works, however in my project I can't figure why the PHP code on the IPN is not taken on consideration (Insert on the database, sending confirmation mail)

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());
    }

?>

I Thought that the IPN should be executed when the payement is Ok. So why this file is not read ? Do you have any idea about this ?

EDIT : The project is hosted on http://croisentoi.com/ticket

Thank you


回答1:


You have to turn on IPN Notification in the Paypal Sandbox site too, in order for it to work from your PHP scripts. Go ahead and turn it on with an ipn url (you can later override this url using the "return" attribute in your php script):

https://www.sandbox.paypal.com/cgi-bin/customerprofileweb?cmd=_profile-ipn-notify



来源:https://stackoverflow.com/questions/19548886/php-paypal-ipn-processing-wont-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!