For a deeper look into our World Check One API, look into:

Overview |  Quickstart |  Documentation |  Downloads

question

Upvotes
Accepted
5 6 3 8

Handshake failed due to an unspected packet format

Hi team,

I tried the sample code provided previously on a C# console project, which worked.

I however found the same set of code not working in a web application project (MVC.Net) when I paste the code in C# controller. I am getting the following error. Pasted the full code below and masked the api key and api secret.

        static void Main(string[] args)
        {
            DateTime dateValue = DateTime.UtcNow; // get the datetime NOW GMT
            string date = dateValue.ToString("R"); // WC1 header requires GMT datetime stamp
            Console.WriteLine(date);
            //set host and credentials to the WC1 API Pilot server WC1SampleClientAPI account
            string gatewayurl = "/v1/";
            string gatewayhost = "rms-world-check-one-api-pilot.thomsonreuters.com";
            // Here is where you enter your api keys
            string apikey = "";
            string apisecret = "";
            string requestendpoint = "https://rms-world-check-one-api-pilot.thomsonreuters.com/v1/groups";
            // Assemble the GET request - NOTE every character including spaces have to be EXACT 
            // for the API server to decode the authorization signature       
            string dataToSign = "(request-target): get " + gatewayurl + "groups\n" +
                "host: " + gatewayhost + "\n" +   // no https only the host name
                "date: " + date;                  // GMT date as a string
            // The Request and API secret are now combined and encrypted
            string hmac = generateAuthHeader(dataToSign, apisecret);
            // Assemble the authorization string - This needs to match the dataToSign elements 
            // i.e. requires ONLY host date (no content body for a GET request)
            //- NOTE every character including spaces have to be EXACT else decryption will fail with 401 Unauthorized
            string authorisation = "Signature keyId=\"" + apikey + "\",algorithm=\"hmac-sha256\",headers=\"(request-target) host date\",signature=\"" + hmac + "\"";
            // Send the Request to the API server
            HttpWebRequest WebReq = (HttpWebRequest)WebRequest.Create(requestendpoint);
            // Set the Headers
            WebReq.Method = "GET";
            WebReq.Headers.Add("Authorization", authorisation);
            WebReq.Headers.Add("Cache-Control", "no-cache");
            WebReq.Date = dateValue; // use datetime value GMT time
            // Get the Response - Status OK
            HttpWebResponse WebResp = (HttpWebResponse)WebReq.GetResponse();
            // Status information about the request
            Console.WriteLine(WebResp.StatusCode);
            Console.WriteLine(WebResp.ResponseUri);
            // Get the Response data
            Stream Answer = WebResp.GetResponseStream();
            StreamReader _Answer = new StreamReader(Answer);
            string jsontxt = _Answer.ReadToEnd();
            // convert json text to a pretty printout
            //var obj = Newtonsoft.Json.JsonConvert.DeserializeObject(jsontxt);
            //var f = Newtonsoft.Json.JsonConvert.SerializeObject(obj, Newtonsoft.Json.Formatting.Indented);
            //Console.WriteLine(f);
            Console.WriteLine("Press any key");
            Console.ReadKey(); // pause for any key
        }
        // Combine the data signature and the API secret key to get the HMAC
        // This is the Microsoft HMACSHA256 code copied from the documentation
        public static string generateAuthHeader(string dataToSign, string apisecret)
        {
            byte[] secretKey = Encoding.UTF8.GetBytes(apisecret);
            HMACSHA256 hmac = new HMACSHA256(secretKey);
            hmac.Initialize();
            byte[] bytes = Encoding.UTF8.GetBytes(dataToSign);
            byte[] rawHmac = hmac.ComputeHash(bytes);
            return (Convert.ToBase64String(rawHmac));
        }

Thanks

world-checkworld-check-oneexceptionhandshake
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

@cliff.ching

Hi,

Please let us know the progress of this question.

If it is still an issue, please post again and provide the information requested by Irfan.Khan.

Regards,

AHS

Upvotes
Accepted
4.2k 8 5 6

Hello @cliff.ching ,

Can you please elaborate the issue that you are facing? Request you to be descriptive so that I can assist. Are you suggesting that your API requests are not reaching our WC1 API?

Let us know the error when you run the code to interact with WC1 API.

Kindly let us know the reason for connection logs from our end. If you like to check if your server is connecting well to ours, I have already suggested you to use Postman. Alternatively, you can use HTTP cURL to test your connections or may be run the sample code in your C# console project.

Thanks.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
4.2k 8 5 6

Hello @cliff.ching ,

Can you check the port number you are using to connect? Is it 80 or 443?

You need to connect to the port number 443 for a HTTPS connection.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
5 6 3 8

Hi,

The port is set to 443 originally. Hence, should not be the reason.

We tried adding WebReq.Proxy = new WebProxy("proxyapbusiness.cib.net", 3125);

and we manage to get a web response which stated that URL is Forbidden. Kindly advice.


forbidden.jpg (49.0 KiB)
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
4.2k 8 5 6

Hello @cliff.ching ,

I have checked the sample .NET code and it seems to be working fine.

The first error reported generally occurs due to wrong port number or may be invalid SSL connection from the client's end.
As I have not used MVC.net, I am not aware of its internal working and hence do not have any comments to add to this.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
5 6 3 8

Hi,

Is there a way to test the connection with the API using web browser ? We are trying to check the connections using this method.

What should a except to see if I go to the uri link ?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
5 6 3 8

Can we get any connection log ?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
4.2k 8 5 6

Hello @cliff.ching ,

You cannot test the connection using the web browser. If you run the URI in the browser, you will get a 401 error.

I advise you to use Postman to test your connections. I recommend the native Postman app. You can download the Postman collection and environment from the developers community and import them to the Postman, to test the APIs and if they are connecting correctly.

You will a get a detailed logs of your API requests in the Postman Console logs after you have send your API requests using Postman.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvotes
5 6 3 8

Hi,

Can we get any connection log from your end ?

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.