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"); }
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"); }
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"); }