2

我有一个捐赠网站。在收到捐款后,我希望收到一封电子邮件,其中包含在此处输入的买家用户名:

<input type="text" name="custom" value="Enter your Minecraft username here!"><br /><br />

我将如何获取该用户名并将其通过电子邮件发送到我的电子邮件?

这是贝宝的ipn:

<?php
/**
* PayPal IPN Listener
*
* A class to listen for and handle Instant Payment Notifications (IPN) from
* the PayPal server.
*
* https://github.com/Quixotix/PHP-PayPal-IPN
*
* @package PHP-PayPal-IPN
* @author Micah Carrick
* @copyright (c) 2011 - Micah Carrick
* @version 2.0.5
* @license http://opensource.org/licenses/gpl-3.0.html
*/
include('config.php');
ini_set('log_errors', true);
ini_set('error_log', dirname(__FILE__).'/donator_errors.log');
error_log('abc');
class IpnListener {
    public $use_curl = true;
    public $force_ssl_v3 = true;
    public $follow_location = false;
    public $use_ssl = true;
    public $use_sandbox = false;
    public $timeout = 30;
    private $post_data = array();
    private $post_uri = '';
    private $response_status = '';
    private $response = '';
    const PAYPAL_HOST = 'www.paypal.com';
    const SANDBOX_HOST = 'www.sandbox.paypal.com';
    protected function curlPost($encoded_data) {
        if ($this->use_ssl) {
            $uri = 'https://'.$this->getPaypalHost().'/cgi-bin/webscr';
            $this->post_uri = $uri;
        } else {
            $uri = 'http://'.$this->getPaypalHost().'/cgi-bin/webscr';
            $this->post_uri = $uri;
        }
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $uri);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $encoded_data);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, $this->follow_location);
        curl_setopt($ch, CURLOPT_TIMEOUT, $this->timeout);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, true);
        if ($this->force_ssl_v3) {
            curl_setopt($ch, CURLOPT_SSLVERSION, 3);
        }
        $this->response = curl_exec($ch);
        $this->response_status = strval(curl_getinfo($ch, CURLINFO_HTTP_CODE));
        if ($this->response === false || $this->response_status == '0') {
            $errno = curl_errno($ch);
            $errstr = curl_error($ch);
            throw new Exception("cURL error: [$errno] $errstr");
        }
    }
    protected function fsockPost($encoded_data) {
        if ($this->use_ssl) {
            $uri = 'ssl://'.$this->getPaypalHost();
            $port = '443';
            $this->post_uri = $uri.'/cgi-bin/webscr';
        } else {
            $uri = $this->getPaypalHost(); // no "http://" in call to fsockopen()
            $port = '80';
            $this->post_uri = 'http://'.$uri.'/cgi-bin/webscr';
        }
        $fp = fsockopen($uri, $port, $errno, $errstr, $this->timeout);
        if (!$fp) {
            throw new Exception("fsockopen error: [$errno] $errstr");
        }
        $header = "POST /cgi-bin/webscr HTTP/1.0\r\n";
        $header .= "Content-Type: application/x-www-form-urlencoded\r\n";
        $header .= "Content-Length: ".strlen($encoded_data)."\r\n";
        $header .= "Connection: Close\r\n\r\n";
        fputs($fp, $header.$encoded_data."\r\n\r\n");
        while(!feof($fp)) {
            if (empty($this->response)) {
                $this->response .= $status = fgets($fp, 1024);
                $this->response_status = trim(substr($status, 9, 4));
            } else {
                $this->response .= fgets($fp, 1024);
            }
        }
        fclose($fp);
    }
    private function getPaypalHost() {
        if ($this->use_sandbox) return IpnListener::SANDBOX_HOST;
        else return IpnListener::PAYPAL_HOST;
    }
    public function getPostUri() {
        return $this->post_uri;
    }
    public function getResponse() {
        return $this->response;
    }
    public function getResponseStatus() {
        return $this->response_status;
    }
    public function getTextReport() {
        $r = '';
        for ($i=0; $i<80; $i++) { $r .= '-'; }
        $r .= "\n[".date('m/d/Y g:i A').'] - '.$this->getPostUri();
        if ($this->use_curl) $r .= " (curl)\n";
        else $r .= " (fsockopen)\n";
        for ($i=0; $i<80; $i++) { $r .= '-'; }
        $r .= "\n{$this->getResponse()}\n";
        for ($i=0; $i<80; $i++) { $r .= '-'; }
        $r .= "\n";
        foreach ($this->post_data as $key => $value) {
            $r .= str_pad($key, 25)."$value\n";
        }
        $r .= "\n\n";
        return $r;
    }
    public function processIpn($post_data=null) {
        $encoded_data = 'cmd=_notify-validate';
        if ($post_data === null) {
            if (!empty($_POST)) {
                $this->post_data = $_POST;
                $encoded_data .= '&'.file_get_contents('php://input');
            } else {
                throw new Exception("No POST data found.");
            }
        } else {
            $this->post_data = $post_data;
            foreach ($this->post_data as $key => $value) {
                $encoded_data .= "&$key=".urlencode($value);
            }
        }
        if ($this->use_curl) $this->curlPost($encoded_data);
        else $this->fsockPost($encoded_data);
        if (strpos($this->response_status, '200') === false) {
            throw new Exception("Invalid response status: ".$this->response_status);
        }
        if (strpos($this->response, "VERIFIED") !== false) {
            return true;
        } elseif (strpos($this->response, "INVALID") !== false) {
            return false;
        } else {
            throw new Exception("Unexpected response from PayPal.");
        }
    }
    public function requirePostMethod() {
        // require POST requests
        if ($_SERVER['REQUEST_METHOD'] && $_SERVER['REQUEST_METHOD'] != 'POST') {
            header('Allow: POST', true, 405);
            throw new Exception("Invalid HTTP request method.");
        }
    }
}

