У меня есть PHP-скрипт, который использует cURL для отправки полезной информации XML поставщику услуг SMS. Проблема заключается в том, что пользователи жалуются, что получают несколько SMS-сообщений (например, иногда 50 в течение дня), и я не знаю, является ли это проблемой для моего кода или у поставщика услуг SMS. Форма, которая отправляет это, доступна только кому-то, кто не будет отправлять сообщения более одного раза.cURL - скрипт, отправляющий несколько нежелательных запросов
Это мой код, и я был бы очень признателен, если кто-то может иметь быстрый взгляд на это, чтобы увидеть, если я пропускаю важный вариант, который, если не хватает, будет отправлять несколько запросов:
<?php
// the following code is only executed if there is no sms timestamp in the db for the user. sms timestamp is added to the db when $error != true;
$error = false;
define('XML_PAYLOAD', '<xml data...>');
define('XML_POST_URL', 'https://URLOFSERVICEPROVIDER');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, XML_POST_URL);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
curl_setopt($ch, CURLOPT_TIMEOUT, 5);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, XML_PAYLOAD);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml; charset=utf-8', 'Content-Length: '.strlen(XML_PAYLOAD)));
$result = curl_exec($ch);
if (curl_errno($ch)) {
$error = true;
} else {
$returnCode = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE);
switch($returnCode){
case 200:
break;
default:
$error = true;
break;
}
}
curl_close($ch);
if($error == false){
// store that SMS was sent successfully
}
?>
Я думаю, что ваш тайм-аут очень низок. Вы можете проверить его, увеличившись, по крайней мере, до 30 секунд, поскольку какое-то время процесс занимает время при вычислении загрузки валидации и многих других вещах. – Vineet1982
Я не вижу никаких проверок в вашем коде, где вы проверяете, отправлено ли SMS уже или не. Пользователи могут просто нажать кнопку отправки несколько раз, потому что они нетерпеливы. – hakre
@hakre извините, я проверяю, но не добавил кодировку. Когда '$ error' является ложным, я сохраняю метку времени в db. Код, который я опубликовал, выполняется только в том случае, если метка времени не найдена. – SammyBlackBaron