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

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

0 голосов
/ 30 апреля 2018

Я хотел бы отменить запрос 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 Ответ

0 голосов
/ 30 апреля 2018

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

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

Вместо использования привязок 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)

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

...