Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Creating a ordering and checkout system, protecting against changing the cart during payment

Tags:

php

e-commerce

So I have a multi paged checkout system that relies on sessions to store the contents of the shopping cart. I'm also using a third party system to process credit cards, which hosts the actual payment page on their servers. I just have to POST to the page the final total.

The problem I foresee is what if someone clicks to go to the hosted pay page, and then for some legitimate or nefarious reason changes the shopping cart contents in another tab. I had initially planned that when the hosted pay page redirects back to my receipt page I would then INSERT the order into my database. But, if the session is changed at that point, the order will be different from the total cost charged.

What would be a solution to this problem. I can see this sort of thing being an issue for all cart systems, so I'm wondering how they do it.

Maybe when the user clicks the button to go to the hosted paypage I can make a temporary order entry in a temp_order table in the database, and then when the payment goes through I can transfer that temp record into the permanent record table? That way I don't insert the record from the session information that has changed. But if I have to POST to the hosted pay page, where do I have the opportunity to save the shopping cart to the temp table?

Also, the temp order id must be unique across both temp and permanent tables since I don't want any overlap.

Lastly, I should want to clear the temp order table frequently as they are just temp records. Some might not go through as the user could change their mind on the hosted pay page.

I'm really confused as to what I should do!

like image 501
Adam Avatar asked Oct 06 '22 11:10

Adam


1 Answers

I see no need to create a separate table. Just add one column into existing table, say, payment_in_progress and analyse it when client submits any changes to the cart.

The requirement to clear out unprocessed outdated orders remains

like image 50
Serge Avatar answered Oct 09 '22 02:10

Serge