internal static Dto.QueryTaxpayerRequest CreateQueryTaxpayerRequest(TechnicalUser user, SoftwareIdentification software, string taxNumber) { var request = CreateRequest <Dto.QueryTaxpayerRequest>(user, software); request.taxNumber = taxNumber; return(request); }
private static string GetRequestSignature(TechnicalUser user, string requestId, DateTime timestamp, string additionalSignatureData = null) { var formattedTimestamp = timestamp.ToString("yyyyMMddHHmmss"); var signatureData = $"{requestId}{formattedTimestamp}{user.SigningKey.Value}{additionalSignatureData}"; return(Sha512.GetSha3Hash(signatureData)); }
private static T CreateRequest <T>(TechnicalUser user, SoftwareIdentification software, string additionalSignatureData = null) where T : Dto.BasicRequestType, new() { var requestId = RequestId.CreateRandom(); var timestamp = DateTime.UtcNow; return(new T { header = new Dto.BasicHeaderType { requestId = requestId, timestamp = timestamp.ToString("yyyy-MM-ddTHH:mm:ssZ"), requestVersion = Dto.RequestVersionType.Item20, headerVersion = Dto.HeaderVersionType.Item10 }, user = new Dto.UserHeaderType { login = user.Login.Value, passwordHash = user.PasswordHash, taxNumber = user.TaxId.Value, requestSignature = GetRequestSignature(user, requestId, timestamp, additionalSignatureData) }, software = new Dto.SoftwareType { softwareId = software.Id, softwareName = software.Name, softwareOperation = (Dto.SoftwareOperationType)software.Type, softwareMainVersion = software.MainVersion, softwareDevName = software.DeveloperName, softwareDevContact = software.DeveloperContact, softwareDevCountryCode = software.DeveloperCountry, softwareDevTaxNumber = software.DeveloperTaxNumber } }); }
private static T CreateRequest <T>(TechnicalUser user, SoftwareIdentification software, string additionalSignatureData = null) where T : Dto.BasicOnlineInvoiceRequestType, new() { var requestId = RequestId.CreateRandom(); var nowUtc = DateTime.UtcNow; var timestamp = new DateTime(nowUtc.Year, nowUtc.Month, nowUtc.Day, nowUtc.Hour, nowUtc.Minute, nowUtc.Second, DateTimeKind.Utc); return(new T { header = new Dto.BasicHeaderType { requestId = requestId, timestamp = timestamp, requestVersion = RequestVersion, headerVersion = HeaderVersion }, user = new Dto.UserHeaderType { login = user.Login.Value, passwordHash = new Dto.CryptoType { cryptoType = PasswordEncryptionAlgorithm, Value = user.PasswordHash }, taxNumber = user.TaxId.TaxpayerNumber, requestSignature = new Dto.CryptoType { cryptoType = RequestEncryptionAlgorithm, Value = GetRequestSignature(user, requestId, timestamp, additionalSignatureData) } }, software = new Dto.SoftwareType { softwareId = software.Id, softwareName = software.Name, softwareOperation = (Dto.SoftwareOperationType)software.Type, softwareMainVersion = software.MainVersion, softwareDevName = software.DeveloperName, softwareDevContact = software.DeveloperContact, softwareDevCountryCode = software.DeveloperCountry, softwareDevTaxNumber = software.DeveloperTaxNumber } }); }
public static NavClient GetNavClient() { var technicalUser = new TechnicalUser( login: Login, password: Password, signingKey: SigningKey, taxId: TaxPayerId, encryptionKey: EncryptionKey ); var softwareIdentification = new SoftwareIdentification( id: "123456789123456789", name: "Test", type: SoftwareType.LocalSoftware, mainVersion: "1.0", developerName: "Test", developerContact: "*****@*****.**" ); return(new NavClient(technicalUser, softwareIdentification, NavEnvironment.Test)); }
private static Dto.ManageInvoiceRequest CreateManageInvoicesRequest <T>( TechnicalUser user, SoftwareIdentification software, ExchangeToken token, Dto.ManageInvoiceOperationType operation, ISequence <T> invoices, Func <T, Dto.InvoiceData> invoiceDataGetter) { var operations = invoices.Values.Select(item => { var invoiceData = invoiceDataGetter(item.Value); var invoiceDataBytes = Encoding.UTF8.GetBytes(XmlManipulator.Serialize(invoiceData)); return(new Dto.InvoiceOperationType { index = item.Index, invoiceData = invoiceDataBytes, invoiceOperation = operation, electronicInvoiceHash = invoiceData.completenessIndicator.Match( t => new Dto.CryptoType { cryptoType = RequestEncryptionAlgorithm, Value = Sha512.GetSha3Hash(Convert.ToBase64String(invoiceDataBytes)) }, f => null ) }); }); var invoiceHashes = operations.Select(t => Sha512.GetSha3Hash($"{t.invoiceOperation}{Convert.ToBase64String(t.invoiceData)}")); var invoiceSignatureData = string.Join("", invoiceHashes); var request = CreateRequest <Dto.ManageInvoiceRequest>(user, software, invoiceSignatureData); request.exchangeToken = Encoding.UTF8.GetString(token.Value); request.invoiceOperations = new Dto.InvoiceOperationListType { compressedContent = false, invoiceOperation = operations.ToArray() }; return(request); }
private static Dto.ManageInvoiceRequest CreateManageInvoicesRequest <T>(TechnicalUser user, SoftwareIdentification software, ExchangeToken token, Dto.ManageInvoiceOperationType operation, ISequentialEnumerable <T> invoices, Func <T, Dto.InvoiceData> mapper) { var operations = invoices.Select(item => new Dto.InvoiceOperationType { index = item.Index, invoiceData = Encoding.UTF8.GetBytes(XmlManipulator.Serialize(mapper(item.Item))), invoiceOperation = operation }); var invoiceHashes = operations.Select(t => Sha512.GetSha3Hash($"{t.invoiceOperation}{Convert.ToBase64String(t.invoiceData)}")); var invoiceSignatureData = string.Join("", invoiceHashes); var request = CreateRequest <Dto.ManageInvoiceRequest>(user, software, invoiceSignatureData); request.exchangeToken = Encoding.UTF8.GetString(token.Value); request.invoiceOperations = new Dto.InvoiceOperationListType { compressedContent = false, invoiceOperation = operations.ToArray() }; return(request); }
public NavClient(TechnicalUser technicalUser, SoftwareIdentification softwareIdentification, NavEnvironment environment) { TechnicalUser = technicalUser; SoftwareIdentification = softwareIdentification; Client = new Client(HttpClient, environment); }
internal static ResponseResult <ExchangeToken, ExchangeTokenErrorCode> MapExchangeToken(Dto.TokenExchangeResponse response, TechnicalUser user) { try { var decryptedToken = Aes.Decrypt(user.EncryptionKey.Value, response.encodedExchangeToken); return(new ResponseResult <ExchangeToken, ExchangeTokenErrorCode>(successResult: new ExchangeToken( value: decryptedToken, validFrom: response.tokenValidityFrom, validTo: response.tokenValidityTo ))); } catch { return(new ResponseResult <ExchangeToken, ExchangeTokenErrorCode>(operationErrorResult: new ErrorResult <ExchangeTokenErrorCode>( errorCode: ExchangeTokenErrorCode.InvalidEncryptionKey ))); } }
internal static Dto.ManageInvoiceRequest CreateManageInvoicesRequest(TechnicalUser user, SoftwareIdentification software, ExchangeToken token, ISequence <ModificationInvoice> invoices) { return(CreateManageInvoicesRequest(user, software, token, Dto.ManageInvoiceOperationType.MODIFY, invoices, d => RequestMapper.MapModificationInvoice(d))); }
internal static Dto.ManageInvoiceRequest CreateManageInvoicesRequest(TechnicalUser user, SoftwareIdentification software, ExchangeToken token, ISequence <Invoice> invoices) { return(CreateManageInvoicesRequest(user, software, token, Dto.ManageInvoiceOperationType.CREATE, invoices, i => RequestMapper.MapInvoice(i))); }
internal static Dto.QueryTransactionStatusRequest CreateQueryTransactionStatusRequest(TechnicalUser user, SoftwareIdentification software, string invoiceId) { var request = CreateRequest <Dto.QueryTransactionStatusRequest>(user, software); request.transactionId = invoiceId; return(request); }
internal static Dto.TokenExchangeRequest CreateTokenExchangeRequest(TechnicalUser user, SoftwareIdentification software) { return(CreateRequest <Dto.TokenExchangeRequest>(user, software)); }