Advertisement
Guest User

Untitled

a guest
Dec 9th, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.20 KB | None | 0 0
  1. using Newtonsoft.Json.Linq;
  2. using Nop.Core.Infrastructure;
  3. using Nop.Plugins.Misc.Atol.APIModels;
  4. using Nop.Plugins.Misc.Atol.Domain;
  5. using Nop.Services.Logging;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Net;
  11. using System.Text;
  12. using System.Threading.Tasks;
  13. using System.Web.Script.Serialization;
  14.  
  15. namespace Nop.Plugins.Misc.Atol.Core
  16. {
  17.     public class AtolClient
  18.     {
  19.         private readonly AtolSettings _atolSettings;
  20.         private readonly ILogger _logger;
  21.  
  22.         public AtolClient()
  23.         {
  24.             this._atolSettings = EngineContext.Current.Resolve<AtolSettings>();
  25.             this._logger = EngineContext.Current.Resolve<ILogger>();
  26.         }
  27.  
  28.         protected string GenerateDocumentRegistrationUrl(string operation, string token)
  29.         {
  30.             return _atolSettings.URL + _atolSettings.ApiVersion + "/" + _atolSettings.GroupCode + "/" + operation + "?tokenid=" + token;
  31.         }
  32.  
  33.         protected string GenerateTokenUrl()
  34.         {
  35.             return _atolSettings.URL + _atolSettings.ApiVersion + "/getToken";
  36.         }
  37.  
  38.         protected string GenerateStatusCheckUrl(string uuid, string token)
  39.         {
  40.             return _atolSettings.URL + _atolSettings.ApiVersion + "/" + _atolSettings.GroupCode + "/report/" + uuid + "?tokenid=" + token;
  41.         }
  42.  
  43.         public Dictionary<string, string> GetCheckStatus(CIT_CheckRecord check)
  44.         {
  45.             var result = new Dictionary<string, string>();
  46.             var token = GetToken();
  47.  
  48.             try
  49.             {
  50.                 string webAddr = GenerateStatusCheckUrl(check.UUID, token);
  51.                
  52.                 Exception myException = new Exception("Сообщение администратору: Ошибка получения статуса чека!");          
  53.  
  54.                 WebRequest req = WebRequest.Create(webAddr);
  55.                 WebResponse resp = req.GetResponse();
  56.  
  57.                 using (var streamReader = new StreamReader(resp.GetResponseStream()))
  58.                 {
  59.                     JObject jObject = JObject.Parse(streamReader.ReadToEnd());
  60.                     var error = jObject["error"];
  61.                     if (error.Any())
  62.                     {
  63.                         var errorMsg = (string)jObject["error"]["type"];
  64.                         var errorCode = (string)jObject["error"]["code"];
  65.                         var errortext = (string)jObject["error"]["text"];
  66.                         result.Add("status", "fail");
  67.                         result.Add("error", string.Format("Статус :{0}, {1}, {2}", errorCode, errorMsg, errortext));
  68.                         return result;
  69.                     }
  70.  
  71.                     var status = (string)jObject["status"];
  72.                     var fn_number = (string)jObject["payload"]["fn_number"];
  73.                     var shift_number = (string)jObject["payload"]["shift_number"];
  74.                     var receipt_datetime = (string)jObject["payload"]["receipt_datetime"];
  75.                     var device_code = (string)jObject["device_code"];
  76.                     var daemon_code = (string)jObject["daemon_code"];
  77.                     var fiscal_document_attribute = (string)jObject["payload"]["fiscal_document_attribute"];
  78.                     var fiscal_document_number = (string)jObject["payload"]["fiscal_document_number"];
  79.                     var fiscal_receipt_number = (string)jObject["payload"]["fiscal_receipt_number"];
  80.  
  81.                     result.Add("status", status);
  82.                     result.Add("fn_number", fn_number);
  83.                     result.Add("shift_number", shift_number);
  84.                     result.Add("daemon_code", daemon_code);
  85.                     result.Add("device_code", device_code);
  86.                     result.Add("fiscal_document_number", fiscal_document_number);
  87.                     result.Add("fiscal_document_attribute", fiscal_document_attribute);
  88.                     result.Add("fiscal_receipt_number", fiscal_receipt_number);
  89.                 }
  90.             }
  91.             catch (WebException ex)
  92.             {
  93.                 Console.WriteLine(ex.Message);
  94.                 _logger.InsertLog(Nop.Core.Domain.Logging.LogLevel.Error, "Ошибка получение данных по статусу чека", ex.Message.ToString());
  95.                 result.Add("status", "fail");
  96.                 result.Add("error", string.Format("Статус :{0}, {1}", "fail",ex.Message.ToString()));
  97.                 return result;
  98.             }
  99.  
  100.  
  101.             return result;
  102.         }
  103.  
  104.  
  105.         public Dictionary<string, string> RegisterCheck(Сheck check, string operation)
  106.         {
  107.             var result = new Dictionary<string,string>();
  108.             var errorCode = "";
  109.             var errorMessage = "";
  110.             var token = GetToken();
  111.             try
  112.             {
  113.                 string webAddr = GenerateDocumentRegistrationUrl(operation, token);
  114.                 var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
  115.  
  116.                 Exception myException = new Exception("Сообщение администратору: Ошибка регистрации чека!");
  117.  
  118.                 ServicePointManager.Expect100Continue = true;
  119.                 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
  120.                                                         | SecurityProtocolType.Tls11
  121.                                                         | SecurityProtocolType.Tls12
  122.                                                         | SecurityProtocolType.Ssl3;
  123.  
  124.                 httpWebRequest.ContentType = "application/json; charset=utf-8";
  125.                 httpWebRequest.Method = "POST";
  126.  
  127.                 using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
  128.                 {
  129.                     string json = new JavaScriptSerializer().Serialize(check);
  130.                     streamWriter.Write(json);
  131.                     streamWriter.Flush();
  132.                 }
  133.                 var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
  134.  
  135.                 using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
  136.                 {
  137.                     JObject jObject = JObject.Parse(streamReader.ReadToEnd());
  138.                     var error = jObject["error"];
  139.  
  140.                     var status = (string)jObject["status"];
  141.                     var uuid = (string)jObject["uuid"];
  142.                     result.Add("status", status);
  143.                     result.Add("uuid", uuid);
  144.                     if (error.Any())
  145.                     {
  146.                         var str = new StringBuilder();
  147.                         str.AppendFormat("Ошибка регистрации чека по ссылке: {0}, с номеро {1} ответ: {2}", webAddr, check.external_id, jObject.ToString());
  148.                         errorCode = (string)jObject["error"]["code"];
  149.                         errorMessage = (string)jObject["error"]["text"];
  150.                         return result;
  151.                     }
  152.  
  153.                 }
  154.             }
  155.             catch (WebException ex)
  156.             {
  157.                 Console.WriteLine(ex.Message);
  158.                 _logger.InsertLog(Nop.Core.Domain.Logging.LogLevel.Error, "Ошибка регистрации чека", ex.Message.ToString());
  159.                 result.Add("status", "fail");            
  160.                 result.Add("error", "Системная ошибка" + ex.Message.ToString());
  161.                 return result;
  162.             }
  163.             return result;
  164.         }
  165.  
  166.  
  167.  
  168.         public string GetToken()
  169.         {
  170.             var token = "";
  171.             try
  172.             {                
  173.                 string webAddr = GenerateTokenUrl();
  174.                 var httpWebRequest = (HttpWebRequest)WebRequest.Create(webAddr);
  175.  
  176.                 Exception myException = new Exception("Сообщение администратору: Ошибка получения токена!");
  177.  
  178.                 ServicePointManager.Expect100Continue = true;
  179.                 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
  180.                                                         | SecurityProtocolType.Tls11
  181.                                                         | SecurityProtocolType.Tls12
  182.                                                         | SecurityProtocolType.Ssl3;
  183.  
  184.                 httpWebRequest.ContentType = "application/json; charset=utf-8";
  185.                 httpWebRequest.Method = "POST";
  186.  
  187.                 using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
  188.                 {
  189.                     string json = new JavaScriptSerializer().Serialize(new Auth { login = _atolSettings.Login,
  190.                                                                                   pass =_atolSettings.Password });
  191.                     streamWriter.Write(json);
  192.                     streamWriter.Flush();
  193.                 }
  194.                 var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
  195.  
  196.                 using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
  197.                 {
  198.                     JObject jObject = JObject.Parse(streamReader.ReadToEnd());
  199.                     token = (string)jObject["token"];
  200.                     if (String.IsNullOrEmpty(token))
  201.                     {
  202.                         var str = new StringBuilder();
  203.                         str.AppendFormat("Ошибка получения токена по ссылке: {0}, ответ: {1}", webAddr, jObject.ToString());
  204.                         throw new WebException(str.ToString(), myException, WebExceptionStatus.ProtocolError, httpResponse);
  205.                     }
  206.                 }
  207.             }
  208.             catch (WebException ex)
  209.             {
  210.                 Console.WriteLine(ex.Message);
  211.                 _logger.InsertLog(Nop.Core.Domain.Logging.LogLevel.Error, "Ошибка получение данных по лицензии", ex.Message.ToString());
  212.                 return null;
  213.             }
  214.             return token;
  215.         }
  216.  
  217.         public string GenerateTokenUrlFromInput(string URL, string ApiVersion)
  218.         {
  219.             return URL + ApiVersion + "/getToken";
  220.         }
  221.     }
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement