Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Newtonsoft.Json.Linq;
- using Nop.Core.Infrastructure;
- using Nop.Plugins.Misc.Atol.APIModels;
- using Nop.Plugins.Misc.Atol.Domain;
- using Nop.Services.Logging;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web.Script.Serialization;
- namespace Nop.Plugins.Misc.Atol.Core
- {
- public class AtolClient
- {
- private readonly AtolSettings _atolSettings;
- private readonly ILogger _logger;
- public AtolClient()
- {
- this._atolSettings = EngineContext.Current.Resolve<AtolSettings>();
- this._logger = EngineContext.Current.Resolve<ILogger>();
- }
- protected string GenerateDocumentRegistrationUrl(string operation, string token)
- {
- return _atolSettings.URL + _atolSettings.ApiVersion + "/" + _atolSettings.GroupCode + "/" + operation + "?tokenid=" + token;
- }
- protected string GenerateTokenUrl()
- {
- return _atolSettings.URL + _atolSettings.ApiVersion + "/getToken";
- }
- protected string GenerateStatusCheckUrl(string uuid, string token)
- {
- return _atolSettings.URL + _atolSettings.ApiVersion + "/" + _atolSettings.GroupCode + "/report/" + uuid + "?tokenid=" + token;
- }
- public Dictionary<string, string> GetCheckStatus(CIT_CheckRecord check)
- {
- var result = new Dictionary<string, string>();
- var token = GetToken();
- try
- {
- string webAddr = GenerateStatusCheckUrl(check.UUID, token);
- Exception myException = new Exception("Сообщение администратору: Ошибка получения статуса чека!");
- WebRequest req = WebRequest.Create(webAddr);
- WebResponse resp = req.GetResponse();
- using (var streamReader = new StreamReader(resp.GetResponseStream()))
- {
- JObject jObject = JObject.Parse(streamReader.ReadToEnd());
- var error = jObject["error"];
- if (error.Any())
- {
- var errorMsg = (string)jObject["error"]["type"];
- var errorCode = (string)jObject["error"]["code"];
- var errortext = (string)jObject["error"]["text"];
- result.Add("status", "fail");
- result.Add("error", string.Format("Статус :{0}, {1}, {2}", errorCode, errorMsg, errortext));
- return result;
- }
- var status = (string)jObject["status"];
- var fn_number = (string)jObject["payload"]["fn_number"];
- var shift_number = (string)jObject["payload"]["shift_number"];
- var receipt_datetime = (string)jObject["payload"]["receipt_datetime"];
- var device_code = (string)jObject["device_code"];
- var daemon_code = (string)jObject["daemon_code"];
- var fiscal_document_attribute = (string)jObject["payload"]["fiscal_document_attribute"];
- var fiscal_document_number = (string)jObject["payload"]["fiscal_document_number"];
- var fiscal_receipt_number = (string)jObject["payload"]["fiscal_receipt_number"];
- result.Add("status", status);
- result.Add("fn_number", fn_number);
- result.Add("shift_number", shift_number);
- result.Add("daemon_code", daemon_code);
- result.Add("device_code", device_code);
- result.Add("fiscal_document_number", fiscal_document_number);
- result.Add("fiscal_document_attribute", fiscal_document_attribute);
- result.Add("fiscal_receipt_number", fiscal_receipt_number);
- }
- }
- catch (WebException ex)
- {
- Console.WriteLine(ex.Message);
- _logger.InsertLog(Nop.Core.Domain.Logging.LogLevel.Error, "Ошибка получение данных по статусу чека", ex.Message.ToString());
- result.Add("status", "fail");
- result.Add("error", string.Format("Статус :{0}, {1}", "fail",ex.Message.ToString()));
- return result;
- }
- return result;
- }
- public Dictionary<string, string> RegisterCheck(Сheck check, string operation)
- {
- var result = new Dictionary<string,string>();
- var errorCode = "";
- var errorMessage = "";
- var token = GetToken();
- try
- {
- string webAddr = GenerateDocumentRegistrationUrl(operation, token);
- var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
- Exception myException = new Exception("Сообщение администратору: Ошибка регистрации чека!");
- ServicePointManager.Expect100Continue = true;
- ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
- | SecurityProtocolType.Tls11
- | SecurityProtocolType.Tls12
- | SecurityProtocolType.Ssl3;
- httpWebRequest.ContentType = "application/json; charset=utf-8";
- httpWebRequest.Method = "POST";
- using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
- {
- string json = new JavaScriptSerializer().Serialize(check);
- streamWriter.Write(json);
- streamWriter.Flush();
- }
- var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
- using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
- {
- JObject jObject = JObject.Parse(streamReader.ReadToEnd());
- var error = jObject["error"];
- var status = (string)jObject["status"];
- var uuid = (string)jObject["uuid"];
- result.Add("status", status);
- result.Add("uuid", uuid);
- if (error.Any())
- {
- var str = new StringBuilder();
- str.AppendFormat("Ошибка регистрации чека по ссылке: {0}, с номеро {1} ответ: {2}", webAddr, check.external_id, jObject.ToString());
- errorCode = (string)jObject["error"]["code"];
- errorMessage = (string)jObject["error"]["text"];
- return result;
- }
- }
- }
- catch (WebException ex)
- {
- Console.WriteLine(ex.Message);
- _logger.InsertLog(Nop.Core.Domain.Logging.LogLevel.Error, "Ошибка регистрации чека", ex.Message.ToString());
- result.Add("status", "fail");
- result.Add("error", "Системная ошибка" + ex.Message.ToString());
- return result;
- }
- return result;
- }
- public string GetToken()
- {
- var token = "";
- try
- {
- string webAddr = GenerateTokenUrl();
- var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
- Exception myException = new Exception("Сообщение администратору: Ошибка получения токена!");
- ServicePointManager.Expect100Continue = true;
- ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
- | SecurityProtocolType.Tls11
- | SecurityProtocolType.Tls12
- | SecurityProtocolType.Ssl3;
- httpWebRequest.ContentType = "application/json; charset=utf-8";
- httpWebRequest.Method = "POST";
- using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
- {
- string json = new JavaScriptSerializer().Serialize(new Auth { login = _atolSettings.Login,
- pass =_atolSettings.Password });
- streamWriter.Write(json);
- streamWriter.Flush();
- }
- var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
- using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
- {
- JObject jObject = JObject.Parse(streamReader.ReadToEnd());
- token = (string)jObject["token"];
- if (String.IsNullOrEmpty(token))
- {
- var str = new StringBuilder();
- str.AppendFormat("Ошибка получения токена по ссылке: {0}, ответ: {1}", webAddr, jObject.ToString());
- throw new WebException(str.ToString(), myException, WebExceptionStatus.ProtocolError, httpResponse);
- }
- }
- }
- catch (WebException ex)
- {
- Console.WriteLine(ex.Message);
- _logger.InsertLog(Nop.Core.Domain.Logging.LogLevel.Error, "Ошибка получение данных по лицензии", ex.Message.ToString());
- return null;
- }
- return token;
- }
- public string GenerateTokenUrlFromInput(string URL, string ApiVersion)
- {
- return URL + ApiVersion + "/getToken";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement