Отменить запрос cURL

Я хотел бы отменить запрос cURL. Запрос должен быть отменен, когда пользователь покидает страницу.

Объяснение ситуации: мы отправляем запрос cURL на мобильный платежный терминал, чтобы начать новый платеж. Запрос все еще находится на рассмотрении, так как мы ожидаем, что клиент введет пин-код. Когда пин-код введен, на запрос будет дан ответ с успехом / неудачей. Мы хотели бы отменить запрос от сервера к платежному терминалу, когда, например, клиент хочет заплатить наличными.

Мы пробовали разные подходы, например 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);

-1

Решение

Вот мое предложение, если вам действительно нужно это сделать. Я уверен, что вы подходите к этой интеграции неправильно, и я искренне рекомендую вам перечитать предоставленную вам документацию.

Что вы МОЖЕТЕ сделать:

Вместо использования привязок cURL в PHP вы можете использовать вызов exec для вызова двоичного файла curl, взять pid и сохранить его в сеансе.

$json_body = escapeshellarg(json_encode($data));
$pid = shell_exec("(curl https://dodgy-payment-vendor.com/api/foobar -XPOST -d $json_body > /dev/null 2>/dev/null) & echo \$!");

Затем, когда пользователь отменяет, вы просто убиваете процесс.

posix_kill($pid, 9) (Если у вас нет расширения posix, тогда, возможно, просто используйте другой shell_exec с соответствующей командой kill под вашей конкретной ОС … Да, и echo $! Не будет работать для получения PID под Windows)

Но я действительно рекомендую вам переосмыслить то, что вы делаете. Многие плохие вещи могут возникнуть из-за использования системных вызовов, когда они не совсем уместны, поэтому будьте уверены, что вы сериализуете, очищаете и экранируете любые данные, которые будете отправлять должным образом, если вы пойдете по этому пути!

1

Другие решения

Других решений пока нет …