View Single Post
Old 05-03-2008, 11:59 PM   #4 (permalink)
freenity
The Acquainted
 
freenity's Avatar
 
Join Date: Feb 2008
Posts: 119
Thanks: 17
freenity is on a distinguished road
Default

Thanks.
I read a bit more about it.
I use a class made by Micah Carrick, I found it on phpclasses.org
And I'm using authors example script. The problem is that I don't receive a notification from paypal. I'm testing it with my sandbox account...

This is the test file:

PHP Code:
<?php


require_once('paypal.class.php');  // include the class file
$p = new paypal_class;             // initiate an instance of the class
$p->paypal_url 'https://www.sandbox.paypal.com/cgi-bin/webscr';   // testing paypal url

$this_script 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];

// if there is not action variable, set the default action of 'process'
if (empty($_GET['action'])) $_GET['action'] = 'process';  

switch (
$_GET['action']) {
    
   case 
'process':      // Process and order...

      
$p->add_field('business''anton._1209229536_biz@gmail.com');
      
$p->add_field('return'$this_script.'?action=success');
      
$p->add_field('cancel_return'$this_script.'?action=cancel');
      
$p->add_field('notify_url'$this_script.'?action=ipn');
      
$p->add_field('item_name''Paypal Test Transaction');
      
$p->add_field('amount''1.99');

      
$p->submit_paypal_post(); // submit the fields to paypal
      
break;
      
   case 
'success':      // Order was successful...
      
echo "<html><head><title>Success</title></head><body><h3>Thank you for your order.</h3>";
      foreach (
$_POST as $key => $value) { echo "$key$value<br>"; }
      echo 
"</body></html>";
      break;
      
   case 
'ipn':          // Paypal is calling page for IPN validation...
   
      
      
if ($p->validate_ipn()) {

      
$fp =  fopen("pp.txt","a");
     
fwrite($fp"test");
     
fclose($fp);
      }
      break;
 }
And this is the class:
PHP Code:
<?php
/*******************************************************************************
 *                      PHP Paypal IPN Integration Class
 *******************************************************************************
 *      Author:     Micah Carrick
 *      Email:      email@micahcarrick.com
 *      Website:    http://www.micahcarrick.com
 *
 *      File:       paypal.class.php
 *      Version:    1.00
 *      Copyright:  (c) 2005 - Micah Carrick 
 *                  You are free to use, distribute, and modify this software 
*/
class paypal_class {
    
   var 
$last_error;                 // holds the last error encountered
   
   
var $ipn_log;                    // bool: log IPN results to text file?
   
var $ipn_log_file;               // filename of the IPN log
   
var $ipn_response;               // holds the IPN response from paypal   
   
var $ipn_data = array();         // array contains the POST values for IPN
   
   
var $fields = array();           // array holds the fields to submit to paypal

   
   
function paypal_class() {
       
      
// initialization constructor.  Called when class is created.
      
      
$this->paypal_url 'https://www.paypal.com/cgi-bin/webscr';
      
      
$this->last_error '';
      
      
$this->ipn_log_file 'ipn_log.txt';
      
$this->ipn_log true;
      
$this->ipn_response '';
  
      
$this->add_field('rm','2');           // Return method = POST
      
$this->add_field('cmd','_xclick'); 
      
   }
   
   function 
add_field($field$value) {
   
      
$this->fields["$field"] = $value;
   }

   function 
submit_paypal_post() {
 
      echo 
"<html>\n";
      echo 
"<head><title>Processing Payment...</title></head>\n";
      echo 
"<body onLoad=\"document.form.submit();\">\n";
      echo 
"<center><h3>Please wait, your order is being processed...</h3></center>\n";
      echo 
"<form method=\"post\" name=\"form\" action=\"".$this->paypal_url."\">\n";

      foreach (
$this->fields as $name => $value) {
         echo 
"<input type=\"hidden\" name=\"$name\" value=\"$value\">";
      }
 
      echo 
"</form>\n";
      echo 
"</body></html>\n";
    
   }
   
