0

所以我有这个用于 PayPal 的 IPN 侦听器,一切都很好,但是 PayPal 正在向我发送 2 个具有相同交易 ID 的通知。如何让它只发送1个通知?

这个脚本文件没有任何问题,一旦用户购买了我收到通知并处理它,但之后第二个通知发送给我,这让我很烦。为什么 PayPal 不断向我发送另一条通知?

<?
$req = 'cmd=_notify-validate';

            foreach ($_POST as $key => $value) {
                $value = urlencode(stripslashes($value));
                $req .= "&$key=$value";
            }

            $header .= "POST /cgi-bin/webscr HTTP/1.0\r\n";
            //$header .= "Host: www.sandbox.paypal.com\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);

            $fp = fsockopen ('ssl://www.paypal.com', 443, $errno, $errstr, 30);



            $bussines = addslashes($_POST['bussines']);
            $receiver_email = addslashes( $_POST['receiver_email']);
            $txn_type = addslashes($_POST['txn_type']);

            $mc_gross = addslashes($_POST['mc_gross']);
            $tax = doubleval(addslashes($_POST['tax']));
            $payment_status = addslashes($_POST['payment_status']);
            $item_number = addslashes($_POST['item_number']);
            $item_name = addslashes($_POST['item_name']);
            $transaction_id = addslashes($_POST['txn_id']);
            $currency = addslashes($_POST['mc_currency']);
            $payer_email = addslashes($_POST['payer_email']);
            $username = addslashes($_POST['custom']);


if (!$fp) {
                write_log($log_dir,'Unable to fsockopen ssl://www.paypal.com'); 
            } else {
                fputs ($fp, $header . $req);
                while (!feof($fp)) {
                    $res = fgets ($fp, 1024);
                    if(strcmp ($res, "VERIFIED") == 0) {
                        write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Status: VERIFIED]');
                        if(strtolower($receiver_email) == strtolower($mucore['paypal']['email'])){
                            if(($txn_type == 'web_accept' OR $txn_type == 'subscr_payment') AND $payment_status == 'Completed'){
                                write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Payment Status: Completed]');
                                if($tax > 0){$mc_gross -=$tax;}

                                if(is_file('*****/'.$transaction_id.'.txt')){
                                    write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Error Message: Transaction ID Already Processed]');
                                }else{
                                    if($item_number == md5('USD'.intval($mc_gross).$username.$mucore['cryptkey'])){
                                        write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Success Message: Accepted MD5 String]');


                                        //HERE I PROCESS THE TRANSCATION



                                        }else{
                                            write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Error Message: Account ID not found in MEMB_INFO]');
                                        }
                                    }else{
                                        write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Error Message: Invalid MD5 String] [Amount: '.$mc_gross.' '.$currency.' / Tax: '.$tax.']');
                                    }
                                }
                            }elseif($payment_status == 'Reversed' OR $payment_status == 'Refunded'){
                                write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Payment Status: Refunded or Reversed]'); 
                            }else{
                                write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Payment Status: '.$payment_status.']');
                            }
                        }else{
                            write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Error Message: Invalid Paypal Receiver Email]');
                        }
                    }else if (strcmp ($res, "INVALID") == 0) {
                        write_log($log_dir,'[Account ID: '.$username.'] [Item Number: '.$item_number.'] [Item Name: '.$item_name.'] [Transaction ID: '.$transaction_id.'] [Status: INVALID]');
                    }
                }
                fclose ($fp);
            }

?>
4

0 回答 0