YCTechCommon.cs 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. using JiaZhiQuan.Common.Config;
  2. using JiaZhiQuan.Common.Utils;
  3. using Newtonsoft.Json;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Net.Http;
  8. using System.Text;
  9. using System.Threading.Tasks;
  10. using Wicture.DbRESTFul;
  11. using static JiaZhiQuan.Common.YCTech.YCTechModel;
  12. namespace JiaZhiQuan.Common.YCTech {
  13. public static class YCTechCommon {
  14. internal static async Task<YCTechBaseResponse<TData>> YCTechExeReqeust<TData>(this YCTechBaseRequest<TData> request,
  15. ConfigFromDb config, HttpClient httpClient) {
  16. request.InitRequest(config);
  17. IDictionary<string, object> reqParam = ExpandoUtils.ConvertToDynamic(request);
  18. reqParam.Add("AgentId", request.BaseInfo.AgentId);
  19. reqParam.Add("SignKey", request.BaseInfo.SignKey);
  20. //排序
  21. IDictionary<string, object> sortParam = reqParam.OrderBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value);
  22. StringBuilder sb = new StringBuilder();
  23. int i = 0;
  24. foreach (var x in sortParam) {
  25. if (x.Key == "BaseInfo" || x.Key == "Response" || x.Value == null ||
  26. string.IsNullOrEmpty(x.Value.ToString())) {
  27. } else {
  28. sb.Append(i == 0 ? string.Empty : "&").Append($"{x.Key}={x.Value}");
  29. }
  30. i++;
  31. }
  32. string sign = EncryptUtils.Md5EncryptTolower(sb.ToString());
  33. string paramStr = $"{sb}&Sign={sign}";
  34. string url = request.BaseInfo.Host + request.BaseInfo.RequestUrl;
  35. LoggerManager.Logger.Info($"请求url:{url} 请求参数:{paramStr}");
  36. YCTechBaseResponse<TData> resp = new YCTechBaseResponse<TData>();
  37. try {
  38. var content = new StringContent(paramStr, Encoding.UTF8, "application/x-www-form-urlencoded");
  39. var response = await httpClient.PostAsync(url, content);
  40. if (response.IsSuccessStatusCode) {
  41. string responseContent = await response.Content.ReadAsStringAsync();
  42. resp = JsonConvert.DeserializeObject<YCTechBaseResponse<TData>>(responseContent);
  43. resp.Sucess = true;
  44. } else {
  45. LoggerManager.Logger.Error($"调用于初科技接口失败,url:{url} resp: {response}");
  46. resp = new YCTechBaseResponse<TData> {
  47. Code = "-99",
  48. raw = await response.Content.ReadAsStringAsync()
  49. };
  50. }
  51. return resp;
  52. } catch (Exception ex) {
  53. LoggerManager.Logger.Error($"调用于初科技接口失败,url:{url} msg: {ex.Message}");
  54. return resp;
  55. }
  56. }
  57. private static void InitRequest<TData>(this YCTechBaseRequest<TData> request,ConfigFromDb config) {
  58. request.BaseInfo.SignKey = config.YCTechSignKey;
  59. request.BaseInfo.AgentId= config.YCTechAgentId;
  60. request.BaseInfo.Host= config.YCTechHost;
  61. }
  62. }
  63. }