Задать вопрос
@danilapon

Почему одинаково-написанный curl запрос отдает разные ответы?

Столкнулся с проблемой двойственной интерпретации одного и того же сURL запроса к API amoCRM. Сам запрос выглядит так:
$data = [
            [
                'entity_id' => $_POST['leads']['status']['0']['id'],
                'note_type' => 'common',
                'params' => [
                    'text' => 'Пароль перезаписан...'
                ]
            ]
        ];
        $ch = curl_init('https://{домен}.amocrm.ru/api/v4/leads/notes');
        curl_setopt($ch, CURLOPT_HTTPHEADER, $AMOheader);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        $res = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $error = curl_error($ch);
        curl_close($ch);


Логирование $res в файл показывает что если запустить этот код в отдельном файле то все срабатывает и получаю ответ 200 и вижу новую сущность в самом сервисе, однако если он исполняется в теле основного кода (причем логирование $data до самого POST-запроса показывает что пустых полей нет) то приходит 400:
{"title":"Bad Request","type":"https://httpstatus.es/400","status":400,"detail":"This value should not be null."}


Полный код выглядит так:
<?php
require __DIR__ . '/PasswordGen.php';
$passwordGen = new passwordGen(9, 13);
$OAtoken = __DIR__ . '/../{Ключи}';
$OAheader = [
    'Content-Type: application/json',
    'Authorization: Bearer ' . file_get_contents($OAtoken)
];
$AMOtoken = __DIR__ . '/../{Ключи}';
$AMOheader = [
    'Content-Type: application/json',
    'Authorization: Bearer ' . file_get_contents($AMOtoken)
];
$headers = getallheaders();
$output = [];

if ($headers['User-Agent']!=='amoCRM-Webhooks/3.0'){
    echo 'Unverified request, aborting...';
    return;
}

if ($_POST['leads']['status']['0']['pipeline_id']=={ID} && $_POST['leads']['status']['0']['status_id']=={ID}){
    $ch = curl_init('https://{домен}.amocrm.ru/api/v4/leads/' . $_POST['leads']['status']['0']['id']);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $AMOheader);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    $res = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error($ch);
    curl_close($ch);
    $resdec = json_decode($res, true);

    foreach ($resdec['custom_fields_values'] as $key => $value){
        if ($value['field_id']!=={ID}){
            continue;
        }else{
            $email = $value['values']['0']['value'];
        }
    }
    foreach ($resdec['custom_fields_values'] as $key => $value){
        if ($value['field_id']!=={ID}){
            continue;
        }else{
            $company = $value['values']['0']['value'];
        }
    }
    foreach ($resdec['custom_fields_values'] as $key => $value){
        if ($value['field_id']!=={ID}){
            continue;
        }else{
            $ID = $value['values']['0']['value'];
        }
    }

    $ch = curl_init('https://pro.oawms.com/api/users/users?per_page=25&page=1&order-by%5B0%5D%5Btype%5D=field&order-by%5B0%5D%5Bfield%5D=created&order-by%5B0%5D%5Bdirection%5D=desc&filter%5B0%5D%5Btype%5D=eq&filter%5B0%5D%5Bvalue%5D=active&filter%5B0%5D%5Bfield%5D=state&filter%5B1%5D%5Btype%5D=eq&filter%5B1%5D%5Bvalue%5D=' . $email . '&filter%5B1%5D%5Bfield%5D=email');
    curl_setopt($ch, CURLOPT_HTTPHEADER, $OAheader);
    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HEADER, false);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
    $OAres = curl_exec($ch);
    $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
    $error = curl_error($ch);
    curl_close($ch);
    $OAresdec = json_decode($OAres, true);

    if ($OAresdec['_embedded']['user']==[]){данное условие не срабатывает}
        else{
        $OAID = $OAresdec['_embedded']['user']['0']['id'];
        $data = [
            'password' => htmlspecialchars($passwordGen->generate())
        ];
        $OAPass = $data['password'];
        $ch = curl_init('https://pro.oawms.com/api/users/users/' . $OAID);
        curl_setopt($ch, CURLOPT_HTTPHEADER, $OAheader);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        $res = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $error = curl_error($ch);
        curl_close($ch);

        // НАЧАЛО ПРОБЛЕМНОГО УЧАСТКА
$data = [
            [
                'entity_id' => $_POST['leads']['status']['0']['id'],
                'note_type' => 'common',
                'params' => [
                    'text' => 'Пароль перезаписан...'
                ]
            ]
        ];
        $ch = curl_init('https://{домен}.amocrm.ru/api/v4/leads/notes');
        curl_setopt($ch, CURLOPT_HTTPHEADER, $AMOheader);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        $res = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $error = curl_error($ch);
        curl_close($ch);
// ВОЗНИКАЕТ ОШИБКА,

        $data = [
            [
                'id' => $_POST['leads']['status']['0']['id'],
                'custom_fields_values' => [
                    [
                        'field_id' => 1151761,
                        'values' => [
                            [
                                'value' => $OAID
                            ]
                        ]
                    ],
                    [
                        'field_id' => 1151755,
                        'values' => [
                            [
                                'value' => $OAPass
                            ]
                        ]
                    ]
                ],
                'status_id' => 65941234
            ]
        ];
        $ch = curl_init('https://{домен}.amocrm.ru/api/v4/leads');
        curl_setopt($ch, CURLOPT_HTTPHEADER, $AMOheader);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data, JSON_UNESCAPED_UNICODE));
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($ch, CURLOPT_HEADER, false);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
        $res = curl_exec($ch);
        $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
        $error = curl_error($ch);
        curl_close($ch);
// ВОЗНИКАЕТ АНАЛОГИЧНАЯ ОШИБКА
        return;
    }
}
  • Вопрос задан
  • 216 просмотров
Подписаться 1 Средний 10 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект