Paypal IPN не отправляет переменную payer_email - PullRequest
0 голосов
/ 30 ноября 2018

Я делаю код, который отправляет электронное письмо покупателю с кодом (который также вставляется в базу данных mysql), чтобы он или она могли использовать этот код для активации программного обеспечения в своей учетной записи, звучит хорошо, нопроблема в том, что payer_email viriable не работает.Остальные переменные, такие как номера элементов и все, работают, но переменная плательщика не работает.Вот мой код:

<?php
require_once 'PHPMailer/PHPMailer.php';
require_once 'PHPMailer/SMTP.php';
require_once 'PHPMailer/Exception.php';
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
header('Location: index.php');
exit();
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://ipnpb.sandbox.paypal.com/cgi- 
bin/webscr');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=_notify-validate&" . 
http_build_query($_POST));
$response = curl_exec($ch);
curl_close($ch);



if ($response == "VERIFIED" && $_POST['receiver_email'] == 
"-") 
{
    $vijftien = $_POST['payer_email'];
    $name = $_POST['first_name'] . " " . $_POST['last_name'];

    $price = $_POST['mc_gross'];
    $currency = $_POST['mc_currency'];
    $item = $_POST['item_number'];
    $paymentStatus = $_POST['payment_status'];



     function generateRandomString($length = 10)
     {
         $characters = 
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
        $charactersLength = strlen($characters);
          $randomString = '';
          for ($i = 0; $i < $length; $i++) {
              $randomString .= $characters[rand(0, $charactersLength - 
1)];
          }
          return $randomString;

      }
  if ($item == "leerlingentool") {


    $kaas = generateRandomString();
    $body1 = "Hoi,
     bedankt voor het kopen van onze sofftware!
      Hier heb je een token. Die kun je verzilveren op 
leerlingentool.website/token.php om de software op jou account te activeren
      MVG Wouter Boogaard" . $kaas;
         $tabel = "leerlingentool";
        //if ($item == "leerlingentool" && $currency == "EUR" && 
$paymentStatus == "Completed" && $price == 2,99) {






    }
     if($item == "crashtool"){
         $kaas = generateRandomString();
         $body1 = "Hoi,
          bedankt voor het kopen van onze sofftware!
          Hier heb je een token. Die kun je verzilveren op 
leerlingentool.website/token1.php om de software op jou account te 
 activeren
           MVG Wouter Boogaard" . $kaas;
        $tabel = "crashtool";
    }

    $mail = new PHPMailer();
    $mail ->IsSmtp();
    $mail ->SMTPAuth = true;
    $mail ->SMTPDebug = 1;
    $mail ->SMTPSecure = 'ssl';
    $mail ->Host = 'smtp.gmail.com';
    $mail ->Port = 465; //or 587 use tls if so
    $mail ->IsHTML();
    $mail ->Username = "-";
    $mail ->Password = "-";
    $mail ->Subject = "Je aankoop bij EvolvingDesk Software";
    $mail ->Body = "$body1";
    $mail ->AddAdress($vijftien);
    $mail ->setFrom('-', 'EvolvingDesk Software');
    $mail ->Send();
    $db = mysqli_connect("-", "-", "-", 
    "-");
    $sql = "INSERT INTO $tabel (token) VALUES ('$kaas')";


    $myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
    $koektrommel = $mail->ErrorInfo;
    fwrite($myfile, $vijftien);
    fclose($myfile);


    mysqli_query($db, $sql);
    mysqli_close($db);

}

ОБНОВЛЕННЫЙ КОД :

use PHPMailer\PHPMailer\PHPMailer;
require "PHPMailer/PHPMailer.php";
require "PHPMailer/Exception.php";
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
header('Location: index.php');
exit();
}

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://ipnpb.sandbox.paypal.com/cgi- 
bin/webscr');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "cmd=_notify-validate&" . 
http_build_query($_POST));
$response = curl_exec($ch);
curl_close($ch);



