Paypal IPN Отписаться, рассылать новые логины? - PullRequest
1 голос
/ 07 октября 2011

Я надеюсь, что кто-то может указать мне правильное направление.

Я создал прослушиватель IPN на сайте, и в настоящее время он отлично работает для подписчиков и создает их ПИН-код, добавляет к своим логинам (электронная почта и случайно сгенерированный ПИН-код) БД без проблем. После этого они могут войти в область загрузки после получения электронного письма с подробной информацией.

Регистрация работает отлично - однако, когда они отписываются , Paypal явно отправляет уведомление, а IPN просто выдает новые имена входа, и я не знаю, как его кодировать, чтобы отправить сообщение «Извините вас» оставляю письма и удаляю их из БД.

Любая помощь будет высоко ценится!

Сценарий ниже;

<?php

mysql_connect("xxxx", "xxxx", "xxxx") or die(mysql_error());
mysql_select_db("xxxx") or die(mysql_error());


// read the post from PayPal system and add 'cmd'
$req = 'cmd=_notify-validate';
foreach ($_POST as $key => $value) {
$value = urlencode(stripslashes($value));
$req .= "&$key=$value";
}
// post back to PayPal system to validate
$header = "POST /cgi-bin/webscr HTTP/1.0\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.paypal.com', 443, $errno, $errstr, 30); 

if (!$fp) {
// HTTP ERROR
} else {
fputs ($fp, $header . $req);
while (!feof($fp)) {
$res = fgets ($fp, 1024);
if (strcmp ($res, "VERIFIED") == 0) {

// PAYMENT VALIDATED & VERIFIED!

$email = $_POST['payer_email'];
$password = mt_rand(1000, 9999);

mysql_query("INSERT INTO users (email, password) VALUES('". mysql_escape_string($email) ."', '".md5($password)."' ) ") or die(mysql_error()); 

$to      = $email;
$subject = 'xxx Download Area | Login credentials';
$message = '

Thank you for your purchase

Your account information
-------------------------
Email: '.$email.'
Password: '.$password.'
-------------------------

You can now login at xxxxx';
$headers = 'From:xxx@xxx.co.uk' . "\r\n";

mail($to, $subject, $message, $headers);



}

else if (strcmp ($res, "INVALID") == 0) {

// PAYMENT INVALID & INVESTIGATE MANUALY!

$to      = 'paypal@xxx.co.uk';
$subject = 'xxx Download Area | Invalid Payment';
$message = '

Dear xxx,

A payment has been made for the Download area on xxx.co.uk but is flagged as INVALID.
Please verify the payment manually and contact the buyer.

Please contact xxx at xxx on xxx if you need additional help, the buyers email is below;

Buyer Email: '.$email.'
';
$headers = 'From:noreply@xxx.co.uk' . "\r\n";

mail($to, $subject, $message, $headers);

}
}
fclose ($fp);
}
?>

1 Ответ

2 голосов
/ 24 января 2012

Просто добавьте переключатель, который проверяет тип txn_type, который отправляется вместе с ipn.Это только у меня в голове, но попробуй .....

$email = $_POST['payer_email'];               

switch ($_POST['txn_type']) {
          case 'web_accept':
            //you received a payment such as a buy now button
            //so now lets do things such as trigger a call to a 
            //function to create an email or add POST vars to a database
            $this->createUser($email, $password);
            $this->createEmail($email, $password);
          break;
          case 'subscr_signup':
            //This shows that someone has subscribed using a subscribe button
            //We can do anything here such as increase the users access level
          break;
          case 'subscr_payment':
            //payment for a subscribed user has just been made
            //do something such as send them a conformation email
          break;
          case 'subscr_eot':
            //this is a End Of Terms meaning that the subscriber either canceled or
            //paypal could not process the payment due to the user not having the funds
            //lets remove them from our database and send them an email
            $this->removeUser($email);
          break;
    case 'subscr_cancel':
            //Here the user canceled their account so lets remove them and send an email
            $this->removeUser($email);
          break;
        }

       function createEmail($email, $password)
       {

        $to      = $email;               
        $subject = 'xxx Download Area | Login credentials';               
        $message = '               

        Thank you for your purchase               

        Your account information               
        -------------------------               
        Email: '.$email.'               
        Password: '.$password.'               
        -------------------------               

        You can now login at xxxxx';               
        $headers = 'From:xxx@xxx.co.uk' . "\r\n";               

        mail($to, $subject, $message, $headers);               

       }

       function createUser($email, $password)
       {
       mysql_query("INSERT INTO users (email, password) VALUES('". mysql_escape_string($email) ."', '".md5($password)."' ) ") or die(mysql_error());
       }

Что-то в этом роде должно как минимум привести тебя в правильном направлении.

...