Results 1 to 6 of 6

Thread: [RESOLVED] paypal sandbox question

  1. #1

    Thread Starter
    Fanatic Member
    Join Date
    Aug 2007
    Posts
    912

    Resolved [RESOLVED] paypal sandbox question

    i have to create paypal integration where site can make automatic billing from users paypal account. but before all this i need to create a paypal test business account on sandbox. I created this account on sandbox but paypal is very irritating and now asking for linking bank account with the registered business. But i dont have business bank account. So how can i proceed?

    did i misunderstood something? :-(

  2. #2
    PowerPoster Nightwalker83's Avatar
    Join Date
    Dec 2001
    Location
    Adelaide, Australia
    Posts
    13,344

    Re: paypal sandbox question

    It has been ages since I last used paypal sandbox so I am not sure but I think this is all you need (besides your sandbox account).

    paypal_test.php
    PHP Code:
    <?php

    /*  PHP Paypal IPN Integration Class Demonstration File
     *  4.16.2005 - Micah Carrick, email@micahcarrick.com
    */
    // Setup class
    session_start();
    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
                
    // setup a variable for this script (ie: 'http://www.micahcarrick.com/paypal.php')
    $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...
     
          // 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''aaron._1256019699_biz@mail.net');
          
    $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');
          
    $total_amount$_SESSION['total_amount'];
          
    $p->add_field('amount''$total_amount');

          
    $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 have the code to
          // email an admin, update the database with payment status, activate a
          // membership, etc.  
     
          
    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>";
          
          
    // 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
          
          
    break;
          
       case 
    'cancel':       // Order was canceled...

          // The order was canceled before being completed.
     
          
    echo "<html><head><title>Canceled</title></head><body><h3>The order was canceled.</h3>";
          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.
      
      
             // For this example, we'll just email ourselves ALL the data.
             
    $subject 'Instant Payment Notification - Recieved Payment';
             
    $to 'aaron._1256019593_per@mail.net;    //  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;
     }     

    ?>
    paypal class.php
    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.3.0
     *      Copyright:  (c) 2005 - Micah Carrick 
     *                  You are free to use, distribute, and modify this software 
     *                  under the terms of the GNU General Public License.  See the
     *                  included license.txt file.
     *      
     *******************************************************************************
     *  VERION HISTORY:
     *      v1.3.0 [10.10.2005] - Fixed it so that single quotes are handled the 
     *                            right way rather than simple stripping them.  This
     *                            was needed because the user could still put in
     *                            quotes.
     *  
     *      v1.2.1 [06.05.2005] - Fixed typo from previous fix :)
     *
     *      v1.2.0 [05.31.2005] - Added the optional ability to remove all quotes
     *                            from the paypal posts.  The IPN will come back
     *                            invalid sometimes when quotes are used in certian
     *                            fields.
     *
     *      v1.1.0 [05.15.2005] - Revised the form output in the submit_paypal_post
     *                            method to allow non-javascript capable browsers
     *                            to provide a means of manual form submission.
     *
     *      v1.0.0 [04.16.2005] - Initial Version
     *
     *******************************************************************************
     *  DESCRIPTION:
     *
     *      NOTE: See www.micahcarrick.com for the most recent version of this class
     *            along with any applicable sample files and other documentaion.
     *
     *      This file provides a neat and simple method to interface with paypal and
     *      The paypal Instant Payment Notification (IPN) interface.  This file is
     *      NOT intended to make the paypal integration "plug 'n' play". It still
     *      requires the developer (that should be you) to understand the paypal
     *      process and know the variables you want/need to pass to paypal to
     *      achieve what you want.  
     *
     *      This class handles the submission of an order to paypal aswell as the
     *      processing an Instant Payment Notification.
     *  
     *      This code is based on that of the php-toolkit from paypal.  I've taken
     *      the basic principals and put it in to a class so that it is a little
     *      easier--at least for me--to use.  The php-toolkit can be downloaded from
     *      http://sourceforge.net/projects/paypal.
     *      
     *      To submit an order to paypal, have your order form POST to a file with:
     *
     *          $p = new paypal_class;
     *          $p->add_field('business', 'somebody@domain.com');
     *          $p->add_field('first_name', $_POST['first_name']);
     *          ... (add all your fields in the same manor)
     *          $p->submit_paypal_post();
     *
     *      To process an IPN, have your IPN processing file contain:
     *
     *          $p = new paypal_class;
     *          if ($p->validate_ipn()) {
     *          ... (IPN is verified.  Details are in the ipn_data() array)
     *          }
     *
     *
     *      In case you are new to paypal, here is some information to help you:
     *
     *      1. Download and read the Merchant User Manual and Integration Guide from
     *         http://www.paypal.com/en_US/pdf/integration_guide.pdf.  This gives 
     *         you all the information you need including the fields you can pass to
     *         paypal (using add_field() with this class) aswell as all the fields
     *         that are returned in an IPN post (stored in the ipn_data() array in
     *         this class).  It also diagrams the entire transaction process.
     *
     *      2. Create a "sandbox" account for a buyer and a seller.  This is just
     *         a test account(s) that allow you to test your site from both the 
     *         seller and buyer perspective.  The instructions for this is available
     *         at https://developer.paypal.com/ as well as a great forum where you
     *         can ask all your paypal integration questions.  Make sure you follow
     *         all the directions in setting up a sandbox test environment, including
     *         the addition of fake bank accounts and credit cards.
     * 
     *******************************************************************************
    */

    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() {
          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 5 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"); 
             while(!
    feof($fp)) { 
                
    $this->ipn_response .= fgets($fp1024); 
             } 

             
    fclose($fp); // close connection

          
    }
          
          if (
    eregi("VERIFIED",$this->ipn_response)) {
             
    $this->log_ipn_results(true);
             return 
    true;       
             
          } else {
             
    $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;
          
          
    $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)."&nbsp;</td></tr>";
          }
     
          echo 
    "</table><br>"
       }
    }
    I can't remember what else is required.
    when you quote a post could you please do it via the "Reply With Quote" button or if it multiple post click the "''+" button then "Reply With Quote" button.
    If this thread is finished with please mark it "Resolved" by selecting "Mark thread resolved" from the "Thread tools" drop-down menu.
    https://get.cryptobrowser.site/30/4111672

  3. #3

    Thread Starter
    Fanatic Member
    Join Date
    Aug 2007
    Posts
    912

    Re: paypal sandbox question

    thank you for the code, i will use it somewhere :-)

    im now able to play with sandbox after spending few hours on paypal site anc peeking inside all links :-)

    now i have to implement recurring payment on paypal. I have found some code and could implement it successfully. And i get customers profiles successfully created for recurring payment.

    but my question is suppose a user select service for 5 months and pay $5 each month with recurring payment. but what if after one / two month he remove credit card from his paypal or has no fund into paypal or any other reason that paypal can not charge from his account. so in that case how i will be able to check that payment was successfully made or not?

  4. #4
    PowerPoster Nightwalker83's Avatar
    Join Date
    Dec 2001
    Location
    Adelaide, Australia
    Posts
    13,344

    Re: paypal sandbox question

    Quote Originally Posted by chunk View Post
    but my question is suppose a user select service for 5 months and pay $5 each month with recurring payment. but what if after one / two month he remove credit card from his paypal or has no fund into paypal or any other reason that paypal can not charge from his account. so in that case how i will be able to check that payment was successfully made or not?
    Assuming that Sandbox is the same as the full Paypal in that respect, there should be the "Payment received" section where the details of payment to your account is stored.
    when you quote a post could you please do it via the "Reply With Quote" button or if it multiple post click the "''+" button then "Reply With Quote" button.
    If this thread is finished with please mark it "Resolved" by selecting "Mark thread resolved" from the "Thread tools" drop-down menu.
    https://get.cryptobrowser.site/30/4111672

  5. #5

    Thread Starter
    Fanatic Member
    Join Date
    Aug 2007
    Posts
    912

    Re: paypal sandbox question

    thanks im able to use sandbox now

  6. #6
    PowerPoster Nightwalker83's Avatar
    Join Date
    Dec 2001
    Location
    Adelaide, Australia
    Posts
    13,344

    Re: paypal sandbox question

    No problem! If this thread is resolved please mark in resolved by following the instructions in my sig.
    when you quote a post could you please do it via the "Reply With Quote" button or if it multiple post click the "''+" button then "Reply With Quote" button.
    If this thread is finished with please mark it "Resolved" by selecting "Mark thread resolved" from the "Thread tools" drop-down menu.
    https://get.cryptobrowser.site/30/4111672

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Click Here to Expand Forum to Full Width