   function 
validate_ipn() {

      
// parse the paypal URL
      
$url_parsed=parse_url($this->paypal_url);        

      
// generate the post string from the _POST vars aswell as load the
      // _POST vars into an arry so we can play with them from the calling
      // script.
      
$post_string '';    
      foreach (
$_POST as $field=>$value) { 
         
$this->ipn_data["$field"] = $value;
         
$post_string .= $field.'='.urlencode($value).'&'
      }
      
$post_string.="cmd=_notify-validate"// append ipn command

      // open the connection to paypal
      
$fp fsockopen($url_parsed[host],"80",$err_num,$err_str,30); 
      if(!
$fp) {
          
         
// could not open the connection.  If loggin is on, the error message
         // will be in the log.
         
$this->last_error "fsockopen error no. $errnum$errstr";
         
$this->log_ipn_results(false);       
         return 
false;
         
      } else { 
 
         
// Post the data back to paypal
         
fputs($fp"POST $url_parsed[path] HTTP/1.1\r\n"); 
         
fputs($fp"Host: $url_parsed[host]\r\n"); 
         
fputs($fp"Content-type: application/x-www-form-urlencoded\r\n"); 
         
fputs($fp"Content-length: ".strlen($post_string)."\r\n"); 
         
fputs($fp"Connection: close\r\n\r\n"); 
         
fputs($fp$post_string "\r\n\r\n"); 

         
// loop through the response from the server and append to variable
         
while(!feof($fp)) { 
            
$this->ipn_response .= fgets($fp1024); 
         } 

         
fclose($fp); // close connection

      
}
      
      if (
eregi("VERIFIED",$this->ipn_response)) {
  
         
// Valid IPN transaction.
         
$this->log_ipn_results(true);
         return 
true;       
         
      } else {
  
         
// Invalid IPN transaction.  Check the log for details.
         
$this->last_error 'IPN Validation Failed.';
         
$this->log_ipn_results(false);   
         return 
false;
         
      }
      
   }
   
   function 
log_ipn_results($success) {
       
      if (!
$this->ipn_log) return;  // is logging turned off?
      
      // Timestamp
      
$text '['.date('m/d/Y g:i A').'] - '
      
      
// Success or failure being logged?
      
if ($success$text .= "SUCCESS!\n";
      else 
$text .= 'FAIL: '.$this->last_error."\n";
      
      
// Log the POST variables
      
$text .= "IPN POST Vars from Paypal:\n";
      foreach (
$this->ipn_data as $key=>$value) {
         
$text .= "$key=$value, ";
      }
 
      
// Log the response from the paypal server
      
$text .= "\nIPN Response from Paypal Server:\n ".$this->ipn_response;
      
      
// Write to log
      
$fp=fopen($this->ipn_log_file,'a');
      
fwrite($fp$text "\n\n"); 

      
fclose($fp);  // close file
   
}

   function 
dump_fields() {
 
      echo 
"<h3>paypal_class->dump_fields() Output:</h3>";
      echo 
"<table width=\"95%\" border=\"1\" cellpadding=\"2\" cellspacing=\"0\">
            <tr>
               <td bgcolor=\"black\"><b><font color=\"white\">Field Name</font></b></td>
               <td bgcolor=\"black\"><b><font color=\"white\">Value</font></b></td>
            </tr>"

      
      
ksort($this->fields);
      foreach (
$this->fields as $key => $value) {
         echo 
"<tr><td>$key</td><td>".urldecode($value)."&nbsp;</td></tr>";
      }
 
      echo 
"</table><br>"
   }
}
I removed the coments so the files are shorter.
__________________
http://feudal-times.net - My PBB Game
http://gwphp.feudal-times.net - My Blog "Gaming With PHP"
freenity is offline  
Reply With Quote