/// <summary> /// Create key /// </summary> /// <param name="data">IEET data</param> /// <param name="certificatePath">path to certificate</param> /// <returns></returns> public string CreatePKP(IEETData data) { string PKP = null; var values = new List <string>(); const string separator = "|"; values.Add(data.DIC); values.Add(data.WorkshopId.ToString()); values.Add(data.CashId); values.Add(data.OrderNumber); values.Add(data.ReceiptDate.GetAsText()); values.Add(data.TotalPrice.GetMoneyAsTextUSFormat()); var plainText = string.Join(separator, values); // Sign data using (RSACryptoServiceProvider csp = new RSACryptoServiceProvider()) { byte[] dataToSign = Encoding.UTF8.GetBytes(plainText); csp.ImportParameters(((RSACryptoServiceProvider)GetCertificate().PrivateKey).ExportParameters(true)); byte[] signature = csp.SignData(dataToSign, "SHA256"); // Verify signature if (!csp.VerifyData(dataToSign, "SHA256", signature)) { throw new Exception("Nepodařilo se vytvořit platný podpisový kód poplatníka."); } PKP = Convert.ToBase64String(signature); } return(PKP); }
/// <summary> /// Create EET xml /// </summary> /// <param name="data">body data</param> /// <param name="header">header data</param> /// <param name="control">control data - pkp and bkp</param> /// <param name="certificatePath">path to certificate</param> /// <param name="serviceNamespace">service namespace</param> /// <returns></returns> public string CreateXml(IEETData data, IEETHeader header, EETControl control, string serviceNamespace) { var trzba = new Trzba(Converters.HeaderConverter.Convert(header), Converters.DataConverter.Convert(data), Converters.ControlConverter.Convert(control)); XmlDocument doc = new XmlDocument(); MemoryStream ms = new MemoryStream(); new XmlSerializer(typeof(Trzba)).Serialize(ms, trzba); ms.Position = 0; using (StreamReader rd = new StreamReader(ms)) { doc.LoadXml(rd.ReadToEnd()); } XmlNode node = doc.SelectSingleNode("//*[local-name()='Trzba']"); XmlAttribute xa = doc.CreateAttribute("xmlns"); xa.Value = serviceNamespace; node.Attributes.Append(xa); var xmlRequest = node.OuterXml; return(SignMessage(xmlRequest, signatureManager.GetCertificate())); }
public static EETService.TrzbaDataType Convert(IEETData data) { return(new EETService.TrzbaDataType { dic_popl = data.DIC, dic_poverujiciho = data.DICEntrusting, cena_celkem = data.TotalPrice, id_provoz = data.WorkshopId, porad_cis = data.OrderNumber, dat_trzby = new DateTime(data.ReceiptDate.Year, data.ReceiptDate.Month, data.ReceiptDate.Day, data.ReceiptDate.Hour, data.ReceiptDate.Minute, data.ReceiptDate.Second, DateTimeKind.Local), zakl_nepodl_dph = data.TotalFreeTaxPrice ?? 0, zakl_nepodl_dphSpecified = data.TotalFreeTaxPrice.HasValue, dan1 = data.Tax1 ?? 0, dan1Specified = data.Tax1.HasValue, zakl_dan1 = data.Tax1Base ?? 0, zakl_dan1Specified = data.Tax1Base.HasValue, zakl_dan2 = data.Tax2Base ?? 0, zakl_dan2Specified = data.Tax2Base.HasValue, dan2 = data.Tax2 ?? 0, dan2Specified = data.Tax2.HasValue, dan3 = data.Tax3 ?? 0, dan3Specified = data.Tax3.HasValue, cest_sluz = data.TotalForTravelService ?? 0, cest_sluzSpecified = data.TotalForTravelService.HasValue, pouzit_zboz1 = data.TotalSoldUsedGoodsBaseRate ?? 0, pouzit_zboz1Specified = data.TotalSoldUsedGoodsBaseRate.HasValue, pouzit_zboz2 = data.TotalSoldUsedGoodsFirstRate ?? 0, pouzit_zboz2Specified = data.TotalSoldUsedGoodsFirstRate.HasValue, urceno_cerp_zuct = data.TotalDrawOrBill ?? 0, urceno_cerp_zuctSpecified = data.TotalDrawOrBill.HasValue, cerp_zuct = data.TotalThenDrawOrBill ?? 0, cerp_zuctSpecified = data.TotalThenDrawOrBill.HasValue, id_pokl = data.CashId, pouzit_zboz3 = data.TotalSoldUsedGoodsSecondRate ?? 0, pouzit_zboz3Specified = data.TotalSoldUsedGoodsSecondRate.HasValue, rezim = data.Regime, zakl_dan3 = data.Tax3Base ?? 0, zakl_dan3Specified = data.Tax3Base.HasValue }); }
public IEETResponse SendRequest(IEETHeader header, IEETData data, string certificatePath = null, string certificatePassword = null) { certificatePath = certificatePath ?? ConfigurationManager.AppSettings["eet.net.certificatePath"]; certificatePassword = certificatePassword ?? ConfigurationManager.AppSettings["eet.net.certificatePass"]; var signatureManager = new EETSignature(certificatePath, certificatePassword); var xmlCreator = new XmlCreator(signatureManager); var request = new WebRequestProvider(); var serviceInfo = ServiceInfo.GetServiceInfo(); var pkp = signatureManager.CreatePKP(data); var bkp = signatureManager.CreateBKP(pkp); var control = new EETControl { PKP = new PkpElement { Text = new string[] { pkp } }, BKP = new BkpElement { Text = new string[] { bkp } } }; EETResponse eetResponse; try { var xml = xmlCreator.CreateXml(data, header, control, serviceInfo.ServiceNamespace); var response = request.CallWebService(ConfigurationManager.AppSettings["eet.net.url"], serviceInfo.Action, xml); eetResponse = new EETResponse { Response = response, Request = xml, BKP = bkp, PKP = pkp }; var confirm = response.XmlDeserializeFromString <EETResponseModel>(); if (confirm == null) { eetResponse.Message = "Nevalidní zpráva ze serveru"; eetResponse.HasError = true; } else { eetResponse.ResponseModel = confirm; if (confirm.Body.Odpoved.Chyba == null) { eetResponse.HasError = false; eetResponse.Fik = confirm.Body.Odpoved.Potvrzeni.fik; eetResponse.EETDate = confirm.Body.Odpoved.Hlavicka.dat_prij; eetResponse.Message = string.Format("FIK {0}, BKP {1}, PKP {2}", eetResponse.Fik, eetResponse.BKP, eetResponse.PKP); } else { eetResponse.HasError = true; eetResponse.Message = string.Format("{0} ({1})", confirm.Body.Odpoved.Chyba.Value, confirm.Body.Odpoved.Chyba.kod); } if (confirm.Body.Odpoved.Varovani != null) { eetResponse.Warning = string.Format("{0} ({1})", confirm.Body.Odpoved.Varovani.Value, confirm.Body.Odpoved.Varovani.kod_varov); } } } catch (WebException ex) { Trace.WriteLine(ex.ToString()); eetResponse = new EETResponse(); eetResponse.HasError = true; eetResponse.Message = "Nepodařilo se připojit k serveru"; } catch (Exception ex) { eetResponse = new EETResponse(); eetResponse.HasError = true; eetResponse.Message = "Chyba při zpracování odpovědi. " + ex.Message; } return(eetResponse); }