Пример #1
0
        public async Task <string> TestAutorization()
        {
            var auth = AppController.Get <IAuthAlfaCRM>();

            auth.ApiKey   = "beb65996-d2cb-11e8-bb8f-0cc47ae3c526";
            auth.Email    = "*****@*****.**";
            auth.HostName = "https://legendasport.s20.online";
            auth.Branch   = "2";

            auth.Id = 2;

            string token = await NetworkService.Authorization(auth);

            string url = auth.HostName + "/v2api/" + auth.Branch + "/customer/index";

            var data = new
            {
                page = 0
            };

            string json = JsonConvert.SerializeObject(data);

            int id_req = LogService.QueryLog.WriteRequest(json, (int)QueryType.GetCustomers, "Тестовое получение плательщиков", 4217);

            try
            {
                string response = await NetworkService.SendAlfaCRM(url, token, json, NetworkMethod.POST);

                var jobj = JObject.Parse(response);

                var items = jobj.GetValue("items");

                items.ForEach(x => {
                    var str = x.ToString();

                    var customer = JObject.Parse(str);

                    var cust_model = new CustomerModel(customer);
                });

                LogService.QueryLog.WriteResponse(response, (int)QueryType.GetCustomers, "Тестовое получение плательщиков", 4217, id_req);
            }catch (Exception e)
            {
                LogService.QueryLog.WriteResponse(e.Message, (int)QueryType.GetCustomers, "Ошибка тестового получения плательщиков", 4217, id_req);
                throw e;
            }
            return("200,OK");
        }
Пример #2
0
        public async Task <string> Webhook(string token = null)
        {
            //token = "qwerty123456";

            var stream = Request.InputStream;

            // Проверка токена
            var authAlfaCRMRepository = AppController.Get <IAuthAlfaCRMRepository>();

            var authAlfaCRM = authAlfaCRMRepository.GetByToken(token);

            if (authAlfaCRM == null)
            {
                throw new ArgumentException("Даный токен не найден", "token");
            }

            StreamReader reader = new StreamReader(stream);

            string text = reader.ReadToEnd();

            LogService.Current.Debug("StreamReader : " + text);

            LogService.QueryLog.WriteRequest(text, (int)QueryType.Webhook, "Webhook от AlfaCRM", authAlfaCRM.ServiceId);

            var json = JObject.Parse(text);

            var eventName = FormatUtility.ConvertToString(json, "event");

            // Должны обрабатываться только события добавления
            switch (eventName)
            {
            case "update":
            case "delete":
                return("200");
            }

            var fields_new = JObject.Parse((json.GetValue("fields_new").ToString()));

            var customer_id = FormatUtility.ConvertToInteger(fields_new, "customer_id");

            var tokenAlfa = await NetworkService.Authorization(authAlfaCRM);

            var responseCustomer = await NetworkService.GetCustomes(customer_id.ToString(), authAlfaCRM, tokenAlfa);

            var customer = new CustomerModel(JObject.Parse(responseCustomer).GetValue("items").First.ToString());

            //var branch_id = json.GetValue("branch_id").ToString().Trim('{', '}');

            /*var tokenAlfaCRM = await NetworkService.Authorization(authAlfaCRM);
             *
             * if(tokenAlfaCRM == null)
             * {
             *  throw new ArgumentException("Ошибка получения токена от AlfaCRM", "tokenAlfaCRM");
             * }
             *
             * var sessionAlfaCRMRepository = AppController.Get<ISessionAlfaCRMRepository>();
             *
             * int session_id = sessionAlfaCRMRepository.Save(tokenAlfaCRM, authAlfaCRM.Id);*/

            // формирование запроса на API ExpressPay
            // нужно получить токен для выставления счета

            var serviceIntegrationRepository = AppController.Get <IServiceIntegrationRepository>();

            string tokenAPI = serviceIntegrationRepository.GetTokenByServiceId(authAlfaCRM.ServiceId); //"a75b74cbcfe446509e8ee874f421bd64";

            var model = new InvoiceModel()
            {
                Token             = "a75b74cbcfe446509e8ee874f421bd64",
                AccountNo         = customer.custom_contract_no,//"100",
                Amount            = FormatUtility.Convert(fields_new, "income"),
                Currency          = 933,
                Info              = FormatUtility.ConvertToString(fields_new, "note"),
                EmailNotification = customer.email,
                SmsPhone          = customer.phone
            };

            string response = await NetworkService.Invoicing(model, authAlfaCRM.ServiceId);

            var responseJson = JObject.Parse(response);

            var invoiceNo = FormatUtility.ConvertToInteger(responseJson, "InvoiceNo");

            LogService.Current.Debug("InvoiceNo : " + invoiceNo);

            // var alfaCRMEntityRepository = AppController.Get<IAlfaCRMEntityRepository>();

            //var id = alfaCRMEntityRepository.Save(entity_id, customer_id, invoiceNo);

            return("200");
        }
Пример #3
0
        public async Task <string> Notification(string id)
        {
            string token  = id;
            var    stream = Request.InputStream;

            if (token == null)
            {
                throw new ArgumentException("Токен не может быт пустым", "token");
            }

            var authAlfaCRMRepository = AppController.Get <IAuthAlfaCRMRepository>();

            var authAlfaCRM = authAlfaCRMRepository.GetByTokenExpressPay(token);

            if (authAlfaCRM == null)
            {
                throw new ArgumentException("Полученный токен не найден!", "token");
            }

            StreamReader reader = new StreamReader(stream);
            string       text   = reader.ReadToEnd();

            text = text.Substring(text.IndexOf("{"));

            LogService.QueryLog.WriteRequest(text, (int)QueryType.Notification, "Уведомление о платеже от ExpressPay", authAlfaCRM.ServiceId);

            //LogService.Current.Debug("Уведомление о платеже от ExpressPay : " + text);

            var json = JObject.Parse(text);

            var cmdType = FormatUtility.ConvertToString(json, "CmdType");

            // Если Тип уведомления не 3 то на него можно не реагировать и вернуть серверу статус 200
            if (cmdType != "3")
            {
                return("200,OK");
            }

            var status = FormatUtility.ConvertToString(json, "Status");

            // Нужно реагированить только на оплату
            switch (status)
            {
            case "1":     //Ожидает оплату
            case "2":     //Просрочен
            case "5":     //Отменен
                return("200,OK");
            }

            var amount = FormatUtility.Convert(json, "Amount");

            // Авторизация в alfaCRM

            var tokenAlfaCRM = await NetworkService.Authorization(authAlfaCRM);

            // Определить, что является лицевым счетом!

            var customer_id = FormatUtility.ConvertToString(json, "AccountNo");

            // Получение баланса плательщика

            string response = await NetworkService.GetCustomes(customer_id, authAlfaCRM, tokenAlfaCRM);

            // Отправление изменений

            json = JObject.Parse(response);

            var items = JObject.Parse(json.GetValue("items").ToString().Trim('[', ']', '\r', '\n'));

            var balance = FormatUtility.Convert(items, "balance");

            balance += amount;

            string responseUpdate = await NetworkService.UpdateCustomer(customer_id, tokenAlfaCRM, balance, authAlfaCRM);


            return("200,OK");
        }