using Furion; using Furion.DynamicApiController; using MessagePack; using Microsoft.AspNetCore.Mvc; using Nirvana.Common; using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Text; using System.Threading.Tasks; using Waste.Application.SubscribeInfo; namespace Waste.Application { /// /// 测试专用 /// public class TestAppService : IDynamicApiController { private static string ApiUrl = App.Configuration["SZDevPlatSetting:ApiUrl"]; private static string UserId = App.Configuration["SZDevPlatSetting:UserId"]; private static string ApiSecret = App.Configuration["SZDevPlatSetting:ApiSecret"]; private static string ApiSecretHash = App.Configuration["SZDevPlatSetting:ApiSecretHash"]; private readonly IHttpClientFactory _clientFactory; private readonly ILoggerService _loggerService; private readonly ISubscribeService _subscribeService; public TestAppService(ILoggerService loggerService, IHttpClientFactory clientFactory, ISubscribeService subscribeService) { _loggerService = loggerService; _clientFactory = clientFactory; _subscribeService = subscribeService; } /// /// 接收测试 /// /// /// [HttpPost] [NonUnify] public string Subscribe(BusinessApiS2CDto data) { var msg = $"平台推送的消息内容:{data.ToJson()}"; _loggerService.AddLogger(msg, 1); return "success"; } [HttpGet] public void ConnectServer() { } /// /// /// /// [HttpGet] public async Task TestThirdSendAsync() { await _subscribeService.SeedThirdMessageAsync(new SendThirdMessageSubscriDto { Url = "https://localhost:44335/api/test/recv", wastetype = "\u0000\u0000\u0000\u0000纸壳", weight = "20.9", trashcode = "0", time = 1653033312, body = "", deviceid = Guid.Parse("39fcdce8-9e54-b87f-fc8e-616a9072c224") }); } [HttpPost] public void Recv(SendMessageToThirdS2CDto input) { var a = input; } [HttpGet] public async Task TestSendAsync() { GarbagePltC2SDto garbageC2SDto = new GarbagePltC2SDto { Weight = 10.1, secret = "6Vxkfkg3kxqkkzgT", secrethash = "51fb893bccc1395e", ScanningTime = 1627917492, DStatus = 0, deviceid = "08d954b6-df45-4de1-8fde-f5109798b855", Trash = "000F000002", Type = 4 }; if (garbageC2SDto.Weight == ((int)garbageC2SDto.Weight).ToDouble()) { garbageC2SDto.Weight = garbageC2SDto.Weight.ToDouble(0); } var url = $"{ApiUrl}/api/garbages"; string[] paramlist = new string[] { garbageC2SDto.Weight.ToString(),garbageC2SDto.Trash,garbageC2SDto.Type.ToString(),garbageC2SDto.ScanningTime.ToString(),garbageC2SDto.DStatus.ToString() }; int timestamp = 1627917492; int nonce = 497458578; string sign = GetUserApiSign(garbageC2SDto.secret, paramlist); var c2s_dto = new SuZhouPostApiBaseDto { Data = new GarbageC2SDto { DStatus = garbageC2SDto.DStatus, ScanningTime = garbageC2SDto.ScanningTime, Trash = garbageC2SDto.Trash, Type = garbageC2SDto.Type, Weight = garbageC2SDto.Weight }, SecretHash = garbageC2SDto.secrethash, Nonce = nonce, Signature = sign, TimeStamp = timestamp, DeviceId = garbageC2SDto.deviceid }; var request = new HttpRequestMessage(HttpMethod.Post, url); var bytes = MessagePackSerializer.Serialize(c2s_dto); request.Content = new ByteArrayContent(bytes); request.Headers.Add("Accept", "application/x-msgpack"); request.Content.Headers.Add("Content-Type", "application/x-msgpack"); var client = _clientFactory.CreateClient(); var response = await client.SendAsync(request); if (response.IsSuccessStatusCode) { //记录日志 _loggerService.AddLogger($"测量信息上报成功:参数:{c2s_dto.ToJson()}", 3); } else { var msg = await response.Content.ReadAsStringAsync(); //记录日志 _loggerService.AddLogger($"测量信息上报失败:参数:{c2s_dto.ToJson()}\r\n返回值:{msg}", 3); } } private string GetUserApiSign(string secret, params string[] dataparams) { StringBuilder sb = new StringBuilder(); if (dataparams != null && dataparams.Length > 0) { foreach (var item in dataparams) { sb.Append(item); } } if (!string.IsNullOrEmpty(secret)) { sb.Append(secret); } else { sb.Append(ApiSecret); } string str = sb.ToString(); string sign = Md5.md5(str, 16).ToLower(); return sign; } } }