using System.Text.RegularExpressions;
using AlibabaCloud.OpenApiClient.Models;
using JNPF.Common.Security;
using TencentCloud.Common;
using TencentCloud.Common.Profile;
using TencentCloud.Sms.V20210111;
using TencentCloud.Sms.V20210111.Models;
namespace JNPF.Extras.Thirdparty.Sms;
public class SmsUtil
{
#region 阿里云
///
/// 发送(阿里云短信).
///
///
///
public static string SendSmsByAli(SmsParameterInfo smsModel)
{
var config = new Config
{
// 您的AccessKey ID
AccessKeyId = smsModel.keyId,
// 您的AccessKey Secret
AccessKeySecret = smsModel.keySecret,
};
config.Endpoint = smsModel.domain;
AlibabaCloud.SDK.Dysmsapi20170525.Client client = new AlibabaCloud.SDK.Dysmsapi20170525.Client(config);
AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsRequest sendSmsRequest = new AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsRequest();
sendSmsRequest.PhoneNumbers = smsModel.mobileAli;
sendSmsRequest.SignName = smsModel.signName;
sendSmsRequest.TemplateCode = smsModel.templateId;
sendSmsRequest.TemplateParam = smsModel.templateParamAli;
AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsResponse sendSmsResponse = client.SendSms(sendSmsRequest);
if (sendSmsResponse.Body.Code.Equals("OK") && sendSmsResponse.Body.Message.Equals("OK"))
{
return sendSmsResponse.Body.RequestId;
}
else
{
throw new Exception(sendSmsResponse.Body.Message);
}
}
///
/// 获取模板配置字段.
///
///
///
public static List GetTemplateByAli(SmsParameterInfo smsModel)
{
try
{
var config = new Config
{
// 您的AccessKey ID
AccessKeyId = smsModel.keyId,
// 您的AccessKey Secret
AccessKeySecret = smsModel.keySecret,
};
config.Endpoint = smsModel.domain;
AlibabaCloud.SDK.Dysmsapi20170525.Client client = new AlibabaCloud.SDK.Dysmsapi20170525.Client(config);
AlibabaCloud.SDK.Dysmsapi20170525.Models.QuerySmsTemplateRequest querySmsTemplateRequest = new AlibabaCloud.SDK.Dysmsapi20170525.Models.QuerySmsTemplateRequest();
querySmsTemplateRequest.TemplateCode = smsModel.templateId;
AlibabaCloud.SDK.Dysmsapi20170525.Models.QuerySmsTemplateResponse querySmsTemplateResponse = client.QuerySmsTemplate(querySmsTemplateRequest);
if (querySmsTemplateResponse.Body.Code.Equals("OK"))
{
return GetFields(querySmsTemplateResponse.Body.TemplateContent);
}
else
{
throw new Exception("获取模板失败");
}
}
catch (Exception)
{
throw new Exception("获取模板失败");
}
}
#endregion
#region 腾讯云
///
/// 腾讯云短信.
///
///
///
public static string SendSmsByTencent(SmsParameterInfo smsModel)
{
try
{
Credential cred = new Credential
{
SecretId = smsModel.keyId,
SecretKey = smsModel.keySecret
};
ClientProfile clientProfile = new ClientProfile();
HttpProfile httpProfile = new HttpProfile();
httpProfile.Endpoint = smsModel.domain;
clientProfile.HttpProfile = httpProfile;
SmsClient client = new SmsClient(cred, smsModel.region, clientProfile);
SendSmsRequest req = new SendSmsRequest();
req.PhoneNumberSet = smsModel.mobileTx;
req.SmsSdkAppId = smsModel.appId;
req.SignName = smsModel.signName;
req.TemplateId = smsModel.templateId;
req.TemplateParamSet = smsModel.templateParamTx;
SendSmsResponse resp = client.SendSmsSync(req);
if (!resp.SendStatusSet.FirstOrDefault().Code.Equals("Ok"))
{
throw new Exception("短信发送失败");
}
return resp.RequestId;
}
catch (Exception ex)
{
return "短信发送失败";
}
}
///
/// 获取模板配置字段.
///
///
///
public static List GetTemplateByTencent(SmsParameterInfo smsModel)
{
try
{
Credential cred = new Credential
{
SecretId = smsModel.keyId,
SecretKey = smsModel.keySecret
};
ClientProfile clientProfile = new ClientProfile();
HttpProfile httpProfile = new HttpProfile();
httpProfile.Endpoint = smsModel.domain;
clientProfile.HttpProfile = httpProfile;
SmsClient client = new SmsClient(cred, smsModel.region, clientProfile);
DescribeSmsTemplateListRequest req = new DescribeSmsTemplateListRequest();
req.International = 0;
req.TemplateIdSet = new ulong?[] { ulong.Parse(smsModel.templateId) };
DescribeSmsTemplateListResponse resp = client.DescribeSmsTemplateListSync(req);
if (resp.DescribeTemplateStatusSet.Count() > 0 && !string.IsNullOrEmpty(resp.RequestId))
{
var data = resp.DescribeTemplateStatusSet.FirstOrDefault().ToObject>();
var templateContent = data["TemplateContent"].ToString();
return GetFields(templateContent);
}
else
{
throw new Exception("获取模板失败");
}
}
catch (Exception ex)
{
throw new Exception("获取模板失败");
}
}
#endregion
///
/// 截取{}中的字符串.
///
///
///
private static List GetFields(string templateContent)
{
MatchCollection mc = Regex.Matches(templateContent, "(?i){.*?}");
return mc.Cast().Select(m => m.Value.TrimStart('{').TrimEnd('}')).ToList();
}
}