完成阿里云短信功能并进行测试

This commit is contained in:
jianweie
2024-02-28 23:44:59 +08:00
parent 1d3df852a0
commit 36dfe3b5c4
10 changed files with 818 additions and 226 deletions

View File

@@ -1632,6 +1632,25 @@ namespace CoreCms.Net.Configuration
#region =====================================================
/// <summary>
/// 短信发送平台
/// </summary>
public enum SmsType
{
/// <summary>
/// 凯信通
/// </summary>
[Description("凯信通")]
KingTto = 1,
/// <summary>
/// 阿里云
/// </summary>
[Description("阿里云")]
AliYun = 2,
}
/// <summary>
/// 短信消息分类
/// </summary>
@@ -3340,5 +3359,35 @@ namespace CoreCms.Net.Configuration
#endregion
#region
/// <summary>
/// 抽奖活动类型
/// </summary>
public enum LuckyType
{
/// <summary>
/// 大转盘
/// </summary>
[Description("大转盘")]
LuckyWheel = 1,
/// <summary>
/// 九宫格
/// </summary>
[Description("九宫格")]
LuckyGrid = 2,
/// <summary>
/// 老虎机
/// </summary>
[Description("老虎机")]
SlotMachine = 3
}
#endregion
}
}

View File

@@ -628,6 +628,12 @@ namespace CoreCms.Net.Configuration
/// 是否开启短信
/// </summary>
public const string SmsEnabled = "smsEnabled";
/// <summary>
/// 短信类型
/// </summary>
public const string SmsType = "smsType";
/// <summary>
/// 用户ID
/// </summary>
@@ -664,62 +670,126 @@ namespace CoreCms.Net.Configuration
/// </summary>
public const string SmsIpSendBlackList = "smsIpSendBlackList";
#region
/// <summary>
/// 账户注册-短信内容模板
/// 凯信通-账户注册-短信内容模板
/// </summary>
public const string SmsTplForReg = "smsTplForReg";
/// <summary>
/// 账户登录-短信内容模板
/// 凯信通-账户登录-短信内容模板
/// </summary>
public const string SmsTplForLogin = "smsTplForLogin";
/// <summary>
/// 验证验证码-短信内容模板
/// 凯信通-验证验证码-短信内容模板
/// </summary>
public const string SmsTplForVeri = "smsTplForVeri";
/// <summary>
/// 下单成功时-短信内容模板
/// 凯信通-下单成功时-短信内容模板
/// </summary>
public const string SmsTplForCreateOrder = "smsTplForCreateOrder";
/// <summary>
/// 订单支付成功时-短信内容模板
/// 凯信通-订单支付成功时-短信内容模板
/// </summary>
public const string SmsTplForOrderPayed = "smsTplForOrderPayed";
/// <summary>
/// 订单催付提醒-短信内容模板
/// 凯信通-订单催付提醒-短信内容模板
/// </summary>
public const string SmsTplForRemindOrderPay = "smsTplForRemindOrderPay";
/// <summary>
/// 订单发货通知-短信内容模板
/// 凯信通-订单发货通知-短信内容模板
/// </summary>
public const string SmsTplForDeliveryNotice = "smsTplForDeliveryNotice";
/// <summary>
/// 售后确认通过-短信内容模板
/// 凯信通-售后确认通过-短信内容模板
/// </summary>
public const string SmsTplForAfterSalesPass = "smsTplForAfterSalesPass";
/// <summary>
/// 用户退款成功通知-短信内容模板
/// 凯信通-用户退款成功通知-短信内容模板
/// </summary>
public const string SmsTplForRefundSuccess = "smsTplForRefundSuccess";
/// <summary>
/// 订单付款成功平台通知-短信内容模板
/// 凯信通-订单付款成功平台通知-短信内容模板
/// </summary>
public const string SmsTplForSellerOrderNotice = "smsTplForSellerOrderNotice";
/// <summary>
/// 通用类型-短信内容模板
/// 凯信通-通用类型-短信内容模板
/// </summary>
public const string SmsTplForCommon = "smsTplForCommon";
#endregion
#region
/// <summary>
/// 阿里云-账户注册-短信内容模板
/// </summary>
public const string SmsAliYunTplForReg = "smsAliYunTplForReg";
/// <summary>
/// 阿里云-账户登录-短信内容模板
/// </summary>
public const string SmsAliYunTplForLogin = "smsAliYunTplForLogin";
/// <summary>
/// 阿里云-验证验证码-短信内容模板
/// </summary>
public const string SmsAliYunTplForVeri = "smsAliYunTplForVeri";
/// <summary>
/// 阿里云-下单成功时-短信内容模板
/// </summary>
public const string SmsAliYunTplForCreateOrder = "smsAliYunTplForCreateOrder";
/// <summary>
/// 阿里云-订单支付成功时-短信内容模板
/// </summary>
public const string SmsAliYunTplForOrderPayed = "smsAliYunTplForOrderPayed";
/// <summary>
/// 阿里云-订单催付提醒-短信内容模板
/// </summary>
public const string SmsAliYunTplForRemindOrderPay = "smsAliYunTplForRemindOrderPay";
/// <summary>
/// 阿里云-订单发货通知-短信内容模板
/// </summary>
public const string SmsAliYunTplForDeliveryNotice = "smsAliYunTplForDeliveryNotice";
/// <summary>
/// 阿里云-售后确认通过-短信内容模板
/// </summary>
public const string SmsAliYunTplForAfterSalesPass = "smsAliYunTplForAfterSalesPass";
/// <summary>
/// 阿里云-用户退款成功通知-短信内容模板
/// </summary>
public const string SmsAliYunTplForRefundSuccess = "smsAliYunTplForRefundSuccess";
/// <summary>
/// 阿里云-订单付款成功平台通知-短信内容模板
/// </summary>
public const string SmsAliYunTplForSellerOrderNotice = "smsAliYunTplForSellerOrderNotice";
/// <summary>
/// 阿里云-通用类型-短信内容模板
/// </summary>
public const string SmsAliYunTplForCommon = "smsAliYunTplForCommon";
#endregion
//网络打印机============================================================================
/// <summary>
/// 是否开启

