【发布时间】:2018-04-30 15:52:46
【问题描述】:
我想取消一个 cURL 请求。当用户离开页面时,请求应该被取消。
情况说明:我们正在向移动支付终端发送 cURL 请求以开始新的支付。由于我们正在等待客户输入 PIN 码,因此该请求仍处于待处理状态。输入 PIN 码后,请求将通过成功/失败来回答。例如,当客户想用现金付款时,我们想取消从服务器到支付终端的请求。
我们尝试了不同的方法,例如connection_aborted & ignore_user_abort 但没有什么能解决这个问题。
$dataString = json_encode($data);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $dataString);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: ' . strlen($dataString)
));
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_SSLCERT, certificateRoot.'/test.crt.pem');
curl_setopt($ch, CURLOPT_SSLKEY, certificateRoot.'/test.key.pem');
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$result = curl_exec($ch);
【问题讨论】:
-
嗯?尽管知道客户尚未输入所有数据,但您还是发起了 HTTP 请求(通过 cURL)?你确定这就是结构的真正含义吗?此外,HTTP 请求不会无限期地挂起,它们最终会超时,并且无法为 same 请求提供更多信息。更可能的情况是发出请求,远程支付服务响应说它没有 PIN,然后您等待用户输入,然后您再次发送请求但使用 PIN。你所描述的听起来很奇怪,甚至是不可能的。
-
请在您的问题中提供一些示例代码。就目前而言,您的问题过于开放,无法获得合理质量的答案。
-
@ADyson,实际上,请求确实有点复杂。我已经简化了方法。尽管如此,事实是我们将发送一个请求并且必须等待长达 30 秒。结果。
-
如果客户尚未决定是支付卡还是现金,和/或输入所有相关信息(如 PIN 码),您为什么要发起请求?我不明白。是什么导致 Ajax 请求启动?
-
好的,它的ajax。对我来说仍然很奇怪,因为您需要在服务器上配置非常高的超时。你不应该让 PHP 请求故意挂起,即使是轮询也不行。使用经典的 PHP+apache 设置对资源的要求非常高。
标签: php curl cancellation