0
Отвечен

Invalid encoding object Cadaster/Save_order

Andrey 3 года назад обновлен Специалист Техподдержки 3 года назад 1

Добрый день. 

Получил из метода cadaster/objectInfoFull код encoded_object

Делаю запрос документов методом Cadaster/Save_order

      CURLOPT_URL => "https://apirosreestr.ru/api/cadaster/save_order",
      CURLOPT_CUSTOMREQUEST => "POST",
      CURLOPT_POSTFIELDS => "encoded_object=".urlencode($code)."&documents[]=XZP&documents[]=SOPP",&documents[]=XZP&documents[]=SOPP",
      CURLOPT_HTTPHEADER => array(
        "token: ".$apirosreestr_token
      ),
  

Возвращает ошибку:

    [error] => Array
        (
            [code] => 400
            [mess] => Bad Request
        )

В чём может быть проблема?

Могу ли я сразу 2 документа запрашивать?

Ответ

Ответ
Отвечен

Добрый день!


1. У вас в коде есть синтаксическая ошибка на строке CURLOPT_POSTFIELDS.

2. Да можете сразу 2 документа запрашивать, насчет этого вы правильно построили запрос.


Вот простой пример рабочего PHP скрипта:

<?php
# Кадастровый номер нашего объекта недвижимости.
$cadnomer = '46:29:101001:10';
# Заказываемый документ
# XZP  - Выписка из ЕГРН об объекте недвижимости
# SOPP - Выписка о переходе прав на объект недвижимости
$mydoc = 'XZP';
# Функция для вызова методов ApiRosreestr
function api($class, $params = [], $token = 'XXXX-XXXX-XXXX-XXXX') {
   $class = strtolower($class);
   $ch    = curl_init();
   curl_setopt_array($ch, [ 
      CURLOPT_POST => 1,
      CURLOPT_HTTPHEADER => ["Token: $token"],
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_FORBID_REUSE => 1, 
      CURLOPT_VERBOSE => 1,
      CURLOPT_SSL_VERIFYPEER => 0,
   ]);
   curl_setopt($ch, CURLOPT_URL, "http://apirosreestr.ru/api/$class");
   curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
   $exec = curl_exec($ch);
   $data = json_decode($exec, 1);
   if ($data && $data['error']) {
      die("Произошла ошибка - [<a href="https://apirosreestr.ru/api/#$class">$class</a>] {$data['error']['code']}, {$data['error']['mess']}");
   }
   curl_close($ch);
   return $data ?: $exec;
}
# Шаг 1/3 - Получаем характеристики объекта, цены на документы...
$info = api('Cadaster/ObjectInfoFull', ['query' => $cadnomer]);
# Проверяем доступность документа для заказа
if ($info['documents'][$mydoc]['available'] == false) {
   die('На данный объект недвижимости невозможно заказать документ - '.$mydoc);
}
# Шаг 2/3 - Оформляем заказ
$save = api('Cadaster/Save_order', ['encoded_object' => $info['encoded_object'], 'documents' => [$mydoc], 'comment' => 'тестовый заказ']);
// Если заказ оплачен, т.е. у нас тариф не "Базовой"
if ($save['paid'] == true) {
   die("Заказ оформлен и передан в обработку. Номер заказа ".$save['transaction_id'].", номер документа в заказе ".$save['documents_id'][$mydoc]);
} 
// Если заказ ожидает оплаты, т.е. если тариф у нас "Базовой"
else {
   # Пытаемся оплатить с лицевого счета
   # Шаг 3/3 - Получаем перечень всех возможных способов оплаты
   $trans = api('Transaction/info', ['id' => $save['transaction_id']]);
  
   // Если оплата с лицевого счета разрешена
   if ($trans['pay_methods']['PA']['allowed'] == true) {
      // Если достаточно средств на счете
      if ($trans['pay_methods']['PA']['sufficient_funds'] == true) {
         # Подтверждаем оплату
         $pay = api('Transaction/pay', ['id' => $save['transaction_id'], 'confirm' => $trans['pay_methods']['PA']['confirm_code']]);
         
         // Если оплата прошла успешно
         if ($pay['paid'] == true) {
            die("Заказ оплачен и передан в обработку. Номер заказа ".$save['transaction_id'].", номер документа в заказе ".$save['documents_id'][$mydoc]);
         } else {
            die('Не удалось оплатить заказ.');
         }
      } else {
         die('Недостаточно средств на лицевом счете. Воспользуйтесь другими способами оплаты.');
      }
   } else {
      die('Оплата с лицевого счета не допускается для этого заказа.');
   }
}
?>
Ответ
Отвечен

Добрый день!


1. У вас в коде есть синтаксическая ошибка на строке CURLOPT_POSTFIELDS.

2. Да можете сразу 2 документа запрашивать, насчет этого вы правильно построили запрос.


Вот простой пример рабочего PHP скрипта:

<?php
# Кадастровый номер нашего объекта недвижимости.
$cadnomer = '46:29:101001:10';
# Заказываемый документ
# XZP  - Выписка из ЕГРН об объекте недвижимости
# SOPP - Выписка о переходе прав на объект недвижимости
$mydoc = 'XZP';
# Функция для вызова методов ApiRosreestr
function api($class, $params = [], $token = 'XXXX-XXXX-XXXX-XXXX') {
   $class = strtolower($class);
   $ch    = curl_init();
   curl_setopt_array($ch, [ 
      CURLOPT_POST => 1,
      CURLOPT_HTTPHEADER => ["Token: $token"],
      CURLOPT_RETURNTRANSFER => 1,
      CURLOPT_FORBID_REUSE => 1, 
      CURLOPT_VERBOSE => 1,
      CURLOPT_SSL_VERIFYPEER => 0,
   ]);
   curl_setopt($ch, CURLOPT_URL, "http://apirosreestr.ru/api/$class");
   curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($params));
   $exec = curl_exec($ch);
   $data = json_decode($exec, 1);
   if ($data && $data['error']) {
      die("Произошла ошибка - [<a href="https://apirosreestr.ru/api/#$class">$class</a>] {$data['error']['code']}, {$data['error']['mess']}");
   }
   curl_close($ch);
   return $data ?: $exec;
}
# Шаг 1/3 - Получаем характеристики объекта, цены на документы...
$info = api('Cadaster/ObjectInfoFull', ['query' => $cadnomer]);
# Проверяем доступность документа для заказа
if ($info['documents'][$mydoc]['available'] == false) {
   die('На данный объект недвижимости невозможно заказать документ - '.$mydoc);
}
# Шаг 2/3 - Оформляем заказ
$save = api('Cadaster/Save_order', ['encoded_object' => $info['encoded_object'], 'documents' => [$mydoc], 'comment' => 'тестовый заказ']);
// Если заказ оплачен, т.е. у нас тариф не "Базовой"
if ($save['paid'] == true) {
   die("Заказ оформлен и передан в обработку. Номер заказа ".$save['transaction_id'].", номер документа в заказе ".$save['documents_id'][$mydoc]);
} 
// Если заказ ожидает оплаты, т.е. если тариф у нас "Базовой"
else {
   # Пытаемся оплатить с лицевого счета
   # Шаг 3/3 - Получаем перечень всех возможных способов оплаты
   $trans = api('Transaction/info', ['id' => $save['transaction_id']]);
  
   // Если оплата с лицевого счета разрешена
   if ($trans['pay_methods']['PA']['allowed'] == true) {
      // Если достаточно средств на счете
      if ($trans['pay_methods']['PA']['sufficient_funds'] == true) {
         # Подтверждаем оплату
         $pay = api('Transaction/pay', ['id' => $save['transaction_id'], 'confirm' => $trans['pay_methods']['PA']['confirm_code']]);
         
         // Если оплата прошла успешно
         if ($pay['paid'] == true) {
            die("Заказ оплачен и передан в обработку. Номер заказа ".$save['transaction_id'].", номер документа в заказе ".$save['documents_id'][$mydoc]);
         } else {
            die('Не удалось оплатить заказ.');
         }
      } else {
         die('Недостаточно средств на лицевом счете. Воспользуйтесь другими способами оплаты.');
      }
   } else {
      die('Оплата с лицевого счета не допускается для этого заказа.');
   }
}
?>

Сервис поддержки клиентов работает на платформе UserEcho