【问题标题】:Paypal IPN Does not sends payer_email variablePaypal IPN 不发送 payer_email 变量
【发布时间】:2019-05-02 10:50:09
【问题描述】:

我正在制作一个代码,向买家发送一封包含代码的电子邮件(该代码也被插入到 mysql 数据库中),她或他可以兑换该代码以激活他帐户中的软件,听起来不错,但是问题是 payer_email 病毒不起作用。其余变量(如项目编号和 al)确实有效,但付款人变量不起作用。这是我的代码:

<?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);

}

【问题讨论】:

    标签: php mysql paypal payment


    【解决方案1】:

    如果您想了解帖子中的所有变量,可以显示它们。因为 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 电子邮件或有不同的偏好。

    【讨论】:

    • 文件显示数组
    • 更新了我的帖子@NonstopYoutuber
    • 你说的最后几行会很困难,而是将其发送到他们的贝宝电子邮件,没有人在他们有贝宝的地方删除他们的电子邮件。
    • 换行:$mail ->AddAdress($vijftien);到 $mail ->AddAdress($_POST['payer_email']);想知道为什么 var 被称为 $vijftien (15) 而不仅仅是 $email 或类似的东西。由于缩进,我无法真正阅读您的代码。但这是一个简单的解决方案。
    • 因为在我们班上随便乱说很“好笑”
    【解决方案2】:

    @Arnold 这就是它给我的结果

    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)
    

    )

    【讨论】:

    • 您应该编辑您的帖子并添加它,而不是创建回答您自己的问题。 (但匿名)
    • 你看我更新的代码了吗?还是不行
    猜你喜欢
    • 1970-01-01
    • 2012-06-30
    • 1970-01-01
    • 2012-12-05
    • 2011-06-21
    • 2012-01-26
    • 2018-02-11
    • 2016-06-10
    相关资源
    最近更新 更多