I got Unauthorized 401 in Clearance api

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;
    }
  }

Unauthorized means there is a problem with your user and password. Make sure you have used PCSID BinarySecurityToken as user and PCSID Secret as password for Clearance and Reporting.

1 Like