触发/延迟PHP脚本处理

触发/延迟PHP脚本处理,php,triggers,delay,Php,Triggers,Delay,目前,我有一个脚本,在某人被定向到支付处理器后处理订单 支付处理者偶尔会向我的网站发送两个(或更多)回复(通常在第一次回复后一分钟内)。 我已经就这个问题联系了支付处理者;他们不认为这是他们的系统的问题,并说我的脚本应该考虑到任何额外的响应,只听最后一个发送的 在多个响应订单上,第一个响应是成功的,因此当该响应到达时,订单将被处理。 如果出现第二次响应,通常会在30秒后出现错误响应,我会取消订单。 问题是,我在第一次回复时就已经向客户发送了一封“感谢您的订单”的电子邮件,这显然是不理想的 有没有

目前,我有一个脚本,在某人被定向到支付处理器后处理订单

支付处理者偶尔会向我的网站发送两个(或更多)回复(通常在第一次回复后一分钟内)。
我已经就这个问题联系了支付处理者;他们不认为这是他们的系统的问题,并说我的脚本应该考虑到任何额外的响应,只听最后一个发送的

在多个响应订单上,第一个响应是成功的,因此当该响应到达时,订单将被处理。
如果出现第二次响应,通常会在30秒后出现错误响应,我会取消订单。
问题是,我在第一次回复时就已经向客户发送了一封“感谢您的订单”的电子邮件,这显然是不理想的

有没有办法触发一个单独的脚本在订单处理后几分钟运行?i、 e在原始订单发出几分钟后检查订单是否仍然有效,并发送电子邮件


我正在考虑一个每分钟运行一次的cron作业,但这肯定是过分了,因为脚本只需要在下单时运行?

您可以使用
shell\u exec(“/usr/bin/php/path/to/test.php.”($orderId)启动后台作业启动时延迟3分钟
(睡眠(180))$argv[2]
应包含您的订单ID号。

以下是您可以执行的操作

收到第一个响应后,使用sleep()函数让脚本等待一段时间,例如1分钟


为什么您不能在收到付款处理程序的第二个请求后更改您的邮件并用电子邮件通知某人


据我所知,您的处理器在发送第二个响应时已经在调用您站点上的某个URL。所以这是你需要的一个触发器。如果他们没有这样的回调功能-您可以安装一些cron,它将处理未完全处理的订单,检查此类订单的付款状态,并通过另一封电子邮件通知客户

我不建议这样做。web服务器将在某个时间点后终止PHP进程。它还将延迟请求。使用shell_exec生成后台进程要好得多。区别在于初始进程是PHP fastcgi或mod_PHP。使用shell_exec,您将在后台生成PHP-CLI,这不是由web服务器管理的。问题是,如果处理器出现错误响应,我不希望第一封成功电子邮件发出。@Nick您不能让用户等待几分钟,而第二封响应将出现。我并不是说要立即发送“成功”电子邮件。我的观点是,如果处理器已经触发了您的脚本,您最好等待它,然后发送成功/错误电子邮件。即使有延迟,您也会有类似的行为-一些关于付款的消息在Progress中,而不是关于成功/失败的消息。但是如果你必须做一个请求来获取信息(处理器不会调用你的url),cron应该是你需要的东西。这一切都发生在回调脚本上,接口在别处。如果站点有相当多的订单/流量,那么使用
sleep
进行延迟不会消耗内存吗?可能吧,但是如果有很多订单,那么每五分钟cron一次就可以了。(它将只检查超过五分钟且尚未检查的订单)。