调用Licenspring Webhook API时遇到400错误的请求

时间:2020-05-25 09:59:06

标签: c#

我正在使用窗口表单,并调用Licensespring webhook api的方法checklicense并收到400错误的请求。我想检查用户是否已经根据硬件ID,用户名和产品名称创建了试用许可证。在下面可以找到我的代码。

  private static async  void GetLicenseKeyByHardwareIdAndUser(string productCode)
         {
                    string sharedKey = "MVc12g949M7d1XiUM1F2gcJzNzKnXAaTgjrvEzh7AZc";
                    var apiKey = "ccdab2c7-0aa7-4c86-9d79-989f37980dce";

                    var hardwareId = "82A9-EA17-7F62-3BB9-F06A-659C-2280-8F9C-9470-BDC8-B2A2-9BEC-5B23-E89F-362D-1D99";

                    var product = "vp";

                    var username = "John@gmail.com";

                    var builder = new UriBuilder("https://api.licensespring.com/api/v4/check_license");
                    builder.Port = -1;
                    //generating url with query string having parameter hardware_id,username and product.
                    var query = HttpUtility.ParseQueryString(builder.Query);
                    query["hardware_id"] = hardwareId+"&";
                    query["username"] = username + "&";
                    query["product"] = product;

                    builder.Query = query.ToString();
                    string url = builder.ToString();

                    var date = DateTime.UtcNow.ToString();

                    //Preparing signed request header key
                    var authorization = string.Format("algorithm=hmac-sha256,headers=date," +
                        "signature={0},apikey={1}",CreateSHA256Signature(sharedKey), apiKey);

                    ServicePointManager.Expect100Continue = true;
                    ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

                    var request = new HttpRequestMessage(HttpMethod.Get, new Uri(url));

                         //Adding headers here 
                        request.Headers.Accept.Add(
                    new MediaTypeWithQualityHeaderValue("application/json"));
                        request.Headers.TryAddWithoutValidation("Date", date);
                        request.Headers.TryAddWithoutValidation("Authorization", authorization);

                    //Send the request.
                   var response = await new HttpClient().SendAsync(request);
                    if (response.IsSuccessStatusCode)
                        {
                            var fileJsonString = await response.Content.ReadAsStringAsync();

                            var result = JsonConvert.DeserializeObject<dynamic>(fileJsonString).ToList();
                        }

            }


     public static string CreateSHA256Signature(string sharedKey)
        {
            var date = DateTime.UtcNow.ToString();
            var singningString = string.Format("licenseSpring\ndate: {0}", date);
            var hexHash = "";

            var encoding = new System.Text.ASCIIEncoding();
            byte[] keyByte = encoding.GetBytes(sharedKey);
            byte[] messageBytes = encoding.GetBytes(singningString);
            using (var hmacsha256 = new HMACSHA256(keyByte))
            {
                byte[] hashmessage = hmacsha256.ComputeHash(messageBytes);
                hexHash = Convert.ToBase64String(hashmessage);
            }
            return hexHash;
        }

因此,如您现在所见,我共享了两种方法。一个是“ GetLicenseKeyByHardwareIdAndUser”,它正在调用webhook check_license api方法,第二个是在发送aiuthorization头时计算第一个方法中需要的带符号SH256 base64字符串头。 网站check License Method上已经有用Nodejs编写的参考代码 由于我被困了很长时间,请在这里帮助我。谢谢。

0 个答案:

没有答案