123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- using Microsoft.AspNetCore.WebUtilities;
- using Microsoft.Extensions.Logging;
- using Newtonsoft.Json.Linq;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Net.Http.Json;
- using System.Security.Cryptography;
- using System.Text;
- using System.Threading.Tasks;
- internal class CapitalbusMile
- {
- const string urlFormat = "http://ecar.capitalbusgroup.com.tw:8081/GetLastKM/{0}/{1}";
- const string key = "35505603";
- public static async Task<decimal?> GetMile(string carNumber, ILogger? logger = null)
- {
- try
- {
- HttpClient client = new HttpClient();
- string token = GetToken();
- string url = string.Format(urlFormat, carNumber, token);
- var result = await client.GetAsync(url);
- if (result.IsSuccessStatusCode)
- {
- Stream contentStream = await result.Content.ReadAsStreamAsync();
- var body = await new StreamReader(contentStream).ReadToEndAsync();
- //result.Headers.Add("Content-Type");
- //var body = await result.Content.ReadAsStringAsync();
- JObject jo = JObject.Parse(body);
- string resultString = jo.Value<string>("Result");// jo["State"].Value<int>();
- if (resultString == "Success" &&
- jo.ContainsKey("DR_MILE"))
- {
- decimal mileage = jo.Value<decimal>("DR_MILE");
- return mileage;
- }
- return 1;
- }
- }
- catch(Exception e)
- {
- }
- return -1;
- }
- private static string GetToken()
- {
- return GetToken(DateTime.UtcNow, key);
- }
- private static string GetToken(DateTime DateTimeNow, string key)
- {
- DateTime baseTime = DateTime.Parse("1970/01/01 00:00:00Z").ToUniversalTime();
- TimeSpan time = DateTimeNow - baseTime;
- return GetToken((decimal)time.TotalSeconds, key);
- }
- private static string GetToken(decimal seconds, string key)
- {
- var ts_str = (seconds + 3600).ToString("0.0000000");
- var ts_byte = Encoding.UTF8.GetBytes(ts_str);
- var hasher = new HMACSHA1(Encoding.UTF8.GetBytes(key));
- var hashResult = hasher.ComputeHash(ts_byte);
- var sha1_tshexstr = BitConverter.ToString(hashResult).Replace("-", "").ToLower();
- var token = string.Format("{0}:{1}", ts_str, sha1_tshexstr);
- var b64_token = Base64UrlTextEncoder.Encode(Encoding.UTF8.GetBytes(token));
- return b64_token + '=';
- }
- }
|