using System; using System.Collections.Generic; using System.Threading.Tasks; using Aliyun.Acs.Core; using Aliyun.Acs.Core.Exceptions; using Aliyun.Acs.Core.Profile; using Aliyun.Acs.Dysmsapi.Model.V20170525; using Learun.Util; using Newtonsoft.Json; namespace Quanjiang.DigitalScholl.SendSms { public class AliyunSms : ISms { private static readonly string RegionIdForPop = ConfigManager.AppSettings["regionIdForPop"].Value; private static readonly string AccessId = ConfigManager.AppSettings["accessId"].Value; private static readonly string AccessSecret = ConfigManager.AppSettings["accessSecret"].Value; private static readonly string Product = ConfigManager.AppSettings["product"].Value; private static readonly string Domain = ConfigManager.AppSettings["domain"].Value; private static readonly string SignName = ConfigManager.AppSettings["SignName"].Value; /// /// 发送短信 /// /// 手机号 /// 短信通知类型 /// 发送结果 public async Task<(string code, string randomNum, string message, string errorType)> SendSmsToSingle(string phoneNumber, SmsType st, List sendParams = null) { (string code, string randomNum, string message, string errorType) result; IClientProfile profile = DefaultProfile.GetProfile(RegionIdForPop, AccessId, AccessSecret); DefaultProfile.AddEndpoint(RegionIdForPop, RegionIdForPop, Product, Domain); IAcsClient acsClient = new DefaultAcsClient(profile); var request = new SendSmsRequest(); try { request.PhoneNumbers = phoneNumber; request.SignName = SignName; var (templatecode, templateparam, randomNum) = GetSmsTemplateBySmsType(st); request.TemplateCode = templatecode; request.TemplateParam = templateparam; var sendSmsResponse = await Task.FromResult(acsClient.GetAcsResponse(request)); result = (sendSmsResponse.Code, randomNum, sendSmsResponse.Message, ""); } catch (ServerException e) { result = (e.ErrorCode, "", e.ErrorMessage, Enum.GetName(typeof(ErrorType), e.ErrorType)); } catch (ClientException e) { result = (e.ErrorCode, "", e.ErrorMessage, Enum.GetName(typeof(ErrorType), e.ErrorType)); } return result; } public Task<(string code, string randomNum, string message, string errorType)> SendSmsToMulti(List phoneNumbers, SmsType st, List sendParams = null) { throw new NotImplementedException(); } /// /// 根据短信通知类型获取短信模板 /// /// /// private (string templateCode, string templateParam, string randomNum) GetSmsTemplateBySmsType(SmsType st) { (string templateCode, string templateParam, string randomNum) result; var randomNum = CommonHelper.RandNum(6); switch (st) { case SmsType.LoginBind: result = ("SMS_471435023", JsonConvert.SerializeObject(new { code = randomNum }), randomNum); break; case SmsType.ForgetPassWord: result = ("SMS_471435023", JsonConvert.SerializeObject(new { code = randomNum }), randomNum); break; default: throw new ArgumentOutOfRangeException(nameof(st), st, null); } return result; } } }