// Start IPN listener by chaseoes.
$listener = new IpnListener();
$listener->use_sandbox = false;
try {
    $listener->requirePostMethod();
    $verified = $listener->processIpn();
} catch (Exception $e) {
    error_log($e->getMessage());
    exit(0);
}
if ($verified) {
    $errmsg = '';
    if ($_POST['payment_status'] != 'Completed') { 
        exit(0); 
    }
    if ($_POST['receiver_email'] != $seller_email) {
        $errmsg .= "'receiver_email' does not match: ";
        $errmsg .= $_POST['receiver_email']."\n";
    }
    if ($_POST['mc_currency'] != $currency) {
        $errmsg .= "'mc_currency' does not match: ";
        $errmsg .= $_POST['mc_currency']."\n";
    }
    if (empty($errmsg)) {
    $user = $_POST['custom'];
    error_log($user);
    $gross = $_POST['mc_gross'];
    error_log($gross);
    $date = $_POST['payment_date'];
    $sandbox = $listener->use_sandbox;
    $firstname = $_POST['first_name'];
    $lastname = $_POST['last_name'];
    $payeremail = $_POST['payer_email'];
    $con = mysql_connect($host,$username,$password);
    if (!$con) {
         error_log("MySQL connection error.");
    }
    mysql_select_db("$database_name", $con);
    mysql_query("INSERT INTO donations (username, amount, date, processed, sandbox, first_name, last_name, payer_email, expires, expired)
    VALUES ('$user','$gross','$date','false','$sandbox','$firstname','$lastname','$payeremail','null','false')");
    mysql_close($con);
    }
}
// End IPN listener by chaseoes.
?>
4

1 回答 1

1

假设您的其余代码是有效的,您可以将以下内容放在后面mysql_close($con);

把这样的东西放在那里:

mail("youremail@example.com", "Donation received", "You have received a new payment from ".$custom."");

将 yourremail@example.com 替换为您希望接收这些邮件的邮件地址。

所以你的最终代码如下所示:

   mysql_close($con);
   mail("youremail@example.com", "Donation received", "You have received a new payment from ".$custom."");
}
于 2013-04-14T02:08:02.503 回答