Заказы на доработку 1С (сервис удаленной работы)

Хранилище

База знаний
Неназначенных незавершенных заказов: 2, свеженьких 1
Бесплатные отчеты, обработки, конфигурации, внешние компоненты для 1С Статьи, описание работы, методики по работе с 1С

Здравствуйте, гость ( Вход | Зарегистрироваться )



> Есть запрос к АПИ сайта написан на PHP. Как его реализовать через 1С?          
maksyandra Подменю пользователя
сообщение 24.03.16, 16:27
Сообщение #1

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Есть запрос к АПИ сайта написан на PHP. Как его реализовать через 1С???
Сам запрос
<?php
    $url="https://api.site.com.ua/api/API_METHOD"; //адрес api
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, array (
        'login' => 'YOUR_LOGIN',
        'password' => 'YOUR_PASSWORD',
        'доппараметр' => 'значение_доппараметра'
    )); //параметры запроса
    curl_setopt($ch, CURLOPT_URL, $url);
    $output = curl_exec($ch); //ответ
    curl_close($ch);
?>


Сообщение отредактировал Vofka - 24.03.16, 16:31

Vofka Подменю пользователя
сообщение 24.03.16, 16:31
Сообщение #2

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

Смотрите в сторону HTTPЗапроса и HTTPСоединения.

maksyandra Подменю пользователя
сообщение 24.03.16, 16:34
Сообщение #3

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 17:31 *,
Можно поподробнее?? А то что-то у меня не выходит.

Vofka Подменю пользователя
сообщение 24.03.16, 16:56
Сообщение #4

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

maksyandra, откуда не выходит?

maksyandra Подменю пользователя
сообщение 24.03.16, 17:00
Сообщение #5

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Vofka @ Сегодня, 17:56 *,
Из 1С

Vofka Подменю пользователя
сообщение 24.03.16, 17:26
Сообщение #6

У нас здесь своя атмосфера...
***********
Группа: Основатель
Сообщений: 13955
Из: Киев
Спасибо сказали: 4519 раз
Рейтинг: 3641.2

А, ну тогда всё понятно.

Что конкретно не получается?

maksyandra Подменю пользователя
сообщение 24.03.16, 17:37
Сообщение #7

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

Отправляю
ssl=Новый ЗащищенноеСоединениеOpenSSL(
    Неопределено,
    Новый СертификатыУдостоверяющихЦентровWindows());
    ХТТПСоединение = Новый HTTPСоединение("api.dclink.com.ua",,,,,0,ssl);
  
    ЗаголовокHTTP = Новый Соответствие();
    ЗаголовокHTTP.Вставить("Content-Type", "application/x-www-form-urlencoded");

    Запрос = Новый HTTPЗапрос("/api/GetCategories",ЗаголовокHTTP);
    Запрос.УстановитьТелоИзСтроки("&login=логин&password=пароль", "UTF-8",ИспользованиеByteOrderMark.НеИспользовать);//Дело было в этой строке

    ХТТПОтвет = ХТТПСоединение.ОтправитьДляОбработки(Запрос);
    Сообщить(ХТТПОтвет.ПолучитьТелоКакСтроку("UTF-8"));




 ! 

Правила, пункт 1
 


Получаю пустую строку

Сообщение отредактировал Vofka - 24.03.16, 17:47

logist Подменю пользователя
сообщение 24.03.16, 18:02
Сообщение #8

Про1С-ник
Иконка группы
Квалифицированный бухгалтерГений телепатии и социального моделированияЗа заслуги на форуме в 2010 годуМодератору Про1С (за заслуги в 2011 году)
Группа: Местный
Сообщений: 9564
Из: Kharkiv, UA
Спасибо сказали: 2536 раз
Рейтинг: 0

Цитата(maksyandra @ 24.03.16, 18:37) *
&login=логин&password=пароль

это параметры, они должны быть в адресе, а не в теле

Запрос = Новый HTTPЗапрос("/api/GetCategories/?login=логин&password=пароль",ЗаголовокHTTP);


Signature
Личные бесплатные консультации не даю, для этого есть форум!

maksyandra Подменю пользователя
сообщение 24.03.16, 18:20
Сообщение #9

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

logist @ Сегодня, 19:02 *,
Все равно пусто

BigProblem Подменю пользователя
сообщение 24.03.16, 19:39
Сообщение #10

Молчаливый
*
Группа: Пользователи
Сообщений: 5
Спасибо сказали: 0 раз
Рейтинг: 0

