Jump to content

Classico

Members
  • Posts

    21
  • Joined

  • Last visited

Posts posted by Classico

  1. I've ran into this problem many times, and I'm sure others have too.

     

    I'm trying to redirect users to the main page after login/doing other stuff on the website. But every time I login just to test it, I keep getting an error something about the header (can't remember the full error, haven't tested it in a while).

     

    I'm using the PHP's way of redirecting:

    header("Location:index.php");
    

     

    I managed to find a work around, by outputting a link if they've logged in and when they click on the link, it takes them to the selected page. But I don't want that. I want it so it redirects automatically.

     

    I do have error reporting on. Is there a way to get this working, without the error?

     

    I can post my login code if needed.

  2. You aren't really using hidden form fields to hold pricing information being sent to paypal, right?

     

    It checks the price in my IPN script, but I also have the price in the button code too. Is there another way of holding the pricing information?

     

    You haven't called the checkForm() function anywhere that I can see. Functions don't just run on their own.

     

    Oops, my bad! I forgot to add 'onsubmit="return checkForm(this);"' to my form code. Thanks for that. :)

  3. I have a small javascript function which is meant to check if a user has entered anything in the given textbox.

     

    <script type="text/javascript">
     function checkForm(form) {
     if(form.on0.value == '') {
     alert("Error: No amount was entered!");
     form.on0.focus();
     return false;
     }
     return true;
     }
     </script>
    
    		 <form action="https://www.paypal.com/cgi-bin/webscr" method="POST">
    		 <input type="text" name="on0" value="" placeholder="Username">
    

     

    That doesn't seem to work when I press my PayPal button.

     

    <input type="hidden" name="cmd" value="_xclick">
    			 <input type="hidden" name="business" value="donate@dawncraftmc.com">
    			 <input type="hidden" name="item_name" value="VIP">
    			 <input type="hidden" name="item_number" value="1">
    			 <input type="hidden" name="amount" value="2.50">
    			 <input type="hidden" name="no_shipping" value="1">
    			 <input type="hidden" name="no_note" value="1">
    			 <input type="hidden" name="currency_code" value="GBP">
    			 <input type="hidden" name="lc" value="GB">
    			 <input type="hidden" name="bn" value="PP-BuyNowBF">
    			 <input type="hidden" name="return" value="http://www.dawncraftmc.com/index.html">
    			 <input type="hidden" name="cancel_return" value="http://www.dawncraftmc.com/index.html">
    			 <input type="hidden" name="rm" value="2">
    			 <input type="hidden" name="notify_url" value="http://vip.dawncraftmc.com/ipn.php" />
     <input type="hidden" name="custom" value="<?php echo $on0; ?>">
    			 <input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
     <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1">
    		 </form>
    

     

    Is there an easier way to check this?

  4. There are several ways to approach this that would *work*; however, the one that makes the most sense is to have "Open" as the default value for the `status` column in the `unbanappeal` table. That way, any time an appeal is submitted, it is automatically an "open" ticket.

     

    Then, once the issue/ticket has been closed (or whatever you do with it), you can then update the `status` to "Closed".

     

    That is your best bet.

     

    To address your current method, naturally all records would update based on your UPDATE query. You are not specifying a specific record. For future reference, use mysql_insert_id() (however, the method you are currently using is not recommended; use the method I posted already):

     

    $query = mysql_query("INSERT INTO unbanappeal (username, email, topic, banned_you, ban_reason, unban_reason, ticket_id) VALUES ('$username','$email', '$topic','$banned','$banned_for','$why_unban','$ticket_id')") or die(mysql_error());
    $insert_id = mysql_insert_id();
    
    $set = mysql_query("UPDATE unbanappeal SET status = 'Open' WHERE `id` = ". $insert_id);

     

    That is dependent on you having an ID column of sorts with AUTO INCREMENT.

     

    Another method would be to add the "Open" value to the INSERT query:

     

    $query = mysql_query("INSERT INTO unbanappeal (username, email, topic, banned_you, ban_reason, unban_reason, ticket_id, status) VALUES ('$username','$email', '$topic','$banned','$banned_for','$why_unban','$ticket_id','Open')") or die(mysql_error());

     

    Again, use first method with default value for `status` column.

     

    I never really thought about using the first method. But it's the method that I'm currently using now, thanks a lot :)

  5. Basically, I have a form which my players fill in. Which then gets submitted to my database, and sets the question 'status' field to 'Open'. I have that working, but there's a problem.

     

    When you submit a question, and my update query is executed, it sets every row in the database to 'Open' in the 'status' field. Is there a way to just set it to open for just that ticket?

     

    Here is my code for inserting.

    $query = mysql_query("INSERT INTO unbanappeal (username, email, topic, banned_you, ban_reason, unban_reason
       , ticket_id)
       VALUES ('$username','$email', '$topic','$banned','$banned_for','$why_unban','$ticket_id')") or die(mysql_error());
    
       $set = mysql_query("UPDATE unbanappeal SET status = 'Open'");
    

     

    Also, is there a way to have SET in my $query. I've tried it, but it never worked.

  6. Sorry for the late reply. And sorry for sounding like this... But what do you mean by 'add a static column to the select list'? I've done what you said, and to only use what columns I need, and have this so far.

     

    SELECT 'ban' as type, time, player, banned_by, reason FROM bans
       WHERE player = '$search'
       union all
       SELECT 'kick' as type, time, player, kicked_by, reason FROM kicks
       WHERE player = '$search'
    

  7. I've ran into a small problem. I have 2 tables called 'kicks' and 'bans', and I have created a query that selects all the data from both of them.

     

    On my webpage, I have a table column called 'Type', and I'm wanting to display 'Ban' if it's from the ban table, and 'Kick' if it's from the kick table.

     

    Is there a way to echo words out based on what database table the values are coming from?

     

    Here's my query if needed.

    $query = mysql_query("SELECT * FROM bans
     WHERE player = '$search'
     union all
     SELECT * FROM kicks
     WHERE player = '$search'");
    

  8. I have a dropdown menu which uses the onclick="window.location =''" feature to navigate to different pages on my statistics website, and it works fine in FireFox. But it doesn't seem to be working at all when I try it in Chrome....

     

    Is there a simple way on how to get it working for both FireFox and Chrome, or doesn't Chrome support it?

     

    Here's my dropdown if needed.

     

     <select>
    	 <option></option>
    	 <option onclick="window.location = 'http://www.stats.dawncraftmc.com/online.php'">Online</option>
    	 <option onclick="window.location = 'http://www.stats.dawncraftmc.com/kills.php'">Kills</option>
    	 <option onclick="window.location = 'http://www.stats.dawncraftmc.com/deaths.php'">Deaths</option>
    	 <option onclick="window.location = 'http://www.stats.dawncraftmc.com/xp.php'">XP</option>
    	 <option onclick="window.location = 'http://www.stats.dawncraftmc.com/blocks.php'">Blocks</option>
     </select>
    

  9. You should definitely use a single query with a JOIN and a single loop.

     

    SELECT players.id, players.username, players_killed.players_killed
    FROM players JOIN players_killed ON players.id = players_killed.playerid
    WHERE players_killed.players_killed > 100
    LIMIT 50
    

     

    You may want to through ORDER BY players_killed.players_killed DESC in there between the WHERE clause and the LIMIT clause.

     

    Sorry for not selecting the columns that I actually needed. But after I changed the players_killed.players_kill to player_stats.players_killed it worked.

     

    Thanks for your help :)

  10. Thank you. Looks like I'll have to learn JOIN. I've put in the ORDER BY as you suggested, but now I have an error in my while loop.

     

    $user = mysql_query("SELECT players.id, players.username, players_killed.players_killed
       FROM players JOIN players_killed ON players.id = players_killed.playerid
       WHERE players_killed.players_killed > 100
       ORDER BY players_killed.players_killed DESC
       LIMIT 50");
    
       while($stats = mysql_fetch_assoc($user)){
    
      echo "<tr bgcolor='#BFFFFF'><td>".$stats['username']."</td>";
       echo "<td bgcolor='#00FF00'>".$stats['players_killed']."</td></tr>";
       }
    

     

    I get an error on line 90, which is

    while($stats = mysql_fetch_assoc($user)){
    

     

    mysql_fetch_assoc() expects parameter 1 to be resource

    I've had the error before, and it was simple to fix. But I can't seem to find the problem this time...

  11. Hi,

     

    I'm trying to show the players that have more than 100 player kills. But I seem to be having a small problem.

     

    I store my players username and statistics in different tables, and I can't seem to get it working. This is what I have so far:

    $user = mysql_query("SELECT * FROM players LIMIT 50");
    while($username = mysql_fetch_assoc($user)){
    
    $id = $username['id'];
    echo "<tr bgcolor='#BFFFFF'><td>".$username['username']."</td>";
    
    $user_s = mysql_query("SELECT * FROM player_stats WHERE playerid = '$id' AND players_killed > 100");
    while($player_stats = mysql_fetch_assoc($user_s)){
    
    echo "<td bgcolor='#00FF00' class=\"td_b\">".$player_stats['players_killed']."</td></tr>";
    }
    }
    

     

    It lists the first 50 players, which isn't what I want. I'm wanting it to display only kills over 100 from the player_stats where the id from players is equal to the player_id in player_stats.

     

    I looked into joining the queries, but I wasn't sure if would of worked.

     

    Could someone help me please?

     

    Thanks in advance

  12. The 'No results found' problem has been fixed. Thanks guys.

     

    The code you've provided will return all records where the $search value is contained in the ticket_id field. The only reason I can see where all results would be returned is if $search is empty. Since you say that when you enter a value and there is a match that the appropriate records are displayed I assume that you are referencing the correct post value. If you are entering a value and there is no match - then no records would be displayed. So, I believe, either that is not the correct code that you've posted or the results you are getting are not exactly as you've stated them.

     

    I need to check whether the user has entered their value in the input field next, as I'm doing 'No results found' as a default message if a user decides to go to that page in the URL. It does work now though, thanks for your reply. :)

  13. Hi,

     

    I'm having a small problem with my query. I'm basically getting the user's input, and searching the database for a match towards their input. If it finds a match, display it. If it doesn't, display a message.

     

    My query does display the data if it finds a match, but it display everything from the database if it doesn't find anything.

     

    Could someone tell me what I'm doing wrong please?

     

    Here is my code:

    <?php
    $search = mysql_real_escape_string(trim($_POST['ticket']));
    
    $query = mysql_query("SELECT * FROM unbanappeal WHERE ticket_id LIKE '%$search%'");
    $ticket_id_check = mysql_num_rows($query);
    
    if($ticket_id_check < 0){
    echo "No results found.";
    }else{
    while($row = mysql_fetch_assoc($query)){
     echo $row['username'];
    }
    }
     ?>
    

     

    Also, is it possible for me to change my query from displaying any data that's like the user's input, to the data that is exactly like the user's input?

     

    Thanks in advance.

  14. Thank you. I'm getting the custom field through now, it's sending as 'option_name1'.

     

    I'm inserting the payment info into my database, I'm needing the custom field too. Since it's sending as 'option_name1', will I need to insert it as 'on0', or 'custom'?

     

    Here's how I'm inserting it right now.

    // add this order to a table of completed orders
        $payer_email = mysql_real_escape_string($_POST['payer_email']);
        $mc_gross = mysql_real_escape_string($_POST['mc_gross']);
        $on0 = mysql_real_escape_string($_POST['custom']);
    
        $sql = "INSERT INTO log VALUES
    		    ('', '$txn_id', '$payer_email', '$mc_gross', '$on0')";
    

  15. I just need it so the user can enter their username in the input field. I'm guessing it'll be custom, since you said the onX stuff is for multiple items?

     

    Sorry about posting all of the code, people usually tend to get quite... nasty when you don't :P

  16. Premiso, I got help from someone else on another forum. He told me to use 'on0' and 'os0', and that it should work after I put in

    <?php
    $on0 = $_POST['on0'];
    ?>
    and:
    <input type="hidden" name="on0" value="">
    <input type="hidden" name="os0" value="<?php echo $on0; ?>">
    

    which it never.

     

    I don't want spoon feeding, but would you be able to tell me in some description how I'd go about setting the variable and passing it through to the IPN?

  17. Hi,

     

    I'll try explain this the best I can.

     

    I have a PayPal IPN script that works, inserts the the data into my database etc. But i'm having trouble with a custom variable. I can seem to pass it through to paypal.

     

    I have my input field

    <input type="text" name="on0" value="">

    . This is where the will insert his/her username. And when the press the button

    <form action="https://www.paypal.com/cgi-bin/webscr" method="POST">
    		 <center><input type="text" name="on0" value="">
    		 <br />
     <?php
     $on0 = $_POST['on0'];
     ?>
    			 <input type="hidden" name="cmd" value="_xclick">
    			 <input type="hidden" name="business" value="donate@dawncraftmc.com">
    			 <input type="hidden" name="item_name" value="VIP">
    			 <input type="hidden" name="item_number" value="1">
    			 <input type="hidden" name="amount" value="0.01">
    			 <input type="hidden" name="no_shipping" value="1">
    			 <input type="hidden" name="no_note" value="1">
    			 <input type="hidden" name="currency_code" value="GBP">
    			 <input type="hidden" name="lc" value="GB">
    			 <input type="hidden" name="bn" value="PP-BuyNowBF">
    			 <input type="hidden" name="return" value="http://www.dawncraftmc.com/index.html">
    			 <input type="hidden" name="cancel_return" value="http://www.dawncraftmc.com/index.html">
    			 <input type="hidden" name="rm" value="2">
    			 <input type="hidden" name="notify_url" value="http://vip.dawncraftmc.com/ipn.php" />
     <input type="hidden" name="on0" value="">
    			 <input type="hidden" name="os0" value="<?php echo $on0; ?>">
    			 <input type="image" src="https://www.paypalobjects.com/en_US/GB/i/btn/btn_donateCC_LG.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online.">
     <img alt="" border="0" src="https://www.paypalobjects.com/en_GB/i/scr/pixel.gif" width="1" height="1"></center>
    		 </form>
    

    , it takes them to the PayPal page, they pay, and the variables passed through to the IPN goes into the database.

     

    Could someone help me please? Tell me if i'm doing something wrong?

     

    Here is both my ipn.php and ipnlistener.php:

     

    <?php
    include 'connect_to_mysql.php';
    // tell PHP to log errors to ipn_errors.log in this directory
    ini_set('log_errors', true);
    ini_set('error_log', dirname(__FILE__).'/ipn_errors.log');
    // intantiate the IPN listener
    include('ipnlistener.php');
    $listener = new IpnListener();
    // tell the IPN listener to use the PayPal test sandbox
    $listener->use_sandbox = false;
    // try to proces
    try {
    $listener->requirePostMethod();
    $verified = $listener->processIpn();
    } catch (Exception $e) {
    error_log($e->getMessage());
    exit(0);
    }
    // manually investigate variables from paypal
     $body = "IPN failed variable check: \n\n";
     $body .= $listener->getTextReport();
     mail('donate@dawncraftmc.com', 'IPN Variables', $body);
    if ($verified) {
    $errmsg = ''; // stores errors from fraud checks
    
    // 1. Make sure the payment status is "Completed"
    if ($_POST['payment_status'] != 'Completed') {
     // simply ignore any IPN that is not completed
     exit(0);
    }
    // 2. Make sure seller email matches your primary account email.
    if ($_POST['receiver_email'] != 'donate@dawncraftmc.com') {
     $errmsg .= "'receiver_email' does not match: ";
     $errmsg .= $_POST['receiver_email']."\n";
    }
    
    // 3. Make sure the amount(s) paid match
    if ($_POST['mc_gross'] != '0.01') {
     $errmsg .= "'mc_gross' does not match: ";
     $errmsg .= $_POST['mc_gross']."\n";
    }
    
    // 4. Make sure the currency code matches
    if ($_POST['mc_currency'] != 'GBP') {
     $errmsg .= "'mc_currency' does not match: ";
     $errmsg .= $_POST['mc_currency']."\n";
    }
    $txn_id = mysql_real_escape_string($_POST['txn_id']);
    $sql = "SELECT COUNT(*) FROM log WHERE txn_id = '$txn_id'";
    $r = mysql_query($sql);
    
    if (!$r) {
     error_log(mysql_error());
     exit(0);
    }
    
    $exists = mysql_result($r, 0);
    mysql_free_result($r);
    
    if ($exists) {
     $errmsg .= "'txn_id' has already been processed: ".$_POST['txn_id']."\n";
    }
    
    if (!empty($errmsg)) {
    
     // manually investigate errors from the fraud checking
     $body = "IPN failed fraud checks: \n$errmsg\n\n";
     $body .= $listener->getTextReport();
     mail('donate@dawncraftmc.com', 'IPN Fraud Warning', $body);
    
    } else {
    
     // add this order to a table of completed orders
     $payer_email = mysql_real_escape_string($_POST['payer_email']);
     $mc_gross = mysql_real_escape_string($_POST['mc_gross']);
     $option_selection1 = ($_POST['option_selection1_1'])?$_POST['option_selection1_1']:$_POST['option_selection1'];
     $option_selection2 = ($_POST['option_selection2_1'])?$_POST['option_selection2_1']:$_POST['option_selection2'];
    
     $sql = "INSERT INTO log VALUES
    		 ('', '$txn_id', '$payer_email', '$mc_gross', '$option_selection1', '$option_selection2')";
    
     if (!mysql_query($sql)) {
    	 error_log(mysql_error());
    	 exit(0);
     }
    
     // send user an email with a link to their digital download
     $to = filter_var($_POST['payer_email'], FILTER_SANITIZE_EMAIL);
     $subject = "Your digital download is ready";
     mail($to, "Thank you for your order", "VIP");
    
     $to = filter_var($_POST['receiver_email'], FILTER_SANITIZE_EMAIL);
     $subject = "Donation Received";
     mail($to, "Donation Received", "Donation received from", $_POST['payer_email']);
    }
    
    } else {
    // manually investigate the invalid IPN
    mail('donate@dawncraftmc.com', 'Invalid IPN', $listener->getTextReport());
    }
    ?>
    

     

    <?php
    /**
    * PayPal IPN Listener
    *
    * A class to listen for and handle Instant Payment Notifications (IPN) from
    * the PayPal server.
    */
    class IpnListener {
    
       /**
    * If true, the recommended cURL PHP library is used to send the post back
    * to PayPal. If flase then fsockopen() is used. Default true.
    *
    * @var boolean
    */
       public $use_curl = true;
    
       /**
    * If true, explicitly sets cURL to use SSL version 3. Use this if cURL
    * is compiled with GnuTLS SSL.
    *
    * @var boolean
    */
       public $force_ssl_v3 = true;
    
       /**
    * If true, cURL will use the CURLOPT_FOLLOWLOCATION to follow any
    * "Location: ..." headers in the response.
    *
    * @var boolean
    */
       public $follow_location = false;
    
       /**
    * If true, an SSL secure connection (port 443) is used for the post back
    * as recommended by PayPal. If false, a standard HTTP (port 80) connection
    * is used. Default true.
    *
    * @var boolean
    */
       public $use_ssl = true;
    
       /**
    * If true, the paypal sandbox URI www.sandbox.paypal.com is used for the
    * post back. If false, the live URI www.paypal.com is used. Default false.
    *
    * @var boolean
    */
       public $use_sandbox = false;
    
       /**
    * The amount of time, in seconds, to wait for the PayPal server to respond
    * before timing out. Default 30 seconds.
    *
    * @var int
    */
       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';
    
       /**
    * Post Back Using cURL
    *
    * Sends the post back to PayPal using the cURL library. Called by
    * the processIpn() method if the use_curl property is true. Throws an
    * exception if the post fails. Populates the response, response_status,
    * and post_uri properties on success.
    *
    * @param string The post data as a URL encoded string
    */
       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");
        }
       }
    
       /**
    * Post Back Using fsockopen()
    *
    * Sends the post back to PayPal using the fsockopen() function. Called by
    * the processIpn() method if the use_curl property is false. Throws an
    * exception if the post fails. Populates the response, response_status,
    * and post_uri properties on success.
    *
    * @param string The post data as a URL encoded string
    */
       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) {
    	    // fsockopen error
    	    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)) {
    		    // extract HTTP status from first line
    		    $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;
       }
    
       /**
    * Get POST URI
    *
    * Returns the URI that was used to send the post back to PayPal. This can
    * be useful for troubleshooting connection problems. The default URI
    * would be "ssl://www.sandbox.paypal.com:443/cgi-bin/webscr"
    *
    * @return string
    */
       public function getPostUri() {
        return $this->post_uri;
       }
    
       /**
    * Get Response
    *
    * Returns the entire response from PayPal as a string including all the
    * HTTP headers.
    *
    * @return string
    */
       public function getResponse() {
        return $this->response;
       }
    
       /**
    * Get Response Status
    *
    * Returns the HTTP response status code from PayPal. This should be "200"
    * if the post back was successful.
    *
    * @return string
    */
       public function getResponseStatus() {
        return $this->response_status;
       }
    
       /**
    * Get Text Report
    *
    * Returns a report of the IPN transaction in plain text format. This is
    * useful in emails to order processors and system administrators. Override
    * this method in your own class to customize the report.
    *
    * @return string
    */
       public function getTextReport() {
    
        $r = '';
    
        // date and POST url
        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";
    
        // HTTP Response
        for ($i=0; $i<80; $i++) { $r .= '-'; }
        $r .= "\n{$this->getResponse()}\n";
    
        // POST vars
        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;
       }
    
       /**
    * Process IPN
    *
    * Handles the IPN post back to PayPal and parsing the response. Call this
    * method from your IPN listener script. Returns true if the response came
    * back as "VERIFIED", false if the response came back "INVALID", and
    * throws an exception if there is an error.
    *
    * @param array
    *
    * @return boolean
    */
       public function processIpn($post_data=null) {
        $encoded_data = 'cmd=_notify-validate';
    
        if ($post_data === null) {
    	    // use raw POST data
    	    if (!empty($_POST)) {
    		    $this->post_data = $_POST;
    		    $encoded_data .= '&'.file_get_contents('php://input');
    	    } else {
    		    throw new Exception("No POST data found.");
    	    }
        } else {
    	    // use provided data array
    	    $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.");
        }
       }
    
       /**
    * Require Post Method
    *
    * Throws an exception and sets a HTTP 405 response header if the request
    * method was not POST.
    */
       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.");
        }
       }
    }
    ?>
    

     

    I'm testing this on the real PayPal, not the sandbox.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.