using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Net.Http; using System.Net.Http.Headers; using System.Net.Http.Json; using System.Text; using System.Threading.Tasks; using TEAMModelOS.SDK; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models; namespace TEAMModelOS.SDK { public class ThirdApisService { private readonly HttpClient _httpClient; public ThirdApisService(HttpClient httpClient) { _httpClient = httpClient; } public async Task Post(string url, string Code, string PassKey,string privateKey, Dictionary data) { string result = ""; HttpResponseMessage response=null; try { string json = data.ToJsonString(); string Content = AESHelper.AESEncrypt(json, privateKey); string paramStr = "Code={0}&PassKey={1}&Content={2}"; string sendMsg = string.Format(paramStr, Code, PassKey, Content); #region 签名 Signature SortedDictionary signatureDC = new SortedDictionary(); var timeSpan = (DateTime.Now - new DateTime(1970, 1, 1, 0, 0, 0)); signatureDC["t"] = timeSpan.TotalMilliseconds.ToString(); signatureDC["Code"] = Code; signatureDC["PassKey"] = PassKey; string signatureStr = signatureDC.ToJsonString(); string signature = AESHelper.AESEncrypt(signatureStr, privateKey); #endregion _httpClient.DefaultRequestHeaders.Add("Signature", signature); using (var request = new HttpRequestMessage()) { request.Method = new HttpMethod("POST"); request.RequestUri = new Uri(url); request.Content = new StringContent(sendMsg); request.Content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded"); response = await _httpClient.SendAsync(request); result = await response.Content.ReadAsStringAsync(); } ScsResult scsResult = result.ToObject(); if (scsResult.result) { scsResult.content = AESHelper.AESDecrypt(scsResult.content, privateKey); } else { scsResult.content = AESHelper.AESDecrypt(scsResult.content, privateKey); } return scsResult; } catch (Exception ex ) { throw new Exception($"{ex.Message}\n{ex.StackTrace}\n\n{data.ToJsonString()}\n{url}\n {Code}\n{PassKey}\n{privateKey}\n{response?.StatusCode}\n{response?.Content}\n{result}"); } } } }