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; using System.Threading.Tasks; using TEAMModelOS.SDK; using TEAMModelOS.SDK.Extension; using TEAMModelOS.SDK.Models; namespace TEAMModelOS.SDK { public static class ThirdApisService { // private readonly IHttpClientFactory _httpClient; public async static Task Post(HttpClient _httpClient, 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 var client = _httpClient; client.DefaultRequestHeaders.Add("Signature", signature); //client.DefaultRequestHeaders.Add("Content-Type", "application/x-www-form-urlencoded"); 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 client.SendAsync(request); //response = await client.PostAsync(url, new StringContent(sendMsg)); result = await response.Content.ReadAsStringAsync(); if (!result.Contains("操作失败")) { ScsResult scsResult = result.ToObject(); if (scsResult.result) { scsResult.content = AESHelper.AESDecrypt(scsResult.content, privateKey); } else { scsResult.content = AESHelper.AESDecrypt(scsResult.content, privateKey); } return scsResult; } else { return new ScsResult(); } } catch (Exception ex ) { //重传机制 // Thread.Sleep(5 * 60 * 1000); string papas = $"{ex.Message}\n{ex.StackTrace}\n{data.ToJsonString()} \n{result}"; //return await Post(url, Code, PassKey, privateKey, data); 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}\n{data.ToJsonString()}"); } } } }