public async Task Handle(SendSmsDomainEvent notification, CancellationToken cancellationToken) { if (string.IsNullOrEmpty(notification.Content)) { throw new Exception("短信内容不能为空"); } if (string.IsNullOrEmpty(notification.Mobile)) { throw new Exception("短信手机号不能为空"); } string timestamp = WebAPIHelper.ConvertCurrentTimeStamp(); string dataJson = JsonConvert.SerializeObject(new { phone = notification.Mobile, content = notification.Content, inner = false }); string uri = "/oppo/sms/singleSend"; IDictionary <string, string> paramsMap = new Dictionary <string, string>(); paramsMap.Add("smsAppId", AppId); paramsMap.Add("smsAppKey", smsAppKey); paramsMap.Add("app_id", AppId); paramsMap.Add("timestamp", timestamp); paramsMap.Add("data", dataJson); //生成签名 string sign = WebAPIHelper.SmsSign(paramsMap, uri, Secret); paramsMap.Add("sign", sign); //暂用GET方式 //POST 方式:遇到特殊字符会被转义,导致签名不能通过 string res = await WebAPIHelper.HttpPostAsync(Url + uri, WebAPIHelper.SmsBuildEncodeUrl(paramsMap), contentType : "application/x-www-form-urlencoded"); if (!string.IsNullOrWhiteSpace(res)) { HttpSmdModelResult model = JsonConvert.DeserializeObject <HttpSmdModelResult>(res); if (model.code != null && model.code == "0") { return; } } _logger.LogWarning($"短信发送失败,mobile:{notification.Mobile} 内容“{notification.Content}”"); }