async public Task <TaxRatesResponse> GetTaxRatesForLocation(TaxRatesRequest taxRateRequest) { if (taxRateRequest == null) { throw new ArgumentNullException("taxRateRequest"); } if (string.IsNullOrWhiteSpace(taxRateRequest.Zip)) { throw new ArgumentException("Param Zip is required for US.", nameof(taxRateRequest)); } try { var taxRateRequestUri = BuildTaxRateRequestUri(taxRateRequest); var taxRateJarResponse = await TaxJarHttpClientProvider.GetAsync <TaxRatesJarResponse>(taxRateRequestUri, Constants.API_KEY); return(taxRateJarResponse.Rate); } catch (Exception ex) { throw new TaxCalculatorException(ex.Message); } }
async public Task <TaxesResponse> GetTaxesForOrder(TaxesRequest taxesRequest) { if (taxesRequest == null) { throw new ArgumentNullException("taxesRequest"); } if (string.IsNullOrWhiteSpace(taxesRequest.ToCountry)) { throw new ArgumentException("Param ToCountry is required.", nameof(taxesRequest)); } if (string.IsNullOrWhiteSpace(taxesRequest.ToZip)) { if (taxesRequest.ToCountry == Constants.COUNTRY_CODE_US) { throw new ArgumentException("Param ToZip is required for US.", nameof(taxesRequest)); } } if (string.IsNullOrWhiteSpace(taxesRequest.ToState)) { if (taxesRequest.ToCountry == Constants.COUNTRY_CODE_US || taxesRequest.ToCountry == Constants.COUNTRY_CODE_CANADA) { throw new ArgumentException("Param ToState is required for US and CA.", nameof(taxesRequest)); } } // TODO: Finish all other possible validations as per api doc: https://developers.taxjar.com/api/reference/#post-calculate-sales-tax-for-an-order try { var taxesResponse = await TaxJarHttpClientProvider.PostAsync <TaxesJarResponse, TaxesRequest>("taxes", taxesRequest, Constants.API_KEY); return(taxesResponse.Tax); } catch (Exception ex) { throw new TaxCalculatorException(ex.Message); } }