MasterACE14 Posted July 12, 2007 Share Posted July 12, 2007 hey guys, I just want to let everyone know that I know virtually nothing about OOP. Now, I found a IPN script on hotscripts.com, it works fine. I have a function to update users data in a MySQL database, that works fine, but when I put them both together, IPN works, but the function doesn't execute. My guess is that somehow I have to include the function in the PHP class, but I don't know how to do so. would anyone be able to help me? heres the PHP Class(IPN script): <?php 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_results.log'; $this->ipn_log = true; $this->ipn_response = ''; // populate $fields array with a few default values. See the paypal // documentation for a list of fields and their data types. These defaul // values can be overwritten by the calling script. $this->add_field('rm','2'); // Return method = POST $this->add_field('cmd','_xclick'); } function add_field($field, $value) { // adds a key=>value pair to the fields array, which is what will be // sent to paypal as POST variables. If the value is already in the // array, it will be overwritten. $this->fields["$field"] = $value; } function submit_paypal_post() { // this function actually generates an entire HTML page consisting of // a form with hidden elements which is submitted to paypal via the // BODY element's onLoad attribute. We do this so that you can validate // any POST vars from you custom form before submitting to paypal. So // basically, you'll have your own form which is submitted to your script // to validate the data, which in turn calls this function to create // another hidden form and submit to paypal. // The user will briefly see a message on the screen that reads: // "Please wait, your order is being processed..." and then immediately // is redirected to paypal. echo "<html>\n"; echo "<head><title>Processing Payment...</title></head>\n"; echo "<body onLoad=\"document.forms['paypal_form'].submit();\">\n"; echo "<center><h2>Please wait, your order is being processed and you"; echo " will be redirected to the paypal website.</h2></center>\n"; echo "<form method=\"post\" name=\"paypal_form\" "; echo "action=\"".$this->paypal_url."\">\n"; foreach ($this->fields as $name => $value) { echo "<input type=\"hidden\" name=\"$name\" value=\"$value\"/>\n"; } echo "<center><br/><br/>If you are not automatically redirected to "; echo "paypal within 10 seconds...<br/><br/>\n"; echo "<input type=\"submit\" value=\"Click Here\"></center>\n"; 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(stripslashes($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($fp, 1024); } 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() { // Used for debugging, this function will output all the field/value pairs // that are currently defined in the instance of the class using the // add_field() function. 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)." </td></tr>"; } echo "</table><br>"; } } ?> heres the PHP class(IPN script) in action: <?php if (file_exists('install.php')) { die("Please delete <b>install.php</b> from your Shadow Lords directory before continuing."); } include('lib.php'); include('cookies.php'); $link = opendb(); $controlquery = doquery("SELECT * FROM {{table}} WHERE id='1' LIMIT 1", "control"); $controlrow = mysql_fetch_array($controlquery); // Login (or verify) if not logged in. $userrow = checkcookies(); if ($userrow == false) { if (isset($_GET["do"])) { if ($_GET["do"] == "verify") { header("Location: users.php?do=verify"); die(); } } header("Location: login.php?do=login"); die(); } // Close game. if ($controlrow["gameopen"] == 0) { display("The game is currently closed for maintanence. Please check back later.","Game Closed"); die(); } // Force verify if the user isn't verified yet. if ($controlrow["verifyemail"] == 1 && $userrow["verify"] != 1) { header("Location: users.php?do=verify"); die(); } // Block user if he/she has been banned. if ($userrow["authlevel"] == 2) { die("Your account has been blocked. Please try back later."); } // DONATE FUNCTION function donate1() { global $userrow; if(substr($userrow['charname'], -4) == '~SS~'){ $redd = ""; } else//if($userrow['charname'] !== $userrow['charname']." ~SS~") { $redd = " ~SS~"; } $charn = $userrow['charname']; $bank = $userrow['bank']; $maxmp = $userrow['maxmp']; $maxtp = $userrow['maxtp']; $maxhp = $userrow['maxhp']; $strengthh = $userrow['strength']; $dexterityy = $userrow['dexterity']; $experiencee = $userrow['experience']; if ($userrow['verify'] == 1) { $charn = $userrow['charname'].$redd; $bank = ceil($userrow['bank']+2500); $maxmp = ceil($userrow['maxmp']+25); $maxtp = ceil($userrow['maxtp']+25); $maxhp = ceil($userrow['maxhp']+25); $strengthh = ceil($userrow['strength']+25); $dexterityy = ceil($userrow['dexterity']+25); $experiencee = ceil($userrow['experience']+100); //echo("Transaction Successful!"); } elseif ($userrow['verify'] !== 1) { die("This Page is restricted to people that have verified their accounts"); } $con = mysql_connect("localhost","ace_ACE","*****"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("ace_sl", $con); mysql_query("UPDATE `sl_users` SET `charname`='$charn' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `bank`='$bank' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `maxmp`='$maxmp' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `maxtp`='$maxtp' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `maxhp`='$maxhp' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `strength`='$strengthh' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `dexterity`='$dexterityy' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `experience`='$experiencee' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `authlevel`='3' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); }; // IPN SCRIPT /* PHP Paypal IPN Integration Class Demonstration File * 4.16.2005 - Micah Carrick, email@micahcarrick.com * * This file demonstrates the usage of paypal.class.php, a class designed * to aid in the interfacing between your website, paypal, and the instant * payment notification (IPN) interface. This single file serves as 4 * virtual pages depending on the "action" varialble passed in the URL. It's * the processing page which processes form data being submitted to paypal, it * is the page paypal returns a user to upon success, it's the page paypal * returns a user to upon canceling an order, and finally, it's the page that * handles the IPN request from Paypal. * * I tried to comment this file, aswell as the acutall class file, as well as * I possibly could. Please email me with questions, comments, and suggestions. * See the header of paypal.class.php for additional resources and information. */ // Setup class 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 //$p->paypal_url = 'https://www.paypal.com/cgi-bin/webscr'; // paypal url <--- UNCOMMENT THIS ONE $p->paypal_url = 'https://www.paypal.com/au/au/cgi-bin/webscr'; // aussie paypal url // setup a variable for this script (ie: 'http://www.micahcarrick.com/paypal.php') //$this_script = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; $this_script = 'http://www.crikeygames.com.au/shadowlords/purchase.php'; // 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... // There should be no output at this point. To process the POST data, // the submit_paypal_post() function will output all the HTML tags which // contains a FORM which is submited instantaneously using the BODY onload // attribute. In other words, don't echo or printf anything when you're // going to be calling the submit_paypal_post() function. // This is where you would have your form validation and all that jazz. // You would take your POST vars and load them into the class like below, // only using the POST values instead of constant string expressions. // For example, after ensureing all the POST variables from your custom // order form are valid, you might have: // // $p->add_field('first_name', $_POST['first_name']); // $p->add_field('last_name', $_POST['last_name']); $p->add_field('business', 'crikeygames@unwired.com.au'); $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', '$20 Shadow Lords Supporter Status'); $p->add_field('amount', '1.00'); $p->add_field('currency_code', 'AUD'); $p->submit_paypal_post(); // submit the fields to paypal //$p->dump_fields(); // for debugging, output a table of all the fields break; case 'success': // Order was successful... // This is where you would probably want to thank the user for their order // or what have you. The order information at this point is in POST // variables. However, you don't want to "process" the order until you // get validation from the IPN. That's where you would have the code to // email an admin, update the database with payment status, activate a // membership, etc. $returntogame = "/shadowlords/"; echo "<html><head><title>Success</title></head><body><h3>Thank you for purchasing Supporter Status for Shadow Lords.</h3><br /><br /><a href=".$returntogame.">Return to Shadow Lords</a><br />"; foreach ($_POST as $key => $value) //{ echo "$key: $value<br>"; } echo "</body></html>"; // You could also simply re-direct them to another page, or your own // order status page which presents the user with the status of their // order based on a database (which can be modified with the IPN code // below). break; case 'cancel': // Order was canceled... // The order was canceled before being completed. echo "<html><head><title>Canceled</title></head><body><h3>The payment was canceled.</h3><br /><br /><a href=".$returntogame.">Return to Shadow Lords</a><br />"; echo "</body></html>"; break; case 'ipn': // Paypal is calling page for IPN validation... // It's important to remember that paypal calling this script. There // is no output here. This is where you validate the IPN data and if it's // valid, update your database to signify that the user has payed. If // you try and use an echo or printf function here it's not going to do you // a bit of good. This is on the "backend". That is why, by default, the // class logs all IPN data to a text file. if ($p->validate_ipn()) { // Payment has been recieved and IPN is verified. This is where you // update your database to activate or process the order, or setup // the database with the user's order details, email an administrator, // etc. You can access a slew of information via the ipn_data() array. // Check the paypal documentation for specifics on what information // is available in the IPN POST variables. Basically, all the POST vars // which paypal sends, which we send back for validation, are now stored // in the ipn_data() array. donate1(); // For this example, we'll just email ourselves ALL the data. /* $subject = 'Shadow Lords - Instant Payment Notification - Recieved Payment'; $to = 'crikeygames@unwired.com.au'; // your email $body = "An instant payment notification was successfully recieved\n"; $body .= "from ".$p->ipn_data['payer_email']." on ".date('m/d/Y'); $body .= " at ".date('g:i A')."\n\nDetails:\n"; foreach ($p->ipn_data as $key => $value) { $body .= "\n$key: $value"; } mail($to, $subject, $body); */ } break; } ?> If anyone can help me get the function to work upon success with the paypal payments. I will really appreciate it. just keep in mind, the IPN script works perfectly without a flaw, and the function does on its own, just the function doesn't execute when put with the IPN script. Regards ACE Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/ Share on other sites More sharing options...
MadTechie Posted July 17, 2007 Share Posted July 17, 2007 only problem i can see is your missing var paypal_url; also move the donate1 function to the bottom ! Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-300273 Share on other sites More sharing options...
MasterACE14 Posted July 18, 2007 Author Share Posted July 18, 2007 sorry I don't understand what you mean by I need to add. var paypal_url; Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-300992 Share on other sites More sharing options...
MadTechie Posted July 18, 2007 Share Posted July 18, 2007 <?php 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 $paypal_url; // You need to ADD this 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'; //NO Var for the line above Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-301078 Share on other sites More sharing options...
MasterACE14 Posted July 18, 2007 Author Share Posted July 18, 2007 ok, thanks, I'll be testing it tommorow. Regards ACE Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-301085 Share on other sites More sharing options...
MasterACE14 Posted July 23, 2007 Author Share Posted July 23, 2007 ok, I've tested it, with no success. payments are working fine, but still not adding stuff to the database. I dont know if the paypal class cant validate that the payment is done or what, but its just not giving the stuff. here's the script after making the adjustments you told me to. <?php if (file_exists('install.php')) { die("Please delete <b>install.php</b> from your Shadow Lords directory before continuing."); } include('lib.php'); include('cookies.php'); $link = opendb(); $controlquery = doquery("SELECT * FROM {{table}} WHERE id='1' LIMIT 1", "control"); $controlrow = mysql_fetch_array($controlquery); // Login (or verify) if not logged in. $userrow = checkcookies(); if ($userrow == false) { if (isset($_GET["do"])) { if ($_GET["do"] == "verify") { header("Location: users.php?do=verify"); die(); } } header("Location: login.php?do=login"); die(); } // Close game. if ($controlrow["gameopen"] == 0) { display("The game is currently closed for maintanence. Please check back later.","Game Closed"); die(); } // Force verify if the user isn't verified yet. if ($controlrow["verifyemail"] == 1 && $userrow["verify"] != 1) { header("Location: users.php?do=verify"); die(); } // Block user if he/she has been banned. if ($userrow["authlevel"] == 2) { die("Your account has been blocked. Please try back later."); } // DONATE FUNCTION function donate1() { global $userrow; if(substr($userrow['charname'], -4) == '~SS~'){ $redd = ""; } else//if($userrow['charname'] !== $userrow['charname']." ~SS~") { $redd = " ~SS~"; } $charn = $userrow['charname']; $bank = $userrow['bank']; $maxmp = $userrow['maxmp']; $maxtp = $userrow['maxtp']; $maxhp = $userrow['maxhp']; $strengthh = $userrow['strength']; $dexterityy = $userrow['dexterity']; $experiencee = $userrow['experience']; if ($userrow['verify'] == 1) { $charn = $userrow['charname'].$redd; $bank = ceil($userrow['bank']+2500); $maxmp = ceil($userrow['maxmp']+25); $maxtp = ceil($userrow['maxtp']+25); $maxhp = ceil($userrow['maxhp']+25); $strengthh = ceil($userrow['strength']+25); $dexterityy = ceil($userrow['dexterity']+25); $experiencee = ceil($userrow['experience']+100); //echo("Transaction Successful!"); } elseif ($userrow['verify'] !== 1) { die("This Page is restricted to people that have verified their accounts"); } $con = mysql_connect("localhost","ace_ACE","shadow69"); if (!$con) { die('Could not connect: ' . mysql_error()); } mysql_select_db("ace_sl", $con); mysql_query("UPDATE `sl_users` SET `charname`='$charn' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `bank`='$bank' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `maxmp`='$maxmp' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `maxtp`='$maxtp' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `maxhp`='$maxhp' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `strength`='$strengthh' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `dexterity`='$dexterityy' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `experience`='$experiencee' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); mysql_query("UPDATE `sl_users` SET `authlevel`='3' WHERE id='".$userrow['id']."'") or die ("MYSQL ERROR: ".mysql_error().""); }; // IPN SCRIPT /* PHP Paypal IPN Integration Class Demonstration File * 4.16.2005 - Micah Carrick, email@micahcarrick.com * * This file demonstrates the usage of paypal.class.php, a class designed * to aid in the interfacing between your website, paypal, and the instant * payment notification (IPN) interface. This single file serves as 4 * virtual pages depending on the "action" varialble passed in the URL. It's * the processing page which processes form data being submitted to paypal, it * is the page paypal returns a user to upon success, it's the page paypal * returns a user to upon canceling an order, and finally, it's the page that * handles the IPN request from Paypal. * * I tried to comment this file, aswell as the acutall class file, as well as * I possibly could. Please email me with questions, comments, and suggestions. * See the header of paypal.class.php for additional resources and information. */ // Setup class 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 //$p->paypal_url = 'https://www.paypal.com/cgi-bin/webscr'; // paypal url <--- UNCOMMENT THIS ONE $p->paypal_url = 'https://www.paypal.com/au/au/cgi-bin/webscr'; // aussie paypal url // setup a variable for this script (ie: 'http://www.micahcarrick.com/paypal.php') //$this_script = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; $this_script = 'http://www.crikeygames.com.au/shadowlords/purchase.php'; // 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... // There should be no output at this point. To process the POST data, // the submit_paypal_post() function will output all the HTML tags which // contains a FORM which is submited instantaneously using the BODY onload // attribute. In other words, don't echo or printf anything when you're // going to be calling the submit_paypal_post() function. // This is where you would have your form validation and all that jazz. // You would take your POST vars and load them into the class like below, // only using the POST values instead of constant string expressions. // For example, after ensureing all the POST variables from your custom // order form are valid, you might have: // // $p->add_field('first_name', $_POST['first_name']); // $p->add_field('last_name', $_POST['last_name']); $p->add_field('business', 'crikeygames@unwired.com.au'); $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', '$20 Shadow Lords Supporter Status'); $p->add_field('amount', '1.00'); $p->add_field('currency_code', 'AUD'); $p->submit_paypal_post(); // submit the fields to paypal //$p->dump_fields(); // for debugging, output a table of all the fields break; case 'success': // Order was successful... // This is where you would probably want to thank the user for their order // or what have you. The order information at this point is in POST // variables. However, you don't want to "process" the order until you // get validation from the IPN. That's where you would have the code to // email an admin, update the database with payment status, activate a // membership, etc. // echo "<center><h4>...</h4></center>"; // header("Location: http://www.crikeygames.com.au/shadowlords/supporter.php"); $returntogame = "/shadowlords/"; echo "<html><head><title>Success</title></head><body><h3>Thank you for purchasing Supporter Status for Shadow Lords.</h3><br /><br /><a href=".$returntogame.">Return to Shadow //Lords</a><br />"; foreach ($_POST as $key => $value) //{ echo "$key: $value<br>"; } echo "</body></html>"; // You could also simply re-direct them to another page, or your own // order status page which presents the user with the status of their // order based on a database (which can be modified with the IPN code // below). break; case 'cancel': // Order was canceled... // The order was canceled before being completed. echo "<html><head><title>Canceled</title></head><body><h3>The payment was canceled.</h3><br /><br /><a href=".$returntogame.">Return to Shadow Lords</a><br />"; echo "</body></html>"; break; case 'ipn': // Paypal is calling page for IPN validation... // It's important to remember that paypal calling this script. There // is no output here. This is where you validate the IPN data and if it's // valid, update your database to signify that the user has payed. If // you try and use an echo or printf function here it's not going to do you // a bit of good. This is on the "backend". That is why, by default, the // class logs all IPN data to a text file. if ($p->validate_ipn()) { // Payment has been recieved and IPN is verified. This is where you // update your database to activate or process the order, or setup // the database with the user's order details, email an administrator, // etc. You can access a slew of information via the ipn_data() array. // Check the paypal documentation for specifics on what information // is available in the IPN POST variables. Basically, all the POST vars // which paypal sends, which we send back for validation, are now stored // in the ipn_data() array. // header("Location: http://www.crikeygames.com.au/shadowlords/supporter.php"); // For this example, we'll just email ourselves ALL the data. /* $subject = 'Shadow Lords - Instant Payment Notification - Recieved Payment'; $to = 'crikeygames@unwired.com.au'; // your email $body = "An instant payment notification was successfully recieved\n"; $body .= "from ".$p->ipn_data['payer_email']." on ".date('m/d/Y'); $body .= " at ".date('g:i A')."\n\nDetails:\n"; */ foreach ($p->ipn_data as $key => $value) { $body .= "\n$key: $value"; } // mail($to, $subject, $body); donate1(); } break; } ?> when the payment goes through, it redirects from paypal to www.crikeygames.com.au/shadowlords/purchase.php?action=success (my website with the success on the end) now according to the script, shouldn't it go to www.crikeygames.com.au/shadowlords/purchase.php?action=ipn at some point? Regards ACE Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-305182 Share on other sites More sharing options...
MasterACE14 Posted July 28, 2007 Author Share Posted July 28, 2007 anyone? any ideas? Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-309819 Share on other sites More sharing options...
MasterACE14 Posted August 3, 2007 Author Share Posted August 3, 2007 ... Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-314736 Share on other sites More sharing options...
MasterACE14 Posted August 10, 2007 Author Share Posted August 10, 2007 >_> Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-320142 Share on other sites More sharing options...
MadTechie Posted August 10, 2007 Share Posted August 10, 2007 now according to the script, shouldn't it go to www.crikeygames.com.au/shadowlords/purchase.php?action=ipn at some point? Regards ACE what part of the code does that ? NB: i just woke up so i may still be blind Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-320154 Share on other sites More sharing options...
MasterACE14 Posted August 10, 2007 Author Share Posted August 10, 2007 im not sure if it does or not, but the IPN doesnt seem to be able to validate. although when I set the paypal_url to the sandbox address, it does validate. Im not exactly how the validate works, but its really annoying me :-\ heres the .ipn_results.log , the first part is with paypal_url set to the sandbox address, and the second part is with paypal_url set to the real paypal address: [07/04/2007 10:29 PM] - SUCCESS! IPN POST Vars from Paypal: mc_gross=20.00, address_status=confirmed, payer_id=F932X4W5ETYDQ, tax=0.00, address_street=1 Main St, payment_date=21:29:33 Jul 04, 2007 PDT, payment_status=Pending, charset=windows-1252, address_zip=95131, first_name=Test, address_country_code=US, address_name=Test User, notify_version=2.4, custom=, payer_status=verified, address_country=United States, address_city=San Jose, quantity=1, verify_sign=AB5-G-tSSqPLnhuF1zxb.YLqSIjAA-4.DkGXTvexMaBdy.UphRec.HFr, payer_email=bob_1183598196_per@hotmail.com, txn_id=0, payment_type=instant, last_name=User, address_state=CA, receiver_email=npoultney@hotmail.com, pending_reason=unilateral, txn_type=web_accept, item_name=Shadow Lords $20 Supporter Status, mc_currency=AUD, item_number=, residence_country=US, test_ipn=1, payment_gross=, shipping=0.00, IPN Response from Paypal Server: HTTP/1.1 200 OK Date: Thu, 05 Jul 2007 04:29:45 GMT Server: Apache/1.3.27 (Unix) mod_ssl/2.8.12 OpenSSL/0.9.7a mod_fastcgi/2.4.2 PHP/4.3.2 Set-Cookie: cookie_check=yes; expires=Sun, 02-Jul-2017 04:29:45 GMT; path=/; domain=.paypal.com Set-Cookie: Apache=67.18.221.154.61291183609785635; path=/; expires=Sat, 27-Jun-37 04:29:45 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 8 VERIFIED [08/10/2007 1:50 AM] - FAIL: IPN Validation Failed. IPN POST Vars from Paypal: IPN Response from Paypal Server: HTTP/1.1 200 OK Date: Fri, 10 Aug 2007 07:50:34 GMT Server: Apache/1.3.33 (Unix) mod_fastcgi/2.4.2 mod_gzip/1.3.26.1a mod_ssl/2.8.22 OpenSSL/0.9.7e Set-Cookie: cookie_check=yes; expires=Mon, 07-Aug-2017 07:50:34 GMT; path=/; domain=.paypal.com Set-Cookie: Apache=67.18.221.154.85541186732234732; path=/; expires=Sun, 02-Aug-37 07:50:34 GMT Connection: close Transfer-Encoding: chunked Content-Type: text/html; charset=UTF-8 7 INVALID 0 although it is successfully validated when set to the sandbox address, it still doesnt execute the donate1() function. I was wondering if maybe I have to put donate1() function in paypal.class.php instead of just in purchase.php ? Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-320165 Share on other sites More sharing options...
MadTechie Posted August 10, 2007 Share Posted August 10, 2007 if the "IPN Validation Failed" then shouldnt you be asking PayPal ? (sorry if that sounds rude) but that from their server..! Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-320166 Share on other sites More sharing options...
MasterACE14 Posted August 10, 2007 Author Share Posted August 10, 2007 lol, I never thought of that, I'll give that a try. Thanks , but if I do get it to validate, then im still stuck with my original problem, the function still doesnt execute. ps. It doesn't sound rude, advice generally isn't Regards ACE Quote Link to comment https://forums.phpfreaks.com/topic/59612-function-not-executing-upon-success-with-ipn-script/#findComment-320169 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.