using Backend.Models; using BackendWorkerService.Services.Interface; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.IO; using System.Net; using System.Text; using System.Xml; namespace BackendWorkerService.Services.Implement { class SendSMSService : ISendSMSService { private readonly ILogger logger; private readonly IOptions _options; private SMSConfig sms; public SendSMSService(ILogger logger, IOptions options) { this.logger = logger; sms = options.Value; sms.Encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(sms.UserName + ":" + sms.Password)); } public bool Send(int id, string phone, string content) { try { logger.LogError("【SendSMSService】【SMS開始寄送】[任務編號]:{0}", id); //設定傳送的Request HttpWebRequest Postrequest = (HttpWebRequest)WebRequest.Create(sms.Api); Postrequest.Method = "POST"; Postrequest.Headers.Add("Authorization", "Basic " + sms.Encoded); Postrequest.PreAuthenticate = true; using (var streamWriter = new StreamWriter(Postrequest.GetRequestStream())) { string json = string.Format("", phone, content); streamWriter.Write(json); } //設定回傳的Request HttpWebResponse response = (HttpWebResponse)Postrequest.GetResponse(); var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd(); XmlDocument xmlDoc = new XmlDocument(); xmlDoc.LoadXml(responseString); string jsonText = JsonConvert.SerializeXmlNode(xmlDoc); JObject resultVal = (JObject)JsonConvert.DeserializeObject(jsonText); if (resultVal.ContainsKey("obj")) { var display_split = resultVal["obj"]["@display"].ToString().Split(' '); var responseStatus = display_split[display_split.Length - 1]; if (responseStatus == "{ok}") { logger.LogInformation("【SendSMSService】【SMS寄送成功】[任務編號]:{0}", id); return true; } } else { logger.LogError("【SendSMSService】【SMS寄送失敗】[任務編號]:{0}", id); logger.LogError("【SendSMSService】【SMS寄送失敗】[失敗內容]:{0}", resultVal); return false; } return false; } catch (Exception exception) { logger.LogError("【SendSMSService】【SMS寄送失敗】[任務編號]:{0}", id); logger.LogError("【SendSMSService】【SMS寄送失敗】[Exception]:{0}", exception.ToString()); throw; //return false; } } } }