Alex
Alex

Reputation: 5257

submitting the form after successful paypal money transaction using php

I've made a form. Currently this form does the following operations:

  1. customer fills up the form (creates an order)
  2. clicks on "Submit" button
  3. all form entries are entered into a database.

I'd like to change it to do the following operations:

  1. customer fills up the form
  2. in the end of the form there is a text box showing much this order will cost him.
  3. clicks on "Submit" button (if accepts the price)
  4. redirected to paypal
  5. if the payment is successful -> all form entries are entered into a database. Else -> echo "transaction failed".

Here is what I've done so far:

"form.php" contents

<html><head><title>Title</title></head><body>
<form action="php-form-processor.php" method="post">
    <table border="0" cellspacing="5" width = "500">
        <tr>
            <td align="right" width="160">Choose an Item:</td>
            <td align="left">
            <select name="formItem" value="<?=$varItem;?>" class="input_full" >
                <option value="1">Cheese</option>
            </select>
            </td>
        </tr>
        <tr bgcolor="#D0E8F5">
            <td align="right" >Item count:</td>
            <td align="left">
                <input type="text" name="formItemCount" maxlength="50" value="<?=$varItemCount = 1;?>"  class="input_full" />
            </td>
        </tr>
    </table>
    <p align="center">
    <input type="submit" name="formSubmit" align = "center" value="Submit" />
    </p>
</form></body></html>

"php-form-processor.php" contents

<?php
if($_POST['formSubmit'] == "Submit")
{
    $varItem = $_POST['formItem'];
    $varItemCount = $_POST['formItemCount'];

    //database stuff
    $username = "...";
    $password = "...";
    $hostname = "..."; 
 // connect and add to the database varItem and varItemCount
    mysql_query($sql);
    mysql_close($dbhandle);
}
?>

The form is much bigger but i've simplified the stackoverflow's version of it. The price of an order must change according to "varItem" and "varItemCount" value. Basically I want to add "Pay with PayPal" option before writing an order into the database. P.S. I've already registered paypal Sandbox account and added "Buyer" and a "Seller".

what should I do next?

EDIT: ok, so here is a small guide how to solve the problem. Here are some advises:

Whole proccess looks like this:

  1. customer fills up the form
  2. after submitting the form - all entries are written into the database + ID + 1 additional field called "payed" which represents: 1 - if customer payed for an order and 0 - if not
  3. use header("Location: URL") to redirect from Form_Processing to Paypal_Form
  4. use the "session" to write order ID into a session or use POST message
  5. submit the PaypalForm and use "custom" field as a carier for our order ID
  6. set up the listener to update the database as following: if transaction was successful -> update the database column "payed" to 1 (done). Use the ID from "custom" field to select needed order i.e.:

$sql = "UPDATE paypal_test SET payed = '1' WHERE id = '".$_POST['custom']."'";

Now we have a database with completed and non-completed forms. Additionaly you can write a logic which will remove "old" uncompleted orders. For this reason you can create additional column called "date" and then compare: if (current_date.days - old_date.days > 7) -> remove from DB. That's it!

Upvotes: 6

Views: 5276

Answers (3)

Chris K.
Chris K.

Reputation: 75

Tat late to the party....but in 2021 try this..

If you want to use a custom form in combination with paypals Smart Payment Buttons (https://developer.paypal.com/docs/checkout/) then you could try this approach. That works for me and you also don't need IPN (below approach is most current and much faster).

On your frontend use this (w/ this you can send your form data to your server):
https://developer.paypal.com/demo/checkout/#/pattern/server

On you backend use this (I put create & capture code in one file):
To create the order:
https://developer.paypal.com/docs/checkout/reference/server-integration/set-up-transaction/
To capture the order:
https://developer.paypal.com/docs/checkout/reference/server-integration/capture-transaction/
To set it up:
https://developer.paypal.com/docs/checkout/reference/server-integration/setup-sdk/

Now you can write form data to your db after paypal approved the order.

Gave similar answer here
How to submit data for the address and payment details after PayPal payment is made

Upvotes: 0

williamvicary
williamvicary

Reputation: 805

I would not accept what the PayPal post back is giving you, it's a sloppy way of checking the authentication of the user and expects the user to click the "go back to website" button. Instead use the IPN (https://www.paypal.com/ipn/) and make sure you post the response back to PayPal for verification.

Checkout this PHP example from PayPal: https://cms.paypal.com/uk/cgi-bin/?cmd=_render-content&content_ID=developer/e_howto_admin_IPNImplementation

Upvotes: 1

Peon
Peon

Reputation: 8030

Well, you pretty much already described what you need to do:

  • 1st: make an onChange javascript, that sums up the value and posts it at the place you want;
  • 2nd: do a php check of the values after submit ( make sure to also check for injection issues );
  • 3rd: redirect to paypal and wait for the answer;
  • 4th: according to paypals answer echo out the result;

PS: I hope you are not waiting for someone to actually rewrite the whole script for you ;)

Upvotes: 2

Related Questions