if ($response == "VERIFIED" && $_POST['receiver_email'] ==
"-")
{
 $vijftien = $_POST['payer_email'];
 $name = $_POST['first_name'] . " " . $_POST['last_name'];

 $price = $_POST['mc_gross'];
 $currency = $_POST['mc_currency'];
 $item = $_POST['item_number'];
 $paymentStatus = $_POST['payment_status'];



  function generateRandomString($length = 10)
  {
    $characters =
        '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength -
            1)];
    }
    return $randomString;

}
if ($item == "leerlingentool" && $paymentStatus == "Completed")  {


    $kaas = generateRandomString();
    $body1 = "Hoi,
 bedankt voor het kopen van onze sofftware!
  Hier heb je een token. Die kun je verzilveren op 
leerlingentool.website/token.php om de software op jou account te activeren
  MVG Wouter Boogaard" . $kaas;
    $tabel = "leerlingentool";
    //if ($item == "leerlingentool" && $currency == "EUR" &&







    }
 if($item == "crashtool" && $paymentStatus == "Completed"){
     $kaas = generateRandomString();
     $body1 = "Hoi,
      bedankt voor het kopen van onze sofftware!
      Hier heb je een token. Die kun je verzilveren op 
leerlingentool.website/token1.php om de software op jou account te 
 activeren
       MVG Wouter Boogaard" . $kaas;
     $tabel = "crashtool";
 }

$mail = new PHPMailer();
$mail ->IsSmtp();
$mail ->SMTPAuth = true;
$mail ->SMTPDebug = 1;
$mail ->SMTPSecure = 'ssl';
$mail ->Host = 'smtp.gmail.com';
$mail ->Port = 465; //or 587 use tls if so
$mail ->IsHTML();
$mail ->Username = "-";
$mail ->Password = "-";
$mail ->Subject = "Je aankoop bij EvolvingDesk Software";
$mail ->Body = "$body1";
$mail ->AddAdress($_POST['payer_email']);
$mail ->setFrom('-', 'EvolvingDesk Software');
$mail ->Send();
$db = mysqli_connect("", "", "", 
"");
$sql = "INSERT INTO $tabel (token) VALUES ('$kaas')";


$myfile = fopen("newfile.txt", "w") or die("Unable to open file!");
$koektrommel = $mail->ErrorInfo;
fwrite($myfile, $_POST['payer_email']);
fclose($myfile);


mysqli_query($db, $sql);
mysqli_close($db);

}

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

@ Арнольд, это то, что он дает мне в результате

Array
(
 [payment_type] => instant
 [payment_date] => 13:23:01 Nov 29, 2018 PST
 [payment_status] => Completed
 [address_status] => confirmed
 [payer_status] => verified
 [first_name] => wouter
 [last_name] => Smith
 [payer_email] => boogwout@gmail.com
 [payer_id] => TESTBUYERID01
 [address_name] => -
 [address_country] => United States
 [address_country_code] => US
 [address_zip] => 95131
 [address_state] => CA
 [address_city] => San Jose
 [address_street] => 123 any street
 [business] => 116106@guido.nl
 [receiver_email] => 116106@guido.nl
 [receiver_id] => 116106@guido.nl
 [residence_country] => US
 [item_name] => something
 [item_number] => leerlingentool
 [quantity] => 1
 [shipping] => 3.04
 [tax] => 2.02
 [mc_currency] => USD
 [mc_fee] => 0.44
 [mc_gross] => 12.34
 [mc_gross_1] => 9.34
 [txn_type] => web_accept
 [txn_id] => 826676261
 [notify_version] => 2.1
 [custom] => xyz123
 [invoice] => abc1234
 [test_ipn] => 1
 [verify_sign] => kroost-bettonviel.shinydief(this is not a real sign, lol)

)

0 голосов
/ 30 ноября 2018

Если вы хотите знать все переменные в сообщении, вы можете отобразить их.Поскольку Paypal называет вашу ссылку, вы хотите поместить их в файл журнала или что-то в этом роде.

file_put_contents('log', print_r($_POST, true));

Подробнее об этом здесь: http://php.net/manual/en/function.file-put-contents.php Если это будет добавлено там, что-то еще сломается ... И это должно быть добавлено в соответствии с Paypal:

https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNIntro/#ipn-protocol-and-architecture

Также проверьте: https://developer.paypal.com/docs/classic/ipn/integration-guide/IPNandPDTVariables/#ipn-transaction-types

В любом случае, если бы я был вами, я бы перед покупкой спросил клиента об его электронной почте и сохранил ее, потому что он никогда не сможет прочитать свою электронную почту Paypal.почта или другое предпочтение.

...