|
интеграция с сдэк | ☑ | ||
---|---|---|---|---|
0
lamme
05.04.18
✎
16:03
|
связываю 1С8 и сдэк
у них есть описание протокола https://www.cdek.ru/clients/integrator.html споткнулся на cdek_calculator те на расчете стоимости доставки груза из города А в город Б Из описание протокола: "Расчёт стоимости доставки СДЭК Для получения стоимости и сроков доставки нужно отправить json-объект серверу СДЭК по адресу: http://api.cdek.ru/calculator/calculate_price_by_json.php — для отправки Content-Type: application/json http://api.cdek.ru/calculator/calculate_price_by_jsonp.php — для отправки dataType : "jsonp" (из js) http://api.cdek.ru/calculator/calculate_price_by_json_request.php — для отправки Content-Type: application/x-www-form-urlencoded При передаче json-объекта в заголовке нужно указать соответствующий Content-Type. Основной сервер для запросов: http://api.cdek.ru Сервер для запросов при защищенном соединении: https://api.cdek.ru " Сам файл запрос формата json сделал. а вот с отправкой беда .. ------------------ код ... имяТМП = ПолучитьИмяВременногоФайла("json"); // тут запрос в json ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ОткрытьФайл(имяТМП, , , Новый ПараметрыЗаписиJSON ( , Символы.Таб) ) ; ... // записали. // пробуем приконнектиться и отправить // ТекстЗапроса = Новый ТекстовыйДокумент; ТекстЗапроса.Прочитать(имяТМП); Текст = ТекстЗапроса.ПолучитьТекст(); Попытка ssl = Новый ЗащищенноеСоединениеOpenSSL(); Соединение = Новый HTTPСоединение("api.cdek.ru",,,,,,ssl); Исключение Сообщить("Не удалось соединиться с сервером api.cdek.ru:11443."); Возврат Неопределено ; КонецПопытки; ////Основной сервер для запросов: http://api.cdek.ru Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); ИмяВременногоФайлаОтвета = ПолучитьИмяВременногоФайла("json"); // Запрос = Новый HTTPЗапрос("/calculator/calculate_price_by_json_request.php", Заголовки); Запрос.УстановитьТелоИзСтроки("xml_request="+Текст,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); Попытка Соединение.ОтправитьДляОбработки(Запрос, ИмяВременногоФайлаОтвета); Исключение Сообщить("Не удалось отправить запрос на получение себестоимости перевозки."); Возврат Неопределено; КонецПопытки; // в ответ приход json в виде полной хрени {"error":[{"code":12,"text":"\u041e\u0448\u0438\u0431\u043a\u0430 \u0434\u0435\u043a\u043e\u0434\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0434\u0430\u043d\u043d\u044b\u0445. \u041e\u0436\u0438\u0434\u0430\u0435\u0442\u0441\u044f json"}]} /// те как бы отправка запроса идет не верно вот как бы скорее всего тут ошибка Запрос.УстановитьТелоИзСтроки("xml_request="+Текст,КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); но как правильно - не понятно. смущает так же и вот это из описания Для получения стоимости и сроков доставки нужно отправить json-объект серверу СДЭК Хелп |
|||
1
lamme
05.04.18
✎
16:04
|
те не могу понять
как отправить этот мой json запрос на один из скриптов сайта что там надо и как правилньо .. |
|||
2
fedoss
05.04.18
✎
16:15
|
с Яндексом у меня так работает:
Запрос = Новый HTTPЗапрос(ПараметрыСоединения.ПутьНаСервере); Если ТипЗнч(ПараметрыЗапроса) = Тип("Структура") Тогда Запрос.Заголовки.Вставить("Content-Type", "application/javascript"); Запрос.УстановитьТелоИзСтроки(СтруктураВJson(ПараметрыЗапроса)); ИначеЕсли ТипЗнч(ПараметрыЗапроса) = Тип("ДвоичныеДанные") Тогда Запрос.Заголовки.Вставить("Content-Type", "application/octet-stream"); Запрос.УстановитьТелоИзДвоичныхДанных(ПараметрыЗапроса); КонецЕсли; Если ЗначениеЗаполнено(Заголовки) Тогда Для Каждого Заголовок Из Заголовки Цикл Запрос.Заголовки.Вставить(Заголовок.Ключ, Заголовок.Значение); КонецЦикла; КонецЕсли; Ответ = Соединение.ВызватьHTTPМетод(HTTPМетод, Запрос); Функция СтруктураВJson(Объект) Экспорт НастройкиСериализации = Новый НастройкиСериализацииJSON(); НастройкиСериализации.ВариантЗаписиДаты = ВариантЗаписиДатыJSON.УниверсальнаяДата; НастройкиСериализации.ФорматСериализацииДаты = ФорматДатыJSON.ISO; ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON, Объект, НастройкиСериализации); Возврат ЗаписьJSON.Закрыть(); КонецФункции |
|||
3
fedoss
05.04.18
✎
16:17
|
(2) + в данном случае HTTPМетод = "POST"
|
|||
4
lamme
05.04.18
✎
16:23
|
А ЧТО ТАКОЕ
HTTPМетод У ТЕБЯ? |
|||
5
lamme
05.04.18
✎
16:23
|
о... пардон .. только увидел
|
|||
6
lamme
05.04.18
✎
16:26
|
Попытка
ssl = Новый ЗащищенноеСоединениеOpenSSL(); Соединение = Новый HTTPСоединение("api.cdek.ru",,,,,,ssl); Исключение Сообщить("Не удалось соединиться с сервером api.cdek.ru:11443."); Возврат Неопределено ; КонецПопытки; ////Основной сервер для запросов: http://api.cdek.ru Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); Запрос = Новый HTTPЗапрос("/calculator/calculate_price_by_json_request.php", Заголовки); Запрос.УстановитьТелоИзДвоичныхДанных( Новый ДвоичныЕДанные(имяТМП)); ИмяВременногоФайлаОтвета = ПолучитьИмяВременногоФайла("json"); Попытка Соединение.ВызватьHTTPМетод("POST",Запрос, ИмяВременногоФайлаОтвета); Исключение Сообщить("Не удалось отправить запрос на получение себестоимости перевозки."); Возврат Неопределено; КонецПопытки; |
|||
7
lamme
05.04.18
✎
16:26
|
ответ сервера
12 - Ошибка декодирования данных. Ожидается <json или jsop> |
|||
8
lamme
05.04.18
✎
16:28
|
json от меня такой
{ "version": "1.0", "authLogin": "ххх", "secure": "ххх", "dateExecute": "2018-04-05", "senderCityId": "47409", "receiverCityId": "270", "tariffId": "136", "goods": [ { "weight": "9", "volume": "0.01" } ] } |
|||
9
fedoss
05.04.18
✎
16:29
|
Ну а зачем ему двоичные данные передавать? Передай строку JSON
|
|||
10
lamme
05.04.18
✎
16:34
|
Запрос.УстановитьТелоИзДвоичныхДанных( Новый ДвоичныЕДанные(имяТМП));
в хелпе по УстановитьТелоИзДвоичныхДанных - идет параметр как двоичныеданные |
|||
11
lamme
05.04.18
✎
16:34
|
сделать в смысле
имяТМП = ПолучитьИмяВременногоФайла("json"); ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.ОткрытьФайл(имяТМП, , , Новый ПараметрыЗаписиJSON ( , Символы.Таб) ) ; Попытка ЗаписатьJSON(ЗаписьJSON, СтруктураОбщихПараметров); ЗаписьJSON.Закрыть(); исключение сообщить (ОписаниеОшибки()); конецпопытки; Запрос.УстановитьТелоИзДвоичныхДанных( ЗаписьJSON); ? |
|||
12
fedoss
05.04.18
✎
16:36
|
Запрос.УстановитьТелоИзСтроки(СтруктураВJson(ПараметрыЗапроса));
|
|||
13
lamme
05.04.18
✎
16:36
|
{Форма.Форма.Форма(282)}: Ошибка при вызове метода контекста (УстановитьТелоИзДвоичныхДанных)
Запрос.УстановитьТелоИзДвоичныхДанных( ЗаписьJSON); по причине: Несоответствие типов (параметр номер '1') |
|||
14
fedoss
05.04.18
✎
16:38
|
ЗаписьJSON.Закрыть()
Возвращаемое значение: Тип: Строка. Описание: Завершает запись текста JSON. Если производилась запись в файл, то файл закрывается. Если производилась запись в строку, то результирующая строка будет получена в качестве возвращаемого значения метода. Если производилась запись в файл, то метод вернет пустую строку. |
|||
15
lamme
05.04.18
✎
16:38
|
Запрос.УстановитьТелоИзСтроки(ЗаписьJSON);
|
|||
16
lamme
05.04.18
✎
16:38
|
(14)
ааа |
|||
17
lamme
05.04.18
✎
16:39
|
а что тогда в
СтруктураВJson(Объект) является Объект ? |
|||
18
fedoss
05.04.18
✎
16:42
|
Структура параметров
|
|||
19
lamme
05.04.18
✎
16:43
|
да .. уже примерно понял.
тогда вот что по коду СтруктураОбщихПараметров = новый Структура(); СтруктураОбщихПараметров.Вставить("version",Сокрлп("1.0")); СтруктураОбщихПараметров.Вставить("authLogin",Сокрлп(Логин)); .... // еще какие то параметры // Попытка ssl = Новый ЗащищенноеСоединениеOpenSSL(); Соединение = Новый HTTPСоединение("api.cdek.ru",,,,,,ssl); Исключение Сообщить("Не удалось соединиться с сервером api.cdek.ru:11443."); Возврат Неопределено ; КонецПопытки; ////Основной сервер для запросов: http://api.cdek.ru Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type", "application/x-www-form-urlencoded"); Запрос = Новый HTTPЗапрос("/calculator/calculate_price_by_json_request.php", Заголовки); ///Запрос.УстановитьТелоИзДвоичныхДанных( ЗаписьJSON); Запрос.УстановитьТелоИзСтроки(СтруктураВJson(СтруктураОбщихПараметров)); |
|||
20
lamme
05.04.18
✎
16:45
|
те
https://clip2net.com/s/3TekDBX в СтруктураВJson(СтруктураОбщихПараметров) - идет строка. которая уходит на сайт. а в ответ все то же |
|||
21
fedoss
05.04.18
✎
16:56
|
Попробуй запрос сделать к
http://api.edostavka.ru/calculator/calculate_price_by_json.php с Content-Type: application/json |
|||
22
g00d
05.04.18
✎
16:57
|
Делали такое для утшки, придется помучиться с их справочниками :)
|
|||
23
lamme
05.04.18
✎
17:02
|
Попытка
ssl = Новый ЗащищенноеСоединениеOpenSSL(); Соединение = Новый HTTPСоединение("api.edostavka.ru",,,,,,ssl); Исключение Сообщить("Не удалось соединиться с сервером api.cdek.ru:11443."); Возврат Неопределено ; КонецПопытки; ////Основной сервер для запросов: http://api.cdek.ru Заголовки = Новый Соответствие(); Заголовки.Вставить("Content-Type", "application/json"); Запрос = Новый HTTPЗапрос("/calculator/calculate_price_by_json.php", Заголовки); ///Запрос.УстановитьТелоИзДвоичныхДанных( ЗаписьJSON); Запрос.УстановитьТелоИзСтроки(СтруктураВJson(СтруктураОбщихПараметров)); ИмяВременногоФайлаОтвета = ПолучитьИмяВременногоФайла("json"); Попытка Соединение .ВызватьHTTPМетод("POST",Запрос, ИмяВременногоФайлаОтвета); Исключение Сообщить("Не удалось отправить запрос на получение себестоимости перевозки."); Возврат Неопределено; КонецПопытки; не помогло ( |
|||
24
lamme
05.04.18
✎
17:03
|
он возвращает вроде все тож самое
что и если в браузер вставить http://api.edostavka.ru/calculator/calculate_price_by_json.php |
|||
25
lamme
05.04.18
✎
17:07
|
(22)
уже мучаемся ... глюк- отправляю им заказ на доставку а в нем должна быть указана сумма доставки при этому = сумму доставки надо рассчитать заранее. те сначала рассчитываем сумму потом отпаврялем заказ на сайт сидэка - с теми же самыми параметрами, что и для расчета стоимости доставки .. два раза - одно и тоже |
|||
26
fedoss
05.04.18
✎
17:57
|
(24)хз, у меня запрос на http://api.edostavka.ru/calculator/calculate_price_by_json.php отправляется нормально.
{ "error": [ { "code": 7, "text": "Не задан город-отправитель" }, { "code": 8, "text": "Не задан город-получатель" }, { "code": 5, "text": "Не задано ни одного места для отправления" }, { "code": 6, "text": "Не задан тариф или список тарифов" } ] } |
|||
27
lamme
05.04.18
✎
22:32
|
(26)
если не сложно, поделись кодом - как сделал отправку данных |
|||
28
fedoss
06.04.18
✎
15:02
|
Да я просто в свою обработку подставил:
URL = "http://api.edostavka.ru/calculator/calculate_price_by_json.php"; ПараметрыЗапроса = Новый Структура; ПараметрыЗапроса.Вставить("version", "1.0"); Дальше мой код из (2) |
|||
29
fedoss
06.04.18
✎
15:05
|
+ В заголовках запроса Content-Type: "application/json; charset=utf-8"
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |