20.08.2020, 14:30 | #1 |
Участник
|
Интеграция Ax и dadata.ru
Добрый день.
Возникла задача интегрировать нашу Ax 2012 R3 с сервисом dadata.ru, добавить подсказки организации. Пытаюсь отправить запрос на сервер через RetailWebRequest, но не могу понять, как добавить к запросу API Key и payload в формате JSON, т.е. как перевести в x++ вот этот запрос: X++: curl -X POST \ -H "Content-Type: application/json" \ -H "Accept: application/json" \ -H "Authorization: Token ${API_KEY}" \ -d '{ "query": "сбербанк" }' \ [url]https://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/party[/url] |
|
20.08.2020, 15:12 | #2 |
Участник
|
Key у Вас в заголовке, то есть нужно его сформировать. Например, метод doPush класса RetailMediaChannelTwitterConnector
|
|
|
За это сообщение автора поблагодарили: mikki_messer (1). |
20.08.2020, 15:56 | #3 |
----------------
|
Ax2009
X++: str suggest(str resource, str query) { str data; COM http = new COM("MSXML2.XMLHTTP"); http.open("POST", "http://suggestions.dadata.ru/suggestions/api/4_1/rs/suggest/" + resource, false); http.setRequestHeader("Content-Type", "application/json"); http.setRequestHeader("Authorization", "Token " + API_KEY); data = "{ \"query\": \"" + query + "\" }"; http.send(data); return http.responseText(); } resp = suggest("party", _inn); |
|
|
За это сообщение автора поблагодарили: mikki_messer (1). |
20.08.2020, 16:53 | #4 |
Участник
|
Спасибо, буду разбираться. Если сможете привести пример, буду очень благодарен!
|
|
20.08.2020, 16:54 | #5 |
Участник
|
Спасибо! А чем ответ в 2009 парсите, если не секрет?
|
|
20.08.2020, 17:53 | #6 |
----------------
|
В сложных случаях
Newtonsoft.Json + обертка в X++ а в этом примере только ОГРН нужен был, так что просто поиск по тексту использовался |
|
20.08.2020, 18:45 | #7 |
Участник
|
Да и то как делается в 2012 (упаковка Struct в текст JSON и обратно с использованием стандартно интегрированного Newtonsoft.Json в .net с версии 3.5) без проблем портируется в 2009. Так что тоже можно.
|
|
15.09.2020, 13:58 | #8 |
Участник
|
В итоге сделал с помощью System.Net.HttpWebRequest и System.Net.HttpWebResponse:
'url_address' - адрес сервиса dadata, к которому обращаемся, 'queryTxt' - текст запроса, который отправляем, responseData - ответ сервиса. Может, кому пригодится X++: System.Net.HttpWebRequest webRequest; System.Net.HttpWebResponse webResponse; System.Exception ex; System.Exception webException; System.IO.Stream stream; System.IO.StreamReader streamReader; System.Byte[] bytes; System.Net.WebHeaderCollection headers; str responseData; System.Text.UTF8Encoding encoding; ; new InteropPermission(InteropKind::ClrInterop).assert(); webRequest = System.Net.WebRequest::Create('url_address') as System.Net.HttpWebRequest; //Создаём коллекцию заголовков и задаём реквизиты доступа headers = new System.Net.WebHeaderCollection(); //api ключ headers.Add("Authorization: Token " + apiKey); //секретный ключ headers.Add("X-Secret: " + secretKey); //устанавливаем параметры запроса webRequest.set_Headers(headers); webRequest.set_Method('POST'); webRequest.set_ContentType('application/json'); webRequest.set_Accept('application/json'); webRequest.set_Timeout(10000); //указываем кодировку запроса encoding = new System.Text.UTF8Encoding(); bytes = encoding.GetBytes('queryTxt'); webRequest.set_ContentLength(bytes.get_Length()); stream = webRequest.GetRequestStream(); stream.Write(bytes, 0, bytes.get_Length()); stream.Close(); webResponse = webRequest.GetResponse(); stream = webResponse.GetResponseStream(); streamReader = new System.IO.StreamReader(stream); responseData = streamReader.ReadToEnd(); streamReader.Close(); stream.Close(); CodeAccessPermission::revertAssert(); |
|
|
За это сообщение автора поблагодарили: vitart (1), alicedr (1). |
Теги |
ax2012r3, dadata.ru, интеграция |
|
|