maksyandra @ Сегодня, 18:20 *,
Посмотрите отладчиком что находится в ХТТПОтвет (в частности ХТТПОтвет.КодСостояния - возможно идет редирект куда-то или еще какая ошибка, о которой в ХТТПОтвет.Заголовки можно поискать)

Цитата
Запрос.УстановитьТелоИзСтроки("&login=логин&password=пароль", "UTF-8",ИспользованиеByteOrderMark.НеИспользовать);

Еще вот это попробуйте переписать вот так:
Запрос.УстановитьТелоИзСтроки("login="+КодироватьСтроку(логин,СпособКодированияСтроки.КодировкаURL)+"&password="+КодироватьСтроку(пароль,СпособКодированияСтроки.КодировкаURL), "UTF-8",ИспользованиеByteOrderMark.НеИспользовать);


Ну и еще можно попробовать (хотя это соломинка, которая редко помогает):
ЗаголовокHTTP.Вставить("User-Agent","Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36");


В крайнем случае - вшить куда-то компоненту curl и запускать ее через COMОбъект("WScript.Shell"). Как-то вот так:
...
    ИмяФайлаКУРЛ = КаталогВременныхФайлов()+"CURL.exe";
    ИмяФайлаКУРЛ = Новый Файл(ИмяФайлаКУРЛ);
    Если НЕ ИмяФайлаКУРЛ.Существует() Тогда
        КУРЛ = ЭтотОбъект.ПолучитьМакет("CURL");
        КУРЛ.Записать(ИмяФайлаКУРЛ.ПолноеИмя);
    КонецЕсли;
    ФайлСертификатов = КаталогВременныхФайлов()+"curl-ca-bundle.crt";
    ФайлСертификатов = Новый Файл(ФайлСертификатов);
    Если НЕ ФайлСертификатов.Существует() Тогда
        СЕРТИФИКАТ = ЭтотОбъект.ПолучитьМакет("CurlCert");
        СЕРТИФИКАТ.Записать(ФайлСертификатов.ПолноеИмя);
    КонецЕсли;

    ВремФайл = ПолучитьИмяВременногоФайла("txt");
    Скрипт = Новый COMОбъект("WScript.Shell");
    СтрокаКоманды = ТУТ_НАДО_СФОРМИРОВАТЬ_ПРАВИЛЬНУЮ_СТРОКУ_КОМАНДЫ_ДЛЯ_CURL;
    Скрипт.Run(СтрокаКоманды,0,Истина);
...

Petre Подменю пользователя
сообщение 25.03.16, 10:37
Сообщение #11

Живет на форуме
Иконка группы
Группа: Местный
Сообщений: 2905
Из: Київ, Україна
Спасибо сказали: 1147 раз
Рейтинг: 1228.9

Цитата(logist @ 24.03.16, 18:02) *
это параметры, они должны быть в адресе, а не в теле

Не факт. Видел обе вариации.
maksyandra @ Вчера, 18:20 *,
Посмотрите запрос и ответ в fiddler.


Signature
Допрацьовую:
- "Бухгалтерія для України 2.1";
- "Альфа-Авто: Автосалон+Автосервіс+Автозапчастини, українська версія".

maksyandra Подменю пользователя
сообщение 31.03.16, 11:21
Сообщение #12

Молчаливый
*
Группа: Пользователи
Сообщений: 9
Спасибо сказали: 0 раз
Рейтинг: 0

BigProblem @ 24.03.16, 20:39 *,
Правильный метод
    Логин  = "login"; 
    Пароль = "password"; а
    ЛогинПароль = "login="+ Логин + "&password="+Пароль+"";
    Ресурс = "/api/GetCategories";  
    
    WinHttp = Новый COMОбъект("WinHttp.WinHttpRequest.5.1");
    WinHttp.Option(2,"Windows-1251");
    WinHttp.Open("POST", "https://api.com.ua"+Ресурс,Ложь);
    WinHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded; charset=Windows-1251");
    ПараметрыПОСТ = ЛогинПароль;
    WinHttp.Send(ПараметрыПОСТ);
    Ответ = Строка(WinHttp.ResponseText());



 ! 

Правила, п.12
 


Сообщение отредактировал logist - 31.03.16, 11:25

Не нашли ответа на свой вопрос?
Зарегистрируйтесь и задайте новый вопрос.


Ответить Новая тема
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

RSS Текстовая версия Сейчас: 20.04.24, 4:52
1С Предприятие 8.3, 1С Предприятие 8.2, 1С Предприятие 8.1, 1С Предприятие 8.0, 1С Предприятие 7.7, Литература 1С, Общие вопросы по администрированию 1С, Методическая поддержка 1С - всё в одном месте: на Украинском 1С форуме!