View File

@@ -208,11 +208,14 @@ namespace CoreCms.Net.Configuration
di.Add(SystemSettingConstVars.ShowApiAppid, new DictionaryKeyValues() { sKey = "AppId", sValue = "" });
di.Add(SystemSettingConstVars.ShowApiSecret, new DictionaryKeyValues() { sKey = "授权Secret", sValue = "" });
//信通短信设置
//信通设置
di.Add(SystemSettingConstVars.SmsEnabled, new DictionaryKeyValues() { sKey = "是否开启短信", sValue = "1" });
// 1凯信通 2阿里云
di.Add(SystemSettingConstVars.SmsType, new DictionaryKeyValues() { sKey = "短信类型", sValue = "1" });
di.Add(SystemSettingConstVars.SmsUserId, new DictionaryKeyValues() { sKey = "用户ID", sValue = "" });
di.Add(SystemSettingConstVars.SmsAccount, new DictionaryKeyValues() { sKey = "账号", sValue = "" });
di.Add(SystemSettingConstVars.SmsPassword, new DictionaryKeyValues() { sKey = "密码", sValue = "" });
di.Add(SystemSettingConstVars.SmsAccount, new DictionaryKeyValues() { sKey = "账号AppKey", sValue = "" });
di.Add(SystemSettingConstVars.SmsPassword, new DictionaryKeyValues() { sKey = "密码AppSecret", sValue = "" });
di.Add(SystemSettingConstVars.SmsApiUrl, new DictionaryKeyValues() { sKey = "Api地址", sValue = "http://sms.corecms.net:9999/sms.aspx" });
di.Add(SystemSettingConstVars.SmsSignature, new DictionaryKeyValues() { sKey = "短信签名", sValue = "" });
di.Add(SystemSettingConstVars.SmsIpSendNumber, new DictionaryKeyValues() { sKey = "单Ip每日发送量", sValue = "20" });
@@ -235,7 +238,7 @@ namespace CoreCms.Net.Configuration
di.Add(SystemSettingConstVars.FilesStorageAliYunBucketName, new DictionaryKeyValues() { sKey = "阿里云桶名称", sValue = "CoreShop" });
di.Add(SystemSettingConstVars.FilesStorageQiNiuBucketName, new DictionaryKeyValues() { sKey = "七牛云桶名称", sValue = "CoreShop" });
//短信发送内容模板
//凯信通短信发送内容模板
di.Add(SystemSettingConstVars.SmsTplForReg, new DictionaryKeyValues() { sKey = "账户注册", sValue = "您正在注册账号,验证码是{code},请勿告诉他人。" });
di.Add(SystemSettingConstVars.SmsTplForLogin, new DictionaryKeyValues() { sKey = "账户登录", sValue = "您正在登陆账号,验证码是{code},请勿告诉他人。" });
di.Add(SystemSettingConstVars.SmsTplForVeri, new DictionaryKeyValues() { sKey = "验证验证码", sValue = "您的验证码是{code},请勿告诉他人。" });
@@ -248,6 +251,18 @@ namespace CoreCms.Net.Configuration
di.Add(SystemSettingConstVars.SmsTplForSellerOrderNotice, new DictionaryKeyValues() { sKey = "订单付款成功平台通知", sValue = "您有新的订单了,请及时处理。" });
di.Add(SystemSettingConstVars.SmsTplForCommon, new DictionaryKeyValues() { sKey = "通用类型", sValue = "欢迎您访问我们的微信小程序,有问题请联系客服。" });
//阿里云短信发送内容模板
di.Add(SystemSettingConstVars.SmsAliYunTplForReg, new DictionaryKeyValues() { sKey = "账户注册", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForLogin, new DictionaryKeyValues() { sKey = "账户登录", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForVeri, new DictionaryKeyValues() { sKey = "验证验证码", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForCreateOrder, new DictionaryKeyValues() { sKey = "下单成功时", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForOrderPayed, new DictionaryKeyValues() { sKey = "订单支付成功时", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForRemindOrderPay, new DictionaryKeyValues() { sKey = "订单催付提醒", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForDeliveryNotice, new DictionaryKeyValues() { sKey = "订单发货通知", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForAfterSalesPass, new DictionaryKeyValues() { sKey = "售后确认通过", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForRefundSuccess, new DictionaryKeyValues() { sKey = "用户退款成功通知", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForSellerOrderNotice, new DictionaryKeyValues() { sKey = "订单付款成功平台通知", sValue = "" });
di.Add(SystemSettingConstVars.SmsAliYunTplForCommon, new DictionaryKeyValues() { sKey = "通用类型", sValue = "" });
//自提运费设置
di.Add(SystemSettingConstVars.IntraCityServiceBy2KM, new DictionaryKeyValues() { sKey = "2公里内", sValue = "0" });

View File

@@ -12218,26 +12218,6 @@
图片地址
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.DTO.WxGoodCategoryChild.id">
<summary>
序列
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.DTO.WxGoodCategoryChild.name">
<summary>
标题
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.DTO.WxGoodCategoryChild.sort">
<summary>
排序
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.DTO.WxGoodCategoryChild.imageUrl">
<summary>
图片地址
</summary>
</member>
<member name="T:CoreCms.Net.Model.ViewModels.DTO.WxNameTypeDto">
<summary>
wx返回Name/Type格式实体
@@ -12627,6 +12607,11 @@
是否开启
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsType">
<summary>
短信类型
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.UserId">
<summary>
用户序列
@@ -12667,6 +12652,61 @@
短信发送IP黑名单
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForReg">
<summary>
阿里云-模板-账户注册
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForLogin">
<summary>
阿里云-模板-账户登录
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForVeri">
<summary>
阿里云-模板-验证验证码
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForCreateOrder">
<summary>
阿里云-模板-下单成功时
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForOrderPayed">
<summary>
阿里云-模板-订单支付成功时
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForRemindOrderPay">
<summary>
阿里云-模板-订单催付提醒
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForDeliveryNotice">
<summary>
阿里云-模板-订单发货通知
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForAfterSalesPass">
<summary>
阿里云-模板-售后确认通过
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForRefundSuccess">
<summary>
阿里云-模板-用户退款成功通知
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForSellerOrderNotice">
<summary>
阿里云-模板-订单付款成功平台通知
</summary>
</member>
<member name="P:CoreCms.Net.Model.ViewModels.Sms.SmsOptions.SmsAliYunTplForCommon">
<summary>
阿里云-模板-通用类型
</summary>
</member>
<member name="T:CoreCms.Net.Model.ViewModels.Sms.SMSReturnData">
<summary>
短信发送回调结果

View File

@@ -21,6 +21,11 @@ namespace CoreCms.Net.Model.ViewModels.Sms
/// </summary>
public bool Enabled { get; set; }
/// <summary>
/// 短信类型
/// </summary>
public int SmsType { get; set; }
/// <summary>
/// 用户序列
/// </summary>
@@ -62,6 +67,50 @@ namespace CoreCms.Net.Model.ViewModels.Sms
/// </summary>
public string SmsIpSendBlackList { get; set; }
/// <summary>
/// 阿里云-模板-账户注册
/// </summary>
public string SmsAliYunTplForReg { get; set; }
/// <summary>
/// 阿里云-模板-账户登录
/// </summary>
public string SmsAliYunTplForLogin { get; set; }
/// <summary>
/// 阿里云-模板-验证验证码
/// </summary>
public string SmsAliYunTplForVeri { get; set; }
/// <summary>
/// 阿里云-模板-下单成功时
/// </summary>
public string SmsAliYunTplForCreateOrder { get; set; }
/// <summary>
/// 阿里云-模板-订单支付成功时
/// </summary>
public string SmsAliYunTplForOrderPayed { get; set; }
/// <summary>
/// 阿里云-模板-订单催付提醒
/// </summary>
public string SmsAliYunTplForRemindOrderPay { get; set; }
/// <summary>
/// 阿里云-模板-订单发货通知
/// </summary>
public string SmsAliYunTplForDeliveryNotice { get; set; }
/// <summary>
/// 阿里云-模板-售后确认通过
/// </summary>
public string SmsAliYunTplForAfterSalesPass { get; set; }
/// <summary>
/// 阿里云-模板-用户退款成功通知
/// </summary>
public string SmsAliYunTplForRefundSuccess { get; set; }
/// <summary>
/// 阿里云-模板-订单付款成功平台通知
/// </summary>
public string SmsAliYunTplForSellerOrderNotice { get; set; }
/// <summary>
/// 阿里云-模板-通用类型
/// </summary>
public string SmsAliYunTplForCommon { get; set; }
}

View File

@@ -5,6 +5,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AlibabaCloud.SDK.Dysmsapi20170525" Version="2.0.24" />
<PackageReference Include="Aliyun.OSS.SDK.NetCore" Version="2.13.0" />
<PackageReference Include="Essensoft.Paylink.Alipay" Version="4.1.3" />
<PackageReference Include="Essensoft.Paylink.WeChatPay" Version="4.1.3" />

View File

@@ -22,12 +22,16 @@ using CoreCms.Net.Model.ViewModels.Sms;
using CoreCms.Net.Model.ViewModels.UI;
using CoreCms.Net.Utility.Extensions;
using CoreCms.Net.Utility.Helper;
using Essensoft.Paylink.Alipay.Domain;
using Essensoft.Paylink.WeChatPay.V3.Domain;
using Flurl.Http;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Routing.Template;
using Microsoft.Extensions.Options;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using SqlSugar;
using Tea;
using static SKIT.FlurlHttpClient.Wechat.Api.Models.WxaApiUserLogSearchResponse.Types.Data.Types.RealtimeLog.Types;
@@ -126,26 +130,125 @@ namespace CoreCms.Net.Services
{
code = codeNumber
};
switch (type)
if (type == "login")
{
if (smsOptions.SmsType == (int)GlobalEnumVars.SmsType.KingTto)
{
case "login":
oldLog.contentBody = "您本次登陆的验证码是:" + codeNumber + ",请不要将验证码泄露给他人!";
oldLog.parameters = JsonConvert.SerializeObject(obj);
break;
default:
}
else if (smsOptions.SmsType == (int)GlobalEnumVars.SmsType.AliYun)
{
oldLog.contentBody = smsOptions.SmsAliYunTplForLogin;
oldLog.parameters = JsonConvert.SerializeObject(new
{
code = codeNumber.ToString()
});
}
}
else
{
if (smsOptions.SmsType == (int)GlobalEnumVars.SmsType.KingTto)
{
oldLog.contentBody = "您验证码是:" + codeNumber + ",请不要将验证码泄露给他人!";
oldLog.parameters = JsonConvert.SerializeObject(obj);
break;
}
else if (smsOptions.SmsType == (int)GlobalEnumVars.SmsType.AliYun)
{
oldLog.contentBody = smsOptions.SmsAliYunTplForVeri;
oldLog.parameters = JsonConvert.SerializeObject(new
{
code = codeNumber.ToString()
});
}
}
await _dal.InsertAsync(oldLog);
}
if (smsOptions.SmsType == (int)GlobalEnumVars.SmsType.KingTto)
{
var result = await SendSms(oldLog.mobile, oldLog.contentBody, smsOptions);
jm.status = result.IsSuccess;
jm.msg = result.IsSuccess ? "发送成功" : result.Message;
jm.otherData = result;
}
else if (smsOptions.SmsType == (int)GlobalEnumVars.SmsType.AliYun)
{
if (type == "login" && string.IsNullOrEmpty(smsOptions.SmsAliYunTplForLogin))
{
jm.msg = "阿里云登录短信模板未设置";
return jm;
}
if (type != "login" && string.IsNullOrEmpty(smsOptions.SmsAliYunTplForVeri))
{
jm.msg = "阿里云验证码短信模板未设置";
return jm;
}
var config = new AlibabaCloud.OpenApiClient.Models.Config
{
// 必填,您的 AccessKey ID
AccessKeyId = smsOptions.Account,
// 必填,您的 AccessKey Secret
AccessKeySecret = smsOptions.Password,
//Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
Endpoint = smsOptions.ApiUrl,
};
var client = new AlibabaCloud.SDK.Dysmsapi20170525.Client(config);
var sendSmsRequest = new AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsRequest();
var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
try
{
sendSmsRequest.SignName = smsOptions.Signature;
sendSmsRequest.PhoneNumbers = mobile;
sendSmsRequest.TemplateCode =
type == "login" ? smsOptions.SmsAliYunTplForLogin : smsOptions.SmsAliYunTplForVeri;
sendSmsRequest.TemplateParam = JsonConvert.SerializeObject(new
{
code = codeNumber.ToString()
});
sendSmsRequest.OutId = Guid.NewGuid().ToString();
var result = await client.SendSmsWithOptionsAsync(sendSmsRequest, runtime);
if (result.Body.Code == "OK")
{
jm.status = true;
jm.msg = "发送成功";
}
else
{
jm.status = false;
jm.msg = "发送失败:" + result.Body.Message;
}
jm.otherData = result;
}
catch (TeaException error)
{
jm.status = false;
jm.msg = "发送失败:" + error.Message;
}
catch (Exception _error)
{
var error = new TeaException(new Dictionary<string, object>
{
{ "message", _error.Message }
});
jm.status = false;
jm.msg = "发送失败:" + _error.Message;
jm.otherData = error.Data["Recommend"];
}
}
return jm;
}
#endregion
@@ -274,11 +377,11 @@ namespace CoreCms.Net.Services
return jm;
}
var isUsed = false;
string codeNumberStr = string.Empty;
if (code == GlobalEnumVars.SmsMessageTypes.Reg.ToString() || code == GlobalEnumVars.SmsMessageTypes.Login.ToString() || code == GlobalEnumVars.SmsMessageTypes.Veri.ToString())
{
var newCreateTime = DateTime.Now.AddSeconds(-60);
var smsInfo = await _dal.QueryByClauseAsync(p =>
p.mobile == mobile && p.code == code && p.createTime < newCreateTime && p.isUsed == false);
var smsInfo = await _dal.QueryByClauseAsync(p => p.mobile == mobile && p.code == code && p.createTime < newCreateTime && p.isUsed == false);
if (smsInfo != null)
{
var ts = dt - smsInfo.createTime;
@@ -288,6 +391,10 @@ namespace CoreCms.Net.Services
return jm;
}
parameters = JObject.Parse(smsInfo.parameters);
if (parameters.TryGetValue("code", out var parameter))
{
codeNumberStr = parameter?.ToString();
}
}
else
{
@@ -298,6 +405,7 @@ namespace CoreCms.Net.Services
parameters.Remove("code");
}
parameters.Add("code", codeNumber);
codeNumberStr = codeNumber.ToString();
}
isUsed = false;
}
@@ -309,18 +417,16 @@ namespace CoreCms.Net.Services
var str = string.Empty;
var allConfigs = await _settingServices.GetConfigDictionaries();
if (smsOptions.SmsType == (int)GlobalEnumVars.SmsType.KingTto)
{
if (code == GlobalEnumVars.SmsMessageTypes.Reg.ToString())
{
// 账户注册
var msg = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.SmsTplForReg);
if (!string.IsNullOrEmpty(msg))
{
var sendCode = string.Empty;
if (parameters.ContainsKey("code"))
{
sendCode = parameters["code"]?.ToString();
}
str = msg.Replace("{code}", sendCode);
str = msg.Replace("{code}", codeNumberStr);
}
}
else if (code == GlobalEnumVars.SmsMessageTypes.Login.ToString())
@@ -329,12 +435,7 @@ namespace CoreCms.Net.Services
var msg = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.SmsTplForLogin);
if (!string.IsNullOrEmpty(msg))
{
var sendCode = string.Empty;
if (parameters.ContainsKey("code"))
{
sendCode = parameters["code"]?.ToString();
}
str = msg.Replace("{code}", sendCode);
str = msg.Replace("{code}", codeNumberStr);
}
}
else if (code == GlobalEnumVars.SmsMessageTypes.Veri.ToString())
@@ -343,12 +444,7 @@ namespace CoreCms.Net.Services
var msg = CommonHelper.GetConfigDictionary(allConfigs, SystemSettingConstVars.SmsTplForVeri);
if (!string.IsNullOrEmpty(msg))
{
var sendCode = string.Empty;
if (parameters.ContainsKey("code"))
{
sendCode = parameters["code"]?.ToString();
}
str = msg.Replace("{code}", sendCode);
str = msg.Replace("{code}", codeNumberStr);
}
}
else if (code == GlobalEnumVars.PlatformMessageTypes.CreateOrder.ToString())
@@ -433,8 +529,146 @@ namespace CoreCms.Net.Services
return jm;
}
else if (smsOptions.SmsType == (int)GlobalEnumVars.SmsType.AliYun)
{
var templateCode = string.Empty;
object templateParam = null;
if (code == GlobalEnumVars.SmsMessageTypes.Reg.ToString())
{
templateCode = smsOptions.SmsAliYunTplForReg;
templateParam = new
{
code = codeNumberStr
};
}
else if (code == GlobalEnumVars.SmsMessageTypes.Login.ToString())
{
templateCode = smsOptions.SmsAliYunTplForLogin;
templateParam = new
{
code = codeNumberStr
};
}
else if (code == GlobalEnumVars.SmsMessageTypes.Veri.ToString())
{
templateCode = smsOptions.SmsAliYunTplForVeri;
templateParam = new
{
code = codeNumberStr
};
}
else if (code == GlobalEnumVars.PlatformMessageTypes.CreateOrder.ToString())
{
templateCode = smsOptions.SmsAliYunTplForCreateOrder;
}
else if (code == GlobalEnumVars.PlatformMessageTypes.OrderPayed.ToString())
{
templateCode = smsOptions.SmsAliYunTplForOrderPayed;
}
else if (code == GlobalEnumVars.PlatformMessageTypes.RemindOrderPay.ToString())
{
templateCode = smsOptions.SmsAliYunTplForRemindOrderPay;
}
else if (code == GlobalEnumVars.PlatformMessageTypes.DeliveryNotice.ToString())
{
templateCode = smsOptions.SmsAliYunTplForDeliveryNotice;
}
else if (code == GlobalEnumVars.PlatformMessageTypes.AfterSalesPass.ToString())
{
templateCode = smsOptions.SmsAliYunTplForAfterSalesPass;
}
else if (code == GlobalEnumVars.PlatformMessageTypes.RefundSuccess.ToString())
{
templateCode = smsOptions.SmsAliYunTplForRefundSuccess;
}
else if (code == GlobalEnumVars.PlatformMessageTypes.SellerOrderNotice.ToString())
{
templateCode = smsOptions.SmsAliYunTplForSellerOrderNotice;
}
else if (code == GlobalEnumVars.PlatformMessageTypes.Common.ToString())
{
templateCode = smsOptions.SmsAliYunTplForCommon;
}
if (string.IsNullOrEmpty(templateCode))
{
jm.msg = GlobalErrorCodeVars.Code10009;
return jm;
}
var config = new AlibabaCloud.OpenApiClient.Models.Config
{
// 必填,您的 AccessKey ID
AccessKeyId = smsOptions.Account,
// 必填,您的 AccessKey Secret
AccessKeySecret = smsOptions.Password,
//Endpoint 请参考 https://api.aliyun.com/product/Dysmsapi
Endpoint = smsOptions.ApiUrl,
};
var client = new AlibabaCloud.SDK.Dysmsapi20170525.Client(config);
var sendSmsRequest = new AlibabaCloud.SDK.Dysmsapi20170525.Models.SendSmsRequest();
var runtime = new AlibabaCloud.TeaUtil.Models.RuntimeOptions();
try
{
sendSmsRequest.SignName = smsOptions.Signature;
sendSmsRequest.PhoneNumbers = mobile;
sendSmsRequest.TemplateCode = templateCode;
sendSmsRequest.TemplateParam = JsonConvert.SerializeObject(templateParam);
sendSmsRequest.OutId = Guid.NewGuid().ToString();
var result = await client.SendSmsWithOptionsAsync(sendSmsRequest, runtime);
if (result.Body.Code == "OK")
{
var smsInfo = new CoreCmsSms();
smsInfo.mobile = mobile;
smsInfo.parameters = JsonConvert.SerializeObject(result);
smsInfo.code = code;
smsInfo.contentBody = templateCode;
smsInfo.createTime = DateTime.Now;
smsInfo.ip = _httpContextAccessor.HttpContext?.Connection.RemoteIpAddress != null ? _httpContextAccessor.HttpContext.Connection.RemoteIpAddress.MapToIPv4().ToString() : "127.0.0.1";
smsInfo.isUsed = isUsed;
await _dal.InsertAsync(smsInfo);
jm.status = true;
jm.msg = "发送成功";
}
else
{
jm.status = false;
jm.msg = "发送失败:" + result.Body.Message;
}
}
catch (TeaException error)
{
jm.status = false;
jm.msg = "发送失败:" + error.Message;
}
catch (Exception _error)
{
var error = new TeaException(new Dictionary<string, object>
{
{ "message", _error.Message }
});
jm.status = false;
jm.msg = "发送失败:" + _error.Message;
jm.otherData = error.Data["Recommend"];
}
return jm;
}
else
{
jm.status = false;
jm.msg = "未获取到发送方式";
return jm;
}
}
#endregion
}
}

View File

@@ -215,6 +215,7 @@ namespace CoreCms.Net.Services
var settings = await GetDatas();
sms.Enabled = GetValue(SystemSettingConstVars.SmsEnabled, configs, settings).ObjectToInt(1) == 1;
sms.SmsType = GetValue(SystemSettingConstVars.SmsType, configs, settings).ObjectToInt(1);
sms.UserId = GetValue(SystemSettingConstVars.SmsUserId, configs, settings);
sms.Account = GetValue(SystemSettingConstVars.SmsAccount, configs, settings);
sms.Password = GetValue(SystemSettingConstVars.SmsPassword, configs, settings);
@@ -224,6 +225,18 @@ namespace CoreCms.Net.Services
sms.SmsIpSendWhiteList = GetValue(SystemSettingConstVars.SmsIpSendWhiteList, configs, settings);
sms.SmsIpSendBlackList = GetValue(SystemSettingConstVars.SmsIpSendBlackList, configs, settings);
sms.SmsAliYunTplForReg = GetValue(SystemSettingConstVars.SmsAliYunTplForReg, configs, settings);
sms.SmsAliYunTplForLogin = GetValue(SystemSettingConstVars.SmsAliYunTplForLogin, configs, settings);
sms.SmsAliYunTplForVeri = GetValue(SystemSettingConstVars.SmsAliYunTplForVeri, configs, settings);
sms.SmsAliYunTplForCreateOrder = GetValue(SystemSettingConstVars.SmsAliYunTplForCreateOrder, configs, settings);
sms.SmsAliYunTplForOrderPayed = GetValue(SystemSettingConstVars.SmsAliYunTplForOrderPayed, configs, settings);
sms.SmsAliYunTplForRemindOrderPay = GetValue(SystemSettingConstVars.SmsAliYunTplForRemindOrderPay, configs, settings);
sms.SmsAliYunTplForDeliveryNotice = GetValue(SystemSettingConstVars.SmsAliYunTplForDeliveryNotice, configs, settings);
sms.SmsAliYunTplForAfterSalesPass = GetValue(SystemSettingConstVars.SmsAliYunTplForAfterSalesPass, configs, settings);
sms.SmsAliYunTplForRefundSuccess = GetValue(SystemSettingConstVars.SmsAliYunTplForRefundSuccess, configs, settings);
sms.SmsAliYunTplForSellerOrderNotice = GetValue(SystemSettingConstVars.SmsAliYunTplForSellerOrderNotice, configs, settings);
sms.SmsAliYunTplForCommon = GetValue(SystemSettingConstVars.SmsAliYunTplForCommon, configs, settings);
return sms;
}

View File

@@ -29,7 +29,8 @@
<div class="layui-tab layui-tab-card" lay-filter="setting">
<ul class="layui-tab-title">
<li lay-id="sms" class="layui-this">短信设置</li>
<li lay-id="smsstr">短信内容模板</li>
<li lay-id="smsstr">凯信通短信内容模板</li>
<li lay-id="alipaysmsstr">阿里云短信编码模板</li>
</ul>
<div class="layui-tab-content">
@@ -43,12 +44,20 @@
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsType']['sKey']}}</label>
<div class="layui-input-inline layui-inline-7">
<input type="radio" name="smsType" value="1" title="凯信通" {{d.data.configs['smsType']['sValue']==="1" ? 'checked':''}}>
<input type="radio" name="smsType" value="2" title="阿里云" {{d.data.configs['smsType']['sValue']==="2" ? 'checked':''}}>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsUserId']['sKey']}}</label>
<div class="layui-input-inline layui-inline-5">
<input type="text" name="smsUserId" value="{{d.data.configs['smsUserId']['sValue']}}" lay-verify="number" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">凯信通适用</div>
</div>
<div class="layui-form-item">
@@ -56,6 +65,7 @@
<div class="layui-input-inline layui-inline-5">
<input type="text" name="smsAccount" value="{{d.data.configs['smsAccount']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">凯信通为账号阿里云为AccessKey ID</div>
</div>
<div class="layui-form-item">
@@ -63,6 +73,7 @@
<div class="layui-input-inline layui-inline-5">
<input type="text" name="smsPassword" value="{{d.data.configs['smsPassword']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">凯信通为密码阿里云为AccessKey Secret</div>
</div>
<div class="layui-form-item">
@@ -70,7 +81,7 @@
<div class="layui-input-inline layui-inline-12">
<input type="text" name="smsApiUrl" value="{{d.data.configs['smsApiUrl']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">默认地址http://sms.corecms.net:9999/sms.aspx</div>
<div class="layui-form-mid layui-word-aux">凯信通http://sms.corecms.net:9999/sms.aspx阿里云为【dysmsapi.aliyuncs.com】阿里云还请参考 https://api.aliyun.com/product/Dysmsapi</div>
</div>
@@ -79,7 +90,7 @@
<div class="layui-input-inline layui-inline-5">
<input type="text" name="smsSignature" value="{{d.data.configs['smsSignature']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">短信签名2-8个汉字以内</div>
<div class="layui-form-mid layui-word-aux">凯信通短信签名2-8个汉字以内阿里云为平台先通过申请</div>
</div>
<div class="layui-form-item">
@@ -118,7 +129,9 @@
<div class="layui-tab-item">
<div class="layui-form coreshop-form">
<blockquote class="layui-elem-quote">
凯信通短信为直发内容所以不需要模板直接填写需要发送的内容即可
</blockquote>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsTplForReg']['sKey']}}</label>
<div class="layui-input-inline layui-inline-12">
@@ -213,6 +226,106 @@
</div>
</div>
<div class="layui-tab-item">
<div class="layui-form coreshop-form">
<blockquote class="layui-elem-quote">
1阿里云短信填写的为模板编码不是填写具体内容另外注意前面三个验证码的短信变量必须设置为 ${code}否则无法发送<br />
2阿里云短信模板编码需要在阿里云短信服务中申请模板然后填写模板编码<br />
3阿里云的模板内容可以参考凯信通我们内置的短信发送内容仅供参考
</blockquote>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForReg']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForReg" value="{{d.data.configs['smsAliYunTplForReg']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">变量属性${code}将替换代码中的数字验证码请在模板中选择验证码短信</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForLogin']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForLogin" value="{{d.data.configs['smsAliYunTplForLogin']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">变量属性${code}将替换代码中的数字验证码请在模板中选择验证码短信</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForVeri']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForVeri" value="{{d.data.configs['smsAliYunTplForVeri']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">变量属性${code}将替换代码中的数字验证码请在模板中选择验证码短信</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForCreateOrder']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForCreateOrder" value="{{d.data.configs['smsAliYunTplForCreateOrder']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForOrderPayed']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForOrderPayed" value="{{d.data.configs['smsAliYunTplForOrderPayed']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForRemindOrderPay']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForRemindOrderPay" value="{{d.data.configs['smsAliYunTplForRemindOrderPay']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForDeliveryNotice']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForDeliveryNotice" value="{{d.data.configs['smsAliYunTplForDeliveryNotice']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForAfterSalesPass']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForAfterSalesPass" value="{{d.data.configs['smsAliYunTplForAfterSalesPass']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForRefundSuccess']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForRefundSuccess" value="{{d.data.configs['smsAliYunTplForRefundSuccess']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForSellerOrderNotice']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForSellerOrderNotice" value="{{d.data.configs['smsAliYunTplForSellerOrderNotice']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
<div class="layui-form-mid layui-word-aux">此短信是用来通知商家有新的订单使用</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">{{d.data.configs['smsAliYunTplForCommon']['sKey']}}</label>
<div class="layui-input-inline layui-inline-3">
<input type="text" name="smsAliYunTplForCommon" value="{{d.data.configs['smsAliYunTplForCommon']['sValue']}}" lay-verify="title" autocomplete="off" placeholder="" class="layui-input">
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">&nbsp;</label>
<div class="layui-input-block">
<button class="layui-btn" lay-submit="" lay-filter="save">保存更改</button>
</div>
</div>
</div>
</div>
</div>
</div>

View File

@@ -429,6 +429,14 @@
</summary>
<returns></returns>
</member>
<member name="M:CoreCms.Net.Web.WebApi.Controllers.GoodController.GetCategories(System.Collections.Generic.List{CoreCms.Net.Model.Entities.CoreCmsGoodsCategory},System.Int32)">
<summary>
迭代方法
</summary>
<param name="oldCategories"></param>
<param name="parentId"></param>
<returns></returns>
</member>
<member name="M:CoreCms.Net.Web.WebApi.Controllers.GoodController.GetGoodsPageList(CoreCms.Net.Model.FromBody.FMPageByWhereOrder)">
<summary>
根据查询条件获取分页数据