Am make sure I generate CSID very well. and create XML file and verified it from sandbox.
But when do Clearance I got unauthorized 401.
Please download my project in C# WinForms. and test Form1 Debug point.
I have the following code in Clearance api:
I passed userName (CSID as base64), password (Secret Key of CSID)
public InvoiceClearanceResponse CallClearanceAPI(
string userName,
string password,
InvoiceReportingRequest inv)
{
using (HttpClient httpClient = new HttpClient())
{
httpClient.BaseAddress = new Uri(GlobalVariables.BaseUrl);
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
httpClient.DefaultRequestHeaders.Add("accept-language", "en");
httpClient.DefaultRequestHeaders.Add("Clearance-Status", "1");
httpClient.DefaultRequestHeaders.Add("Accept-Version", "V2");
string base64String = Convert.ToBase64String(Encoding.ASCII.GetBytes(userName + ":" + password));
httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Authorization", "Basic " + base64String);
ServicePointManager.SecurityProtocol = (SecurityProtocolType) 4032;
StringContent content = new StringContent(JsonConvert.SerializeObject(inv), Encoding.UTF8, "application/json");
HttpResponseMessage result1 = httpClient.PostAsync(GlobalVariables.InvoiceClearanceEndPoint(this.mode), content).Result;
string result2 = result1.Content.ReadAsStringAsync().Result;
InvoiceClearanceResponse clearanceResponse = new InvoiceClearanceResponse();
if (result1.IsSuccessStatusCode)
{
clearanceResponse = JsonConvert.DeserializeObject<InvoiceClearanceResponse>(result2);
XmlDocument doc = new XmlDocument();
if (!string.IsNullOrEmpty(clearanceResponse.ClearedInvoice))
{
doc.PreserveWhitespace = true;
clearanceResponse.SingedXML = Utility.Base64Dencode(clearanceResponse.ClearedInvoice);
doc.LoadXml(clearanceResponse.SingedXML);
clearanceResponse.QRCode = Utility.GetNodeInnerText(doc, SettingsParams.QR_CODE_XPATH);
}
clearanceResponse.IsSuccess = true;
}
if (result1.StatusCode == HttpStatusCode.Accepted)
{
clearanceResponse = JsonConvert.DeserializeObject<InvoiceClearanceResponse>(result2);
foreach (WarningModel warningMessage in clearanceResponse.validationResults.WarningMessages)
clearanceResponse.WarningMessage = warningMessage.Code + " : " + warningMessage.Message + "\n";
XmlDocument doc = new XmlDocument();
if (!string.IsNullOrEmpty(clearanceResponse.ClearedInvoice))
{
doc.PreserveWhitespace = true;
clearanceResponse.SingedXML = Utility.Base64Dencode(clearanceResponse.ClearedInvoice);
doc.LoadXml(clearanceResponse.SingedXML);
clearanceResponse.QRCode = Utility.GetNodeInnerText(doc, SettingsParams.QR_CODE_XPATH);
}
clearanceResponse.IsSuccess = true;
}
if (result1.StatusCode == HttpStatusCode.BadRequest)
clearanceResponse = JsonConvert.DeserializeObject<InvoiceClearanceResponse>(result2);
if (result1.StatusCode == HttpStatusCode.Unauthorized)
{
clearanceResponse = new InvoiceClearanceResponse();
clearanceResponse.ErrorMessage = "Unauthorized in Clearance API";
clearanceResponse.ClearanceStatus = "Unauthorized";
}
if (result1.StatusCode == HttpStatusCode.NotAcceptable)
{
clearanceResponse = new InvoiceClearanceResponse();
clearanceResponse.ErrorMessage = "This Version is not supported or not provided in the header.";
clearanceResponse.ClearanceStatus = "NotAcceptable";
}
if (result1.StatusCode == HttpStatusCode.InternalServerError)
{
clearanceResponse = new InvoiceClearanceResponse();
ErrorModel errorModel1 = new ErrorModel();
ErrorModel errorModel2 = JsonConvert.DeserializeObject<ErrorModel>(result2);
clearanceResponse.ErrorMessage = errorModel2.Code + " : " + errorModel2.Message;
clearanceResponse.ClearanceStatus = "InternalServerError";
}
return clearanceResponse;
}
}