...

Как отправить POST запрос из ELMA во внешнюю систему?

Тема в разделе "Разработчикам", создана пользователем aalekseev, 25 фев 2019.

Метки:
  1. aalekseev

    aalekseev New Member

    Как отправить POST запрос json из ELMA во внешнюю систему и получить ответ в переменную?

    Например такой:
    url: https://example.com/api?token=123

    Код:
    {
      "issue": {
        "title": Contxnt.Title,
        "description": Context.Description
       }
    }

    А ответ вот такой:

    Код:
    200
    {
      "id": 456
    }
    положить в context.apiId
     
    Последнее редактирование: 25 фев 2019
  2. pushkarev

    pushkarev Active Member

    Вот есть статейка с примерами интеграции с внешними сервисами, как раз через json: https://www.elma-bpm.ru/KB/article-6620.html По аналогии будет не сложно написать код для вашего сервиса.
     
  3. a.zahlebin

    a.zahlebin New Member

    Мы делали так (пример авторизации на сервисе B2BFamily с помощью API этого сервиса). Прошу прощения за форматирование - редактор скриптов ELMA так форматирует автоматичеки

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
    using System.Net;
    using System.Net.Http;
    using System.IO;
    using System.Threading.Tasks;
    using System.Net.Mail;
    using Newtonsoft.Json;
    using EleWise.ELMA.API;
    using EleWise.ELMA.Model.Common;
    using EleWise.ELMA.Model.Entities;
    using EleWise.ELMA.Model.Managers;
    using EleWise.ELMA.Model.Types.Settings;
    using EleWise.ELMA.Model.Entities.ProcessContext;

    //Класс для сериализации JSON запроса на авторизацию пользователя
    public class B2BUserRequestClass
    {
    public string appkey {
    get;
    set;
    }

    public string email {
    get;
    set;
    }

    public string password {
    get;
    set;
    }

    public string hash {
    get;
    set;
    }
    }

    //Класс для десериализации JSON ответа сервера на авторизацию пользователя
    public class B2BUserResponseClass
    {
    public int user_id {
    get;
    set;
    }

    public string apikey {
    get;
    set;
    }

    public string name {
    get;
    set;
    }

    public string email {
    get;
    set;
    }

    public string phone {
    get;
    set;
    }

    public DateTime create_date {
    get;
    set;
    }

    public int create_date_unix {
    get;
    set;
    }

    public DateTime expire_date {
    get;
    set;
    }

    public int expire_date_unix {
    get;
    set;
    }

    public bool is_demo {
    get;
    set;
    }

    public bool is_active {
    get;
    set;
    }

    public bool email_settings_exists {
    get;
    set;
    }

    public bool bookkeeping_integration_exists {
    get;
    set;
    }

    public bool bookkeeping_paid_integration_exists {
    get;
    set;
    }

    public string signature {
    get;
    set;
    }

    public bool always_open_mail_list {
    get;
    set;
    }

    public bool will_display_amo_welcome {
    get;
    set;
    }
    }


    /// <summary>
    /// userLoginScrReq
    /// </summary>
    /// <param name="context">Контекст процесса</param>
    public virtual void userLoginReqScr (Context context)
    {
    //Создаем экземпляр класса для сериализации и создания запроса JSON для авторизации пользователя, заполняем поля
    B2BUserRequestClass B2BUserRequest = new B2BUserRequestClass () {
    appkey = context.appkey,
    email = context.email,
    password = context.password,
    hash = context.hash
    };
    //Сериализуем запрос на авторизацию (получаем строку JSON из класса)
    string B2BUserRequestSerializedJson = JsonConvert.SerializeObject (B2BUserRequest);
    //Отправляем сериализованный запрос на сервер
    var httpWebRequest = (HttpWebRequest)WebRequest.Create (context.server + "User/login");
    httpWebRequest.ContentType = "application/json";
    httpWebRequest.Method = "POST";
    using (var streamWriter = new StreamWriter (httpWebRequest.GetRequestStream ())) {
    streamWriter.Write (B2BUserRequestSerializedJson);
    streamWriter.Flush ();
    streamWriter.Close ();
    }
    ;
    //Получаем ответ от сервера
    var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse ();
    //Ответ представляет собой JSON: создаем экземпляр класса для десериализации
    using (var streamReader = new StreamReader (httpResponse.GetResponseStream ())) {
    var B2BUserResponseSerializedJson = streamReader.ReadToEnd ().ToString ();
    //Десериализуем JSON ответа в созданный экземпляр класса
    B2BUserResponseClass B2BUserResponse = JsonConvert.DeserializeObject<B2BUserResponseClass> (B2BUserResponseSerializedJson);
    //Записываем необходимый параметр из ответа сервера (apikey) в контекст для дальнейшего использования
    context.apikey = B2BUserResponse.apikey;
    }
    }
     
  4. alexfuse

    alexfuse Member

    У нас работает отправка POST запроса из процесса
    Только если https то мы указывали еще и порт https://url:443
    Код:
    [Serializable]
            public class SaleJsonPost
            {
                [JsonProperty (PropertyName = "command")]
                public string Command {
                    get;
                    set;
                }
    
                [JsonProperty (PropertyName = "id_source")]
                public string Source {
                    get;
                    set;
                }
    
                [JsonProperty (PropertyName = "id_crm")]
                public string CRM {
                    get;
                    set;
                }
    
                [JsonProperty (PropertyName = "roistat_visit")]
                public string Visit {
                    get;
                    set;
                }
    
                [JsonProperty (PropertyName = "data")]
                public Data Array {
                    get;
                    set;
                }
            }
    
            [Serializable]
            public class Data
            {
                [JsonProperty (PropertyName = "name")]
                public string Name {
                    get;
                    set;
                }
    
                [JsonProperty (PropertyName = "fio")]
                public string FullName {
                    get;
                    set;
                }
    
                [JsonProperty (PropertyName = "phone")]
                public string Phone {
                    get;
                    set;
                }
            }
    
            public class Response
            {
                [JsonProperty (PropertyName = "code")]
                public string Code {
                    get;
                    set;
                }
    
                [JsonProperty (PropertyName = "description")]
                public string Descr {
                    get;
                    set;
                }
    
                [JsonProperty (PropertyName = "id")]
                public string Id {
                    get;
                    set;
                }
            }
    // отправка запроса и получение ответа
    SaleJsonPost salePost = new SaleJsonPost ();
                salePost.Command = "save_lead";
                salePost.CRM = "3";
                salePost.Source = "5";
                salePost.Visit = "неизвестно";
                salePost.Array = new Data () {
                    Name = context.NaimenovanieLida,
                    FullName = context.FamiliyaKlienta + " " + context.ImyaKlienta,
                    Phone = context.TelefonKlienta.PhoneString
                };
                string json = JsonConvert.SerializeObject (salePost);
                var httpRequest = (HttpWebRequest)WebRequest.Create ("URL");
             
                httpRequest.Method = "POST";
                httpRequest.ContentType = "application/x-www-form-urlencoded";
                using (var requestStream = httpRequest.GetRequestStream ())
                    using (var writer = new StreamWriter (requestStream)) {
                        writer.Write (json);
                    }
                using (var httpResponse = httpRequest.GetResponse ())
                    using (var responseStream = httpResponse.GetResponseStream ())
                        using (var reader = new StreamReader (responseStream)) {
                            string response = reader.ReadToEnd ();
                            var responseDes = JsonConvert.DeserializeObject<Response> (response);
                            lead.Description = "Промокод: неизвестно" + responseDes.Id;
                            context.ID_BD = Convert.ToInt32 (responseDes.Id);
                        }
     

Поделиться: