Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 创建订购和结帐系统,防止在付款期间更改购物车_Php_E Commerce - Fatal编程技术网

Php 创建订购和结帐系统,防止在付款期间更改购物车

Php 创建订购和结帐系统,防止在付款期间更改购物车,php,e-commerce,Php,E Commerce,所以我有一个多页面的结账系统,它依靠会话来存储购物车的内容。我还使用第三方系统处理信用卡,它在服务器上托管实际的支付页面。我只需要把最终的总数发布到页面上 我预见到的问题是,如果有人点击进入托管的支付页面,然后出于某种合法或邪恶的原因更改另一个选项卡中的购物车内容,该怎么办。我最初计划,当托管支付页面重定向回我的收据页面时,我会将订单插入我的数据库。但是,如果此时更改会话,则顺序将不同于所收取的总成本 这个问题的解决方案是什么。我可以看到所有购物车系统都存在这种问题,所以我想知道他们是如何做到的

所以我有一个多页面的结账系统,它依靠会话来存储购物车的内容。我还使用第三方系统处理信用卡,它在服务器上托管实际的支付页面。我只需要把最终的总数发布到页面上

我预见到的问题是,如果有人点击进入托管的支付页面,然后出于某种合法或邪恶的原因更改另一个选项卡中的购物车内容,该怎么办。我最初计划,当托管支付页面重定向回我的收据页面时,我会将订单插入我的数据库。但是,如果此时更改会话,则顺序将不同于所收取的总成本

这个问题的解决方案是什么。我可以看到所有购物车系统都存在这种问题,所以我想知道他们是如何做到的

也许当用户点击按钮转到托管付款页时,我可以在数据库的临时订单表中创建临时订单条目,然后在付款完成时,我可以将临时记录转移到永久记录表中?这样我就不会插入已更改的会话信息中的记录。但是如果我必须发布到托管的支付页面,我在哪里有机会将购物车保存到临时表

此外,临时订单id在临时表和永久表中都必须是唯一的,因为我不希望有任何重叠

最后,我应该经常清除临时订单表,因为它们只是临时记录。有些可能无法通过,因为用户可能会在托管的支付页面上改变主意


我真不知道该怎么办

我认为没有必要创建单独的表。只需在现有表中添加一列,例如,
payment\u in\u progress
,并在客户向购物车提交任何更改时对其进行分析


清除未处理的过期订单的要求仍然存在

,除非支付系统在订单最终处理之前将控制权返还给您的网站,例如,像PayPal Express结帐一样,无法控制结帐过程。单向结账系统实际上是单向的。后续管理是手动(通过付款收据)或通过服务器到服务器通知进行处理

一旦你提交到其他网站,直接发布到支付网站不会给你任何控制权。可能最好的情况是,您将订单作为未付订单提交到您的网站,然后将其作为未付订单提交到数据库中,然后提供一个页面,上面写着“您几乎完成了。继续付款。”——此时,您还应该清空客户的购物车,以便他们无法更改正在处理的订单的任何内容(该订单已经在您的数据库中)。当支付系统重定向回您的网站时,您只需查找未付款订单并将其标记为已付款。验证支付金额也是一个好主意,以防用户修改POST数据以减少支付

编辑:

你可能真的需要一个支付网关解决方案,让你更多地控制结帐过程。您的担忧是真实存在的,但通常无法通过支付流将用户直接从您的网站发送出去,而无需首先设置交易服务器端。当支付网关返回时,只需将收到的金额存储在购物车上,如果收到的金额小于总金额,将它们放回支付页面,显示剩余的未付余额。

Moneris。这是一家加拿大公司。现在,如果不需要的话,我不想再增加一个步骤。那么,有没有一种方法可以将记录添加到数据库中,并在同一次单击中发布到托管的支付页面?我知道有一个重定向并使用javascript手动提交帖子,但是有一个“更安全”的方法吗?你不能发布到两个不同的URL,但是你可以删除额外的步骤,但在“验证”步骤中将购物车记录在数据库中(你有吗?)并让验证页面直接提交到付款。当用户加载验证页面时插入,然后单击“验证”我将发布到托管的付款页面?或者你的意思是单击“验证”插入,然后使用javascript提交到支付页面?当用户点击移动到支付页面时,我想插入并清除会话,因为如果他们仍然在网站上,他们可能想返回进行更改。我的意思是向他们显示验证页面,然后有一个按钮,上面写着“继续支付”,它真正提交到支付网关。不幸的是,这并没有给你一个清除会话的机会,所以验证和支付网关之间的页面可能确实是必要的。也许你最好的选择是向Moneris咨询,看看他们是否也能接受GET。然后你可以提交给自己,记录付款,并重定向到他们。我在我的答案中添加了一段,这可能会引起你的兴趣。您正在使用的网关可能没有提供您想要的控制级别。这确实增加了比您可能意识到的更多的问题。许多用户会觉得他们已经付费了,不太可能继续。购物车应该在付款开始时被“冻结”,这样用户在这种情况下首先就无法进入。@jimp用户进入问题的唯一原因是他们试图欺骗系统。如果他们已经支付了全部金额,那么他们将在订单确认页面结束,并且不知道有什么不同。收到全额付款后,请清除会话,以便他们无法编辑购物车。如果用户也在另一个选项卡中编辑购物车,他们将陷入这种情况。值得思考。如果用户转到付款页面并被拒绝,是否需要清除该标志?如果用户转到付款页面并点击后退按钮,您将如何处理