title: How to setup payments with paypal IPN
body: <p>I am setting up paypal IPN with my website so that users who are logged in can purchase points. I already have session and login and $id variables and what not, I do not need help on any of that. I need help on the paypal IPN aspect of it. So, what I have so far is the notification URL which I also set on my paypal account. Here is the notification url:</p>
  
  <pre><code>    $raw_post_data = file_get_contents('php://input');
  $raw_post_array = explode('&amp;', $raw_post_data);
  $myPost = array();
  foreach ($raw_post_array as $keyval) {
    $keyval = explode ('=', $keyval);
    if (count($keyval) == 2)
       $myPost[$keyval[0]] = urldecode($keyval[1]);
  }
  // read the post from PayPal system and add 'cmd'
  $req = 'cmd=_notify-validate';
  if(function_exists('get_magic_quotes_gpc')) {
     $get_magic_quotes_exists = true;
  } 
  foreach ($myPost as $key =&gt; $value) {        
     if($get_magic_quotes_exists == true &amp;&amp; get_magic_quotes_gpc() == 1) { 
          $value = urlencode(stripslashes($value)); 
     } else {
          $value = urlencode($value);
     }
     $req .= "&amp;$key=$value";
  }
  
  
  // STEP 2: Post IPN data back to paypal to validate
  
  $ch = curl_init('https://www.paypal.com/cgi-bin/webscr'); // change to [...]sandbox.paypal[...] when using sandbox to test
  curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $req);
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
  curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
  curl_setopt($ch, CURLOPT_FORBID_REUSE, 1);
  curl_setopt($ch, CURLOPT_HTTPHEADER, array('Connection: Close'));
  
  // In wamp like environments that do not come bundled with root authority certificates,
  // please download 'cacert.pem' from "http://curl.haxx.se/docs/caextract.html" and set the directory path 
  // of the certificate as shown below.
  // curl_setopt($ch, CURLOPT_CAINFO, dirname(__FILE__) . '/cacert.pem');
  if( !($res = curl_exec($ch)) ) {
      // error_log("Got " . curl_error($ch) . " when processing IPN data");
      curl_close($ch);
      exit;
  }
  curl_close($ch);
  
  
  // STEP 3: Inspect IPN validation result and act accordingly
  
  if (strcmp ($res, "VERIFIED") == 0) {
      // check whether the payment_status is Completed
      // check that txn_id has not been previously processed
      // check that receiver_email is your Primary PayPal email
      // check that payment_amount/payment_currency are correct
      // process payment
  
      // assign posted variables to local variables
      $item_name = $_POST['item_name'];
      $item_number = $_POST['item_number'];
      $payment_status = $_POST['payment_status'];
      if ($_POST['mc_gross'] != NULL)
          $payment_amount = $_POST['mc_gross'];
      else
          $payment_amount = $_POST['mc_gross1'];
      $payment_currency = $_POST['mc_currency'];
      $txn_id = $_POST['txn_id'];
      $receiver_email = $_POST['receiver_email'];
      $payer_email = $_POST['payer_email'];
      $custom = $_POST['custom'];
  
      // Insert your actions here
  
      if ($payment_status = "Completed") 
          {
          // my sql statement to update the points will go here, I don't need help
          // with that
          }
  
      if ($txn_id)
      {
  
      }
  
  } else if (strcmp ($res, "INVALID") == 0) {
      // log for manual investigation
  }
  </code></pre>
  
  <p>So this seems to be setup properly, no errors, the SQL statements I'm going to add worked just fine when I tested them, etc. My only problem is the payments. I have no idea how to have the user pay. I know how to setup paypal API and integrate paypal payments with my website... is that what I have to do? If not, then how do I allow the user to enter a custom amount, have them pay for it, and then their payment will be automatically verified by the notification url? This question may seem pretty broad, but I'm not asking anyone to write free code for me. I'm just looking for someone to point me in the right direction on this because I've searched so long and hard for this information and I can't seem to find it. All help is greatly appreciated! Thank you :)</p>