Столкнулся с проблемой двойственной интерпретации одного и того же с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;
}
}