private void sbEncrypt_Click(object sender, EventArgs e) { var _type_code = String.Format("{0:00}{1:00}", (cbKind1.SelectedIndex + 1), (cbKind2.SelectedIndex + 1)); var _load_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\6-{_type_code}.xml"); { tbSourceXml.Text = File.ReadAllText(_load_file, Encoding.UTF8); WriteLine("plain data read from " + _load_file); } var _plain_xml = File.ReadAllBytes(_load_file); var _rvalue = UCertHelper.SNG.UserSignCert.RandomNumber; ArrayList _taxinvoice = new ArrayList(); { TaxInvoiceStruct _s = new TaxInvoiceStruct { SignerRValue = _rvalue, TaxInvoice = _plain_xml }; _taxinvoice.Add(_s); } var _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\7-{_type_code}.ber"); { File.WriteAllBytes(_save_file, GetTaxInvoicePackage(_taxinvoice)); WriteLine("tax invoice package write on the " + _save_file); } var _nipaCert2 = UCertHelper.SNG.NtsPublicKey; var _encoded = CmsManager.SNG.GetContentInfo(_nipaCert2, _taxinvoice); _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\7-{_type_code}.asn"); { File.WriteAllBytes(_save_file, _encoded); tbSourceXml.Text = Convert.ToBase64String(_encoded); WriteLine("encrypted result write on the " + _save_file); } MessageBox.Show(String.Format("암호화된 형식의 전자세금계산서\n\r{0} 파일을\n\r업로드 하여 검증을 실시 하세요.", _save_file)); }
/// <summary> /// 2048비트 인증서로 서명된 일반 전자세금계산서(1건)와 당초승인번호가 기입된 수정 전자세금계산서(1건) /// 그리고 2048비트 인증서로 서명된 일반 계산서(1건)와 당초승인번호가 기입된 수정 계산서(1건)는 반드시 첨부해야 합니다.(총 4건) /// </summary> /// <returns></returns> private bool CreateInvoce() { var _ntsCert2 = UCertHelper.SNG.NtsPublicKey; //-------------------------------------------------------------------------------------------------------------------// // 세금계산서 작성 //-------------------------------------------------------------------------------------------------------------------// // 2048_전자세금계산서 var _read_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\2-0101.xml"); var _c_0101 = new XmlDocument(); _c_0101.LoadXml((new StreamReader(_read_file, Encoding.UTF8)).ReadToEnd()); var _t_0101 = Convertor.SNG.CanonicalizationToDocument(_c_0101, "\t"); // 2048_전자계산서 _read_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\2-0301.xml"); var _c_0301 = new XmlDocument(); _c_0301.LoadXml((new StreamReader(_read_file, Encoding.UTF8)).ReadToEnd()); var _t_0301 = Convertor.SNG.CanonicalizationToDocument(_c_0301, "\t"); // 2048_수정전자세금계산서 _read_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\2-0201.xml"); var _c_0201 = new XmlDocument(); _c_0201.LoadXml((new StreamReader(_read_file, Encoding.UTF8)).ReadToEnd()); var _t_0201 = Convertor.SNG.CanonicalizationToDocument(_c_0201, "\t"); // 2048_수정전자계산서 _read_file = Path.Combine(UCfgHelper.SNG.OutputFolder, $"unitest\\2-0401.xml"); var _c_0401 = new XmlDocument(); _c_0401.LoadXml((new StreamReader(_read_file, Encoding.UTF8)).ReadToEnd()); var _t_0401 = Convertor.SNG.CanonicalizationToDocument(_c_0401, "\t"); //-------------------------------------------------------------------------------------------------------------------// // 전자서명 //-------------------------------------------------------------------------------------------------------------------// var _read_stream = new MemoryStream(Encoding.UTF8.GetBytes(_t_0101.OuterXml)); var _p_0101 = XSignature.SNG.GetSignedXmlStream(_read_stream, UCertHelper.SNG.UserSignCert.X509Cert2); _read_stream = new MemoryStream(Encoding.UTF8.GetBytes(_t_0301.OuterXml)); var _p_0301 = XSignature.SNG.GetSignedXmlStream(_read_stream, UCertHelper.SNG.UserSignCert.X509Cert2); _read_stream = new MemoryStream(Encoding.UTF8.GetBytes(_t_0201.OuterXml)); var _p_0201 = XSignature.SNG.GetSignedXmlStream(_read_stream, UCertHelper.SNG.UserSignCert.X509Cert2); _read_stream = new MemoryStream(Encoding.UTF8.GetBytes(_t_0401.OuterXml)); var _p_0401 = XSignature.SNG.GetSignedXmlStream(_read_stream, UCertHelper.SNG.UserSignCert.X509Cert2); var _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, @"interop\12.전자세금계산서.xml"); { string _xmltxt = (new StreamReader(_p_0101)).ReadToEnd() + "\n"; _p_0101.Seek(0, SeekOrigin.Begin); _xmltxt += (new StreamReader(_p_0301)).ReadToEnd() + "\n"; _p_0301.Seek(0, SeekOrigin.Begin); _xmltxt += (new StreamReader(_p_0201)).ReadToEnd() + "\n"; _p_0201.Seek(0, SeekOrigin.Begin); _xmltxt += (new StreamReader(_p_0401)).ReadToEnd() + "\n"; _p_0401.Seek(0, SeekOrigin.Begin); File.WriteAllText(_save_file, _xmltxt); WriteLine("write invoice document on the " + _save_file); } //-------------------------------------------------------------------------------------------------------------------// // 암호화 //-------------------------------------------------------------------------------------------------------------------// var _rvalue = UCertHelper.SNG.UserSignCert.RandomNumber; var _taxinvoice = new ArrayList(); { var _s_0301 = new TaxInvoiceStruct { SignerRValue = _rvalue, TaxInvoice = _p_0301.ToArray() }; _taxinvoice.Add(_s_0301); var _s_0101 = new TaxInvoiceStruct { SignerRValue = _rvalue, TaxInvoice = _p_0101.ToArray() }; _taxinvoice.Add(_s_0101); var _s_0401 = new TaxInvoiceStruct { SignerRValue = _rvalue, TaxInvoice = _p_0401.ToArray() }; _taxinvoice.Add(_s_0401); var _s_0201 = new TaxInvoiceStruct { SignerRValue = _rvalue, TaxInvoice = _p_0201.ToArray() }; _taxinvoice.Add(_s_0201); } var _encrypted = CmsManager.SNG.GetContentInfo(_ntsCert2, _taxinvoice); _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, @"interop\14.두번째ReferenceTarget.asn"); { File.WriteAllBytes(_save_file, _encrypted); WriteLine("write encrypted on the " + _save_file); } //-------------------------------------------------------------------------------------------------------------------// // SOAP Envelope //-------------------------------------------------------------------------------------------------------------------// var _time_stamp = DateTime.Now; var _soap_header = new Header() { ToAddress = tbTaxInvoiceSubmitUrl.Text.Trim(), Action = Request.eTaxInvoiceSubmit, Version = UCfgHelper.SNG.eTaxVersion, FromParty = new Party(UCfgHelper.SNG.SenderBizNo, UCfgHelper.SNG.SenderBizName), ToParty = new Party(UCfgHelper.SNG.ReceiverBizNo, UCfgHelper.SNG.ReceiverBizName), ReplyTo = UCfgHelper.SNG.ReplyAddress, OperationType = Request.OperationType_InvoiceSubmit, MessageType = Request.MessageType_Request, TimeStamp = _time_stamp, MessageId = Packing.SNG.GetMessageId(_time_stamp) }; var _soap_body = new Body() { SubmitID = Packing.SNG.GetSubmitID(_soap_header.TimeStamp, UCfgHelper.SNG.RegisterId), ReferenceID = Guid.NewGuid().ToString(), TotalCount = 4 // 전자세금계산서의 총 개수 }; //-------------------------------------------------------------------------------------------------------------------// // SOAP Signature //-------------------------------------------------------------------------------------------------------------------// var _signed_xml = Packing.SNG.GetSignedSoapEnvelope(_encrypted, UCertHelper.SNG.AspSignCert.X509Cert2, _soap_header, _soap_body); _save_file = Path.Combine(UCfgHelper.SNG.OutputFolder, @"interop\17.전자서명후.txt"); { File.WriteAllText(_save_file, _signed_xml.OuterXml, Encoding.UTF8); tbSourceXml.Text = File.ReadAllText(_save_file, Encoding.UTF8); WriteLine("transforms write on the " + _save_file); } return(true); }
private MimeContent DoSendReport(DataRowCollection p_workingRows, DateTime p_reportTime) { //-------------------------------------------------------------------------------------------------------------------// // 암호화 //-------------------------------------------------------------------------------------------------------------------// X509Certificate2 _ntsCert2 = UCertHelper.NtsPublicKey; ArrayList _invoices = new ArrayList(); for (int i = 0; i < p_workingRows.Count; i++) { string _document = Convert.ToString(p_workingRows[i]["document"]); string _rvalue = Convert.ToString(p_workingRows[i]["rvalue"]); TaxInvoiceStruct _taxStruct = new TaxInvoiceStruct { SignerRValue = Convert.FromBase64String(_rvalue), TaxInvoice = Encoding.UTF8.GetBytes(_document) }; _invoices.Add(_taxStruct); } byte[] _encrypted = CmsManager.SNG.GetContentInfo(_ntsCert2, _invoices); //-------------------------------------------------------------------------------------------------------------------// // SOAP Envelope //-------------------------------------------------------------------------------------------------------------------// Header _soapHeader = new Header(); { _soapHeader.ToAddress = UAppHelper.TaxInvoiceSubmitUrl; _soapHeader.Action = Request.eTaxInvoiceSubmit; _soapHeader.Version = UAppHelper.eTaxVersion; _soapHeader.FromParty = new Party(UAppHelper.SenderBizNo, UAppHelper.SenderBizName); _soapHeader.ToParty = new Party(UAppHelper.ReceiverBizNo, UAppHelper.ReceiverBizName); _soapHeader.ReplyTo = UAppHelper.ReplyAddress; _soapHeader.OperationType = Request.OperationType_InvoiceSubmit; _soapHeader.MessageType = Request.MessageType_Request; _soapHeader.TimeStamp = p_reportTime; _soapHeader.MessageId = Packing.SNG.GetMessageId(_soapHeader.TimeStamp); } Body _soapBody = new Body(); { _soapBody.SubmitID = Packing.SNG.GetSubmitID(_soapHeader.TimeStamp, UAppHelper.RegisterId); _soapBody.ReferenceID = Guid.NewGuid().ToString(); _soapBody.TotalCount = p_workingRows.Count; } //-------------------------------------------------------------------------------------------------------------------// // SOAP Signature //-------------------------------------------------------------------------------------------------------------------// XmlDocument _signedXml = Packing.SNG.GetSignedSoapEnvelope(_encrypted, UCertHelper.AspSignCert.X509Cert2, _soapHeader, _soapBody); //-------------------------------------------------------------------------------------------------------------------// // Request //-------------------------------------------------------------------------------------------------------------------// return(Request.SNG.TaxInvoiceSubmit( Encoding.UTF8.GetBytes(_signedXml.OuterXml), _encrypted, _soapBody.ReferenceID, UAppHelper.TaxInvoiceSubmitUrl )); }