![]() |
![]() |
![]() |
|
forbidden 403 при POST-запросе к REST API 1c 8.3 | ☑ | ||
---|---|---|---|---|
0
mistermadness
02.02.20
✎
09:13
|
Добрый день! Имею 1с 8.3 БП в облаке сервис 1cfresh. Обращаюсь к REST API через PHP Guzzle-клиент след образом
class OneCData { private $client; private $server; private $login; private $pass; public function __construct() { $this->client = new \GuzzleHttp\Client(['auth' => ['хххххх', 'ххххх']]); $this->server = 'https://1cfresh.com/a/ea/1020368/odata/standard.odata'; } /** @param string $method1C Метод в 1С, например "Document_ПоступлениеТоваровУслуг" @param array $data Массив данных который надо отправить в 1C @param string $method HTTP метод @param null $guid ID сущности в 1C @param array $params Фильтры @throws RequestException @return array */ public function sendData($method1C, $data, $method = 'GET', $guid = null, array $params = []){ $client = $this->client; if (!empty($guid)) { $guid = "guid'$guid'"; } $url = $this->getUrl($method1C."($guid)", $params); echo $url.'<br />'; try { $res = $client->request($method, $url, [ 'json' => $data ]); $content = $res->getBody()->getContents(); return json_decode($content, true); } catch (\GuzzleHttp\Exception\ClientException $e) { //throw new \GuzzleHttp\Exception\ClientException($e->getResponse()->getBody()->getContents()); echo $e->getResponse()->getBody()->getContents(); } catch (\GuzzleHttp\Exception\RequestExceptionGuzzle $e) { //throw new \GuzzleHttp\Exception\RequestException($e->getResponse()->getBody()->getContents()); echo $e->getResponse()->getBody()->getContents(); } } /** @param string $method @param array $params @return string */ public function getUrl($method, array $params = []){ $url = $this->server.'/'.$method.'?$format=json;odata=nometadata'; foreach ($params as $name => $value) { $url .= '&'.$name.'='.$value; } return $url; } } $req = array( 'DataVersion' => 'AAAAAAAAAAA=', 'Posted' => false, 'Number' => 'РН-100', 'Date' => date('Y-m-d', time()).'T'.date('H:i:s', time()), 'СпособЗачетаАвансов' => 'Автоматически', 'ВидОперации' => 'Товары', 'Организация_Key' => '3742dc60-41b2-11ea-d689-fa163e51b5f9', 'Контрагент_Key' => '478e193c-4332-11ea-c09e-fa163e51b5f9', 'Склад_Key' => '37d7fcf8-f79f-11e9-829c-0242c0a8c005', 'ВалютаДокумента_Key' => 'ee8de508-f79e-11e9-a889-0242c0a8c005', 'Товары' => array( 'LineNumber' => 1, 'Ref_Key' => '48ddeef2-4297-11ea-c09e-fa163e51b5f9', 'Количество' => 2, 'Цена' => 600, 'Сумма' => 1200, 'ПроцентСкидки' => 0, 'СуммаСкидки' => 0, 'СтавкаНДС' => 'БезНДС', 'СуммаНДС' => 0, ), 'СуммаДокумента' => 1200 ); $method1C = 'Document_РеализацияТоваровУслуг'; $method = 'POST'; $res = $oneCData->sendData($method1C, $req, $method); Данный код был найден на данном форуме. Вот только проблема в том, что когда я отправляю GET-запрос, я вижу информацию, но когда я делаю POST-запрос (в данном случае я пытаюсь создать документ реализацию), то получаю ответ 403 Forbidden. Подскажите, пожалуйста, что я могу делать не так? Заранее, спасибо. |
|||
1
ДенисЧ
02.02.20
✎
09:16
|
Правов нет?
|
|||
2
mistermadness
02.02.20
✎
09:37
|
О каких именно правах идет речь? Я прошел Администрирование -> Синхронизация данных -> Настройки стандартного интерфейса oData. Вкладку авторизация я не трогал, а вот во вкладке Состав нажал Загрузить метаданные и отметил галочки везде. Еще какие-то права надо предоставить?
|
|||
3
mistermadness
02.02.20
✎
09:57
|
Так же в настройках пользователей и поставил галочку Синхронизация данных с другими программами.
|
|||
4
craxx
02.02.20
✎
11:01
|
(0) авторизацию на той стороне не проходишь. Видимо надо как-то передавать логин-пароль в 1С
|
|||
5
mistermadness
02.02.20
✎
11:31
|
А как передавать? Нигде ничего не написано...
|
|||
6
acht
02.02.20
✎
11:56
|
(5) > Нигде ничего не написано...
А откуда вообще идея о том, что на 1совский фреш можно вот так информацию заливать? Насколько помню там вообще отдельный АПИ для интеграции. Ну и традиционный вопрос - а что по этому поводу говорит поддержка фреша? Если у вас собственный инстанс технологии сервиса, то все вопросы к вашим апачам. Хотя $this->server = 'https://1cfresh.com/a/ea/1020368/odata/standard.odata'; говорит об обратном. |
|||
7
mistermadness
02.02.20
✎
12:19
|
Написано у них прямо в разделе администрирование, что есть и поддерживается.
|
|||
8
acht
02.02.20
✎
20:52
|
(7) Тогда проверяй права. Права пользователя 1С, под которым одата дергается, на создание в базе документа реализации.
|
|||
9
mistermadness
03.02.20
✎
11:10
|
Заметил интересную вещь. Если в URL вместо https сделать http, то уже не получаю 403 forbidden, но и документ не создается.
|
|||
10
Cyberhawk
03.02.20
✎
11:13
|
Вся одата где-то с 8.3.5+ по умолчанию закрыта
|
|||
11
Cyberhawk
03.02.20
✎
11:13
|
(7) Покажи на картинке, где и что написано
|
|||
12
mistermadness
03.02.20
✎
11:59
|
Итак, захожу в облаке в 1с БП. Далее прохожу в Администрирование, далее Синхронизация данных, Далее Настройка стандартного интерфейса OData. Далее во вкладке состав нажимаю загрузить метаданные и отмечаю галочками необходимые документы. Вот картинка, где уже расписано, что все это есть и ниже там еще ссылочка Информация для разработчиков. Где это все заявлено. Ссылка на картинку https://dev.doktormobil.ru/screen.png. Далее я нажимаю сохранить. GET-запрос могу прочитать данные, а вот POST-зпрос, если с https, то 403 forbidden, если с http, то просто мне все документы возвращает, но ничего не создается.
|
|||
13
Cyberhawk
03.02.20
✎
12:05
|
А, ну все, нормик, значит есть одата во Фреше.
Какие проблемы? Разделитель пади не указываешь. |
|||
14
mistermadness
03.02.20
✎
12:08
|
Это что за разделитель?
|
|||
15
Cyberhawk
03.02.20
✎
20:34
|
(14) Ну ты же во Фреше. Там у каждого своя "область данных", ее в одате всяко надо указывать.
|
|||
16
mistermadness
06.02.20
✎
09:54
|
Короче, ответила мне тех поддержка. Оказывается эти олухи не могут это сделать или не хотят. Так что это просто тупо не работает. Причем так интересно сделали, ответили и закрыли обращение, типа они мне помогли. Чем больше изучаю это детище (1С:Предприятие), тем больше удивляюсь, откуда успех у всего этого. Программа реально тормозит. Бедные люди работают с 1С и просто тратят свое и время организаций. Плюс косяки, недоработки, которые годами висят. Понимаю теперь откуда как грибы стали расти всякие альтернативные облачные решения.
|
|||
17
Cyberhawk
06.02.20
✎
11:46
|
Что ответили-то, покажи на картинке
|
|||
18
ДенисЧ
06.02.20
✎
11:48
|
(16) 1с вообще какашка. Не подходи к ней близко
|
|||
19
mistermadness
06.02.20
✎
14:31
|
Ответили вот что https://demo.crmsklad.ru/screen2.png. (18) Людям нужно время, чтобы жить, а не пялиться на желтого кота.
|
|||
20
ДенисЧ
06.02.20
✎
14:44
|
(19) Так живите, а не пяльтесь. Что вас, заставляют? Пишите на пыхе и не трогайте какашку...
|
|||
21
Cyberhawk
06.02.20
✎
14:46
|
Ясно. Значит одаты во Фреше все-таки нет.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |