cURL повторная отправка при ошибке

joylord

Степной Волк
Регистрация
27 Дек 2012
Сообщения
321
Реакции
175
Привествую!
использую сервис leeloo для отправки уведомлений и сообщений пользователям сайта, которые подписались на воронку.
Использую cURL для отправки через API
Стоит ограничение - 50 запросов в минуту, и если запросов больше, выдает ошибку.
Too many requests, please try again later.


Есть несколько функций по отправке

PHP:
function send_message() { //send message to leeloo API
     
        $text = 'text';
        $user_data = get_userdata($user_id); 
        $accountId = $user_data->user_login;
     
        $token = 'TOKEN';
        $link = 'https://api.leeloo.ai/api/v1/messages/send-message';
        $Data['text'] = $text;
        $Data['account_id'] = $accountId;
        $DataOK = json_encode($Data);
        $descriptor = curl_init($link);
        curl_setopt($descriptor, CURLOPT_POSTFIELDS, $DataOK);
        curl_setopt($descriptor, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($descriptor, CURLOPT_HTTPHEADER, array('Content-Type: application/json','X-Leeloo-AuthToken: '.$token));
        curl_setopt($descriptor, CURLOPT_CUSTOMREQUEST, 'POST');
        $itog = curl_exec($descriptor);
     
        $err = curl_error($descriptor);
     
        if ($err) {
          echo "cURL Error #:" . $err;
        } else {
          echo $itog;
        }
     
        curl_close($descriptor);
        return $itog;
    }
send_message();


PHP:
    function create_order() { //create order
      
        //$date = gmdate("Y-m-d H:i:s");
        $token = 'TOKEN';
        $link = 'https://api.leeloo.ai/api/v1/orders';
      
      
        //$Data['text'] = $text;
        $Data['paymentCreditsId'] = 'ORDER ID';
        $Data['email'] = 'test@i.ua';
        $Data['phone'] = '+380671111111';
        $Data['transactionDate'] = gmdate("Y-m-d H:i:s");
        $Data['offerId'] = 'OFFER ID';
        $Data['accountId'] = 'USER ID';
        $Data['isNotifyAccount'] = 'true';
      
        $DataOK = json_encode($Data);
        $descriptor = curl_init($link);
        curl_setopt($descriptor, CURLOPT_POSTFIELDS, $DataOK);
        curl_setopt($descriptor, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($descriptor, CURLOPT_HTTPHEADER, array('Content-Type: application/json','X-Leeloo-AuthToken: '. $token));
        curl_setopt($descriptor, CURLOPT_CUSTOMREQUEST, 'POST');
        $itog = curl_exec($descriptor);
        $err = curl_error($descriptor);
        if ($err) {
          echo "cURL Error #:" . $err;
        } else {
          echo $itog;
        }

        curl_close($descriptor);
        return $itog;

    }
  
    create_order();

Ответ, при успешной отправке
JavaScript:
{"data":{},"status":1}
Подскажите, как отправить еще раз запрос, если он не был успешно отправлен?
 
Ну наподобие
if (status !=1) {
send_message();
create_order();
}
 
You may want to also add a delay before sending the next request to avoid the rate limit
 
весь вопрос в том, как распарсить JSON ответа?

Код:
$itog = create_order();
$result = json_decode($itog, true);
if (!$result['status]) {
  create_order();
}
 
Привет! У тебя же есть условие отработки cURL.

PHP:
if ($err) {
          echo "cURL Error #:" . $err;
        } else {
          echo $itog;
        }


Я бы посоветовал при ошибке заново вызывать эту-же функцию.
С этим могут возникнуть проблемы?
 
Советовал бы забрасывать в цикл таким образом:
$i = 0;
while($i != 0) {
/// ВАШ КОД, в нем при успешном выполнении вставьте $i++; если нет, то false, и код будет выполняться по-новому пока задача точно не будет решена
}
 
Назад
Сверху