За последние 24 часа нас посетили 45233 программиста и 9886 роботов. Сейчас ищут 2024 программиста ...

Curl

Тема в разделе "PHP для новичков", создана пользователем LevshaSZR, 7 авг 2017.

  1. LevshaSZR

    LevshaSZR Новичок

    С нами с:
    19 май 2015
    Сообщения:
    17
    Симпатии:
    0
    Здравствуйте!
    Подскажите пожалуйста как вот сюда передать переменную? Приведенный пример не работает
    Код (Text):
    1. curl_setopt($ch, CURLOPT_POSTFIELDS,  '{
    2.     "params":{
    3.         "Timestamp": $resTimestamp
    4.     }
    5. }');
     
  2. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    638
    Симпатии:
    380
    кавычки смени на двойные
     
    LevshaSZR нравится это.
  3. LevshaSZR

    LevshaSZR Новичок

    С нами с:
    19 май 2015
    Сообщения:
    17
    Симпатии:
    0
    не работает так. Если вручную вписываю значение "Timestamp": "2017-07-26T11:00:54Z" то все работает. А если вписываю переменную то вот такую ошибку выдает
    Код (Text):
    1. Array
    2. (
    3.     [error] => Array
    4.         (
    5.             [error_code] => 8000
    6.             [request_id] => 601721859367851324
    7.             [error_string] => Invalid request
    8.             [error_detail] => JSON can't be processed
    9.         )
    10.  
    11. )
     
  4. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Покажи, как сделал.
    Ещё можно вывести эту строку в браузер/консоль, посмотреть, что в ней не так, когда её php формирует.
     
  5. LevshaSZR

    LevshaSZR Новичок

    С нами с:
    19 май 2015
    Сообщения:
    17
    Симпатии:
    0
    PHP:
    1. $resTimestamp = "2017-07-26T11:00:54Z";
    2. $ch = curl_init();
    3. //Отслеживание изменения с помощью сервиса Changes
    4. // Указываем параметры, включая url
    5. curl_setopt($ch, CURLOPT_URL,'https://api-sandbox.direct.yandex.com/json/v5/changes');
    6. curl_setopt($ch, CURLOPT_POST, 1);
    7. curl_setopt($ch, CURLOPT_POSTFIELDS,  '{
    8.    "method":"checkCampaigns",
    9.    "params":{
    10.        "Timestamp": $resTimestamp
    11.    }
    12. }');
    13.   //Post Fields
    14. curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    15. $headers = array(
    16.     'POST /json/v5/changes/ HTTP/1.1',
    17.     'Host: api-sandbox.direct.yandex.com',
    18.     'Authorization: Bearer @@@@@J5djrAARfTTzPb3PvbEg9vMVqo@@@@@',
    19.     'Accept-Language: en',
    20.     'Client-Login:  avtomig-ekb',
    21.     'Content-Type: application/json; charset=utf-8',
    22. );
    23. //Получаем список компаний в которых произошли изминения
    24. curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    25. $server_output = curl_exec ($ch);
    26. //Преобразуем в массив
    27. $server_output2 = json_decode($server_output, true);
    28.  
    29.  
    30. curl_close ($ch);
     
    #5 LevshaSZR, 7 авг 2017
    Последнее редактирование модератором: 7 авг 2017
  6. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    638
    Симпатии:
    380
    Я же тебе написал в чем проблема,поменяй на двойные кавычки,в одинарных кавычках значение
    переменной не будет доступно
     
    LevshaSZR нравится это.
  7. LevshaSZR

    LevshaSZR Новичок

    С нами с:
    19 май 2015
    Сообщения:
    17
    Симпатии:
    0
    А если переменную заключаю в двойные кавычки то получаю ответ
    Код (Text):
    1. Array
    2. (
    3.     [error] => Array
    4.         (
    5.             [error_detail] => In parameter Timestamp the date must be specified in the format YYYY-MM-DDThh:mm:ssZ
    6.             [error_code] => 4000
    7.             [error_string] => Invalid request parameters
    8.             [request_id] => 603228277869224142
    9.         )
    10.  
    11. )
    --- Добавлено ---
    так?
    Код (Text):
    1. curl_setopt($ch, CURLOPT_POSTFIELDS, "{
    2.     'method':'checkCampaigns',
    3.     'params':{
    4.         'Timestamp': $resTimestamp
    5.     }
    6. }");
     
  8. alexblack

    alexblack Старожил

    С нами с:
    20 янв 2016
    Сообщения:
    638
    Симпатии:
    380
    Пробуй
    PHP:
    1. curl_setopt($ch, CURLOPT_POSTFIELDS,  "{
    2.    \"params\":{
    3.        \"Timestamp\": $resTimestamp
    4.    }
    5. }");
     
    LevshaSZR нравится это.
  9. LevshaSZR

    LevshaSZR Новичок

    С нами с:
    19 май 2015
    Сообщения:
    17
    Симпатии:
    0
    не работает(
     
  10. LevshaSZR

    LevshaSZR Новичок

    С нами с:
    19 май 2015
    Сообщения:
    17
    Симпатии:
    0
    Да, ты был прав, вот так работает
    PHP:
    1. curl_setopt($ch, CURLOPT_POSTFIELDS, "{
    2.    \"method\":\"checkCampaigns\",
    3.    \"params\":{
    4.        \"Timestamp\": \"$resTimestamp\"
    5.  
    6.    }
    7. }");
    Тему можно считать закрытой!
     
  11. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.870
    Симпатии:
    955
    Мож тогда лучше через хирдок чтоб вот этого поваленного леса экранирований не было?
     
    mkramer нравится это.
  12. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.841
    Симпатии:
    1.338
    Адрес:
    Лень
    PHP:
    1.    'method' => 'checkCampaigns',
    2.    'params' => [
    3.       'Timestamp' => $resTimestamp
    4.    ]
    5. ] );
     
    mkramer нравится это.