第51章 初识第3方阿里云短信验证发送服务
1 第3方阿里云短信验证发送服务准备工作
2 其它第3方短信发送服务平台
当前常用第3方短信发送服务平台还有容联云和凯信通过,在配置上来说阿里云和容联云配置都比较复杂,网上程序集成示例完善,资费灵活。凯信通配置十分简单只要在程序中指定其平台的登录名、密码和服务平台域名(http://sms.corecms.net:9999/sms.aspx)即可,但资费却比较死板。
3 Core.Configuration.SmsConfig
namespace Core.Configuration
{
/// <summary>
/// 【(阿里)短信配置--类】
/// <remarks>
/// 摘要:
/// 通过该类中的属性成员实例对“appsettings.json”文件中的第3方阿里短信服务相关数据等数据进行设定性读写操作,为当程序实现短信服务功能提供数据支撑。
/// 说明:
/// 属性成员的名称必须与JSON键/值对中的键相同,且属性成员的个数与键的个数也必须相等,
/// 否则ConfigurationBinder.Bind方法将不支持通过“appsettings.json”文件中数据库连接相关数据与当前类中的属性成员实例的设定性读写操作。
/// </remarks>
/// </summary>
public class SmsConfig : IConfig
{
/// <summary>
/// 【访问键编号】
/// <remarks>
/// 摘要:
/// 获取/设置第3方阿里短信服务1个指定的访问键编号值。
/// </remarks>
/// </summary>
public string AccessKeyId { get; set; }
/// <summary>
/// 【访问键密钥】
/// <remarks>
/// 摘要:
/// 获取/设置第3方阿里短信服务1个指定的访问键所对应的密钥。
/// </remarks>
/// </summary>
public string AccessKeySecret { get; set; }
/// <summary>
/// 【签名】
/// <remarks>
/// 摘要:
/// 获取/设置第3方阿里短信服务1个指定的签名。
/// </remarks>
/// </summary>
public string SignName { get; set; }
/// <summary>
/// 【模板代码】
/// <remarks>
/// 摘要:
/// 获取/设置第3方阿里短信服务1个指定模板的代码。
/// </remarks>
/// </summary>
public string TemplateCode { get; set; }
/// <summary>
/// 【阿里短信服务根域名】
/// <remarks>
/// 摘要:
/// 获取/设置第3方阿里短信服务的根域名。
/// </remarks>
/// </summary>
public string Endpoint { get; set; }
}
}
4 Core.Domain.Messages.SmsValidate
namespace Core.Domain.Messages
{
/// <summary>
/// 【短信验证--类】
/// <remarks>
/// 摘要:
/// 通过该实体类及其属性成员,用于实现当前程序【Core】.【领域】.【信息集】.【短信验证】实体与“[ShopDemo].[SmsValidate]”表之间的CURD的交互操作,并把这些数据存储到数据库设置实例中(内存)。
/// </remarks>
/// </summary>
public class SmsValidate : BaseEntity
{
#region 属性
/// <summary>
/// 【手机号】
/// <remarks>
/// 摘要:
/// 获取/设置1个指定的手机号。
/// </remarks>
/// </summary>
public string Phone { get; set; }
/// <summary>
/// 【短信验证码】
/// <remarks>
/// 摘要:
/// 获取/设置向1个指定手机所发送的1个指定短信验证码。
/// </remarks>
/// </summary>
public string Code { get; set; }
/// <summary>
/// 【内容】
/// <remarks>
/// 摘要:
/// 获取/设置向1个手机所发送的短信验证内容信息==内容模板+短信验证码。
/// </remarks>
/// </summary>
public string Content { get; set; }
/// <summary>
/// 【已经验证?】
/// <remarks>
/// 摘要:
/// 获取/设置1个值false(默认值:未验证)/true(未验证),该值指示1个手机的1个指定短信验证是否已经被使用。
/// 说明:
/// 已经验证说明指定短信验证码已经被使用;未验证说明指定短信验证码未被使用。
/// </remarks>
/// </summary>
public bool IsValidate { get; set; }
/// <summary>
/// 【输入错误总计】
/// <remarks>
/// 摘要:
/// 获取/设置1个手机的1个指定短信验证码输入错误的最大次数小于等于3次。
/// </remarks>
/// </summary>
public int Count { get; set; }
/// <summary>
/// 【创建时间】
/// <remarks>
/// 摘要:
/// 获取/设置短信验证实体1个指定实例第1次被持久化到短信验证表中的时间。
/// </remarks>
/// </summary>
public DateTime CreatedDateTime { get; set; }
/// <summary>
/// 【有/失效日期】
/// <remarks>
/// 摘要:
/// 获取/设置1个手机的1个指定短信验证码的有/失效日期。
/// 说明:
/// 1个手机的1个指定短信验证码的有/失效日期默认值:= CreatedDateTime+5分钟。
/// </remarks>
/// </summary>
public DateTime ExpiryDateTime { get; set; }
#endregion
}
}
5 Data.Mapping.Messages.SmsValidateBuilder
//Nuget
//Nuget--Microsoft.EntityFrameworkCore.SqlServer
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
//项目
using Core.Domain.Messages;
namespace Data.Mapping.Messages
{
/// <summary>
/// 【短信验证生成器--类】
/// <remarks>
/// 摘要:
/// 该类通过对“EntityFrameworkCore”中间件“IEntityTypeConfiguration<TEntity/>”泛型接口的“Configure”方法的定义,以实现把用户实体类及其属性成员相关约束规则及其级联关系定义,映射到短信验证表及其的相应字段上。
/// </remarks>
/// </summary>
public class SmsValidateBuilder : IEntityTypeConfiguration<SmsValidate>
{
#region 方法--IEntityTypeConfiguration<>
///<param name="builder">实体类型生成器实例,用于把当前程序中指定实体和属性所定义的约束规则,映射到数据库指定表及其字段上。</param>
/// <summary>
/// 【配置】
/// <remarks>
/// 摘要:
/// 该方法通过对“EntityFrameworkCore”中间件“IEntityTypeConfiguration<TEntity/>”泛型接口的“Configure”方法的定义,以实现把短信验证实体类及其属性成员相关约束规则及其级联关系定义,映射到短信验证表及其的相应字段上。
/// </remarks>
/// </summary>
public void Configure(EntityTypeBuilder<SmsValidate> builder)
{
//由于“EntityTypeBuilder<User>”的参数已经泛型实例化,因此builder后不能再定义为:“builder.Entity<User>().HasKey(customer => customer.Id);”。
//用户表及其字段约束规则,映射定义。
builder.HasKey(smsValidate => smsValidate.Id);
builder.Property(smsValidate => smsValidate.Phone).IsRequired().HasMaxLength(50);
builder.Property(smsValidate => smsValidate.Code).IsRequired().HasMaxLength(60);
builder.Property(smsValidate => smsValidate.Content).IsRequired().HasMaxLength(255);
builder.Property(smsValidate => smsValidate.CreatedDateTime).IsRequired();
builder.Property(smsValidate => smsValidate.ExpiryDateTime).IsRequired();
}
#endregion
}
}
对以上功能更为具体实现和注释见:230301_042shopDemo(初识第3方阿里云短信验证发送服务)。
相关文章:

第51章 初识第3方阿里云短信验证发送服务
1 第3方阿里云短信验证发送服务准备工作 2 其它第3方短信发送服务平台 当前常用第3方短信发送服务平台还有容联云和凯信通过,在配置上来说阿里云和容联云配置都比较复杂,网上程序集成示例完善,资费灵活。凯信通配置十分简单只要在程序中指定其…...

CSGO社区服搭建服务器架设游戏服务端教程
CSGO社区服搭建服务器架设游戏服务端教程 我是艾西,上一篇说了搭建CSGO服务器需要准备服务器以及安装好所需要的环境,那么今天说一下CSGO社区私人服务器怎么搭建游戏服务端 搭建CSGO服务器比较简单,Valve开发者社区wiki也给出了安装指导&…...

【Linux学习】基础IO——系统调用 | 文件描述符fd | 重定向
🐱作者:一只大喵咪1201 🐱专栏:《Linux学习》 🔥格言:你只管努力,剩下的交给时间! 基础IO🍎文件操作🍉使用C接口进行文件操作🍉文件操作的系统调…...

PLC实验—西门子S7 1200读取超声波传感器数据
PLC实验—西门子S7 1200读取超声波传感器数据 US-016超声波测距模块 实验箱上是US-016超声波测距模块,其有关信息可以看实验室的博客 US-016超声波测距模块 1号Pin:接VCC电源(直流5V) 2号Pin:量程设置引脚ÿ…...

一次Linux系统密码修改失败事件
一、事件描述 某业务系统采用移动云主机,某次因误操作导致移动云内嵌密码管理相关Pga进程导致页面无法修改密码,东移动云主机web终端登录也无法修改,密码错误次数最大已无法登录,无奈只能重启主机,修改密码;…...

C语言循环控制语句Break,goto,continue语句讲解
循环控制语句改变你代码的执行顺序。通过它你可以实现代码的跳转。 C 语言中 break 语句有以下两种用法: 当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。 它可用于终止 switch 语句中的一个 …...

Zabbix“专家坐诊”第183期问答汇总
问题一 Q:老师,请问一下zabbix采集的数据怎么过滤,获取数据是nottime20:30 notafter3,怎么过滤出netafter3 ?谢谢。 A:过滤器设置如下图。 问题二 Q:大佬,请问一下被管节点部署了…...

以太网协议和DNS
目录 🐕今日良言:跨过困难,去迎接更好的自己. 🐳一、以太网桢格式 🐳二、DNS 🐕今日良言:跨过困难,去迎接更好的自己. 🐳一、以太网桢格式 数据链路层考虑的是相邻两个节点(通过网线/光纤/无线直接相连的两个设备…...

【设计模式】原型模式与建造者模式
原型模式 原型模式是指通过原型实例指定创建对象的种类,然后通过拷贝的方式创建新的对象。属于创建型模式 原型模式的核心在于拷贝原型对象,主要用于对对象的复制。当你需要通过一大段get/set方法去构建对象的时候,就可以考虑使用原型模式了…...
QT之Http请求
今天我们介绍一下QT的http请求,这里有post和get两种方式 一、post请求方式:参数分为网址和具体请求值两个部分,有时候还需要设置头信息,看具体情况定 1 void MainWindow::sendPostRequest()2 {3 QNetworkAccessManager *m_pH…...

何谓dB , dB怎么理解?
dB 是什么单位 ?愈低愈好吗?对于声频 ( 声学及电子声学 ) 方面的单位,它是以分贝(decibel ,dB ) 来做结果的。斯多里一生专注于科学,1876 发明电话,我们都知道贝尔发明了电话,然而重要的是,他发现我们人类耳朵对声音…...

【数据聚类|深度聚类】Unsupervised Deep Embedding for Clustering Analysis(DEC)论文研读
DEC算法由两部分组成 第一部分会预训练一个SDAE模型;第二部分选取SDAE模型中的Encoder部分,加入聚类层,然后最小化KL散度进行训练聚类Absratct 提出了一种利用深度神经网络同时进行表征学习和聚类分配的方法,称之为深度嵌入聚类。该方法学习从数据空间到低纬空间的映射,并…...

Nuxt.js项目开发过程遇到的问题以及对Nuxt.js的学习与总结
文章目录📋前言💻Nuxtjs3快速了解🎯nuxtjs是什么?官网是这样介绍它的。🎯关于nuxtjs的SSR开发🧩SSR应用场景🧩nuxtjs的特性💻nuxtjs的初始目录结构🎯关于各个目录的解释&…...

JavaSE:异常机制
异常概念异常发生的原因用户输入非法数据要打开的文件不存在网络中断/JVM内存溢出(JVM是JRE的一部分。它是一个虚构出来的计算机)除0、非法参数等三种类型的异常,用以理解异常检查性异常【otherException】:程序员无法预见的&…...
Go mockito 使用说明 (github/mockey)
GitHub - bytedance/mockey: a simple and easy-to-use golang mock library Go mockito 是什么? mockey是一个简单易用的golang mock库,可以快速方便的mock函数和变量。目前广泛应用于字节跳动服务的单元测试编写。底层是monkey patch,通过在运行时重…...

Spring Boot+Vue前后端分离项目练习01之网盘项目的搭建
1.前期设计 一般看来,网盘系统主要实体包括:用户、存储信息、用户文件、文件、回收文件等基本功能点。 各实体对应的表结构如下所示: 表名:user(用户表) 字段名属性说明userIdbigint主键usernamevarcha…...

超详细MySQL(免安装版)安装与配置
一、MySQL下载 首先打开MySQL官网,官网首页地址为 MySQL官网首页地址 进入官网后如下图所示,点击DOWNLOADS进入下载页面 下滑页面找到MySQL Community(GPL)Downloads>>并点击 接下来点击MySQL Community Server 若想要安…...

STM32F1,F4,L1系列禁止JTAG和SW引脚方法
STM32F1系列 程序中在使用到JTAG、SWD的某个IO 时,需要禁用掉相关调试方法后,再配置相应的IO方式。在需要相应的接口配置前使用这些代码。 对于F1系列,调用函数进行专门的禁止。 标准库配置方式: RCC_APB2PeriphClockCmd(RCC_A…...

NVIDIA CUDA初级教程视频学习笔记1
周斌老师 课程链接: 目录第一课内容生态环境第一课 CPU体系架构的概述什么是CPU指令存储器架构CPU内部的并行性第一课 预修课程: Cuda c programming guide 参考内容 1,2,3查找一下。 内容 CPU体系架构概述 并行程序设计概述 CUDA开发环境…...

CEC2005:星雀优化算法(Nutcracker optimizer algorithm,NOA)求解CEC2005(提供MATLAB代码)
一、星雀优化算法NOA 星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出,该算法模拟星雀的两种行为,即:在夏秋季节收集并储存食物,在春冬季节搜索食物的存储位置。 星鸦单独或成对活动&…...
Python爬虫实战:研究MechanicalSoup库相关技术
一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...
内存分配函数malloc kmalloc vmalloc
内存分配函数malloc kmalloc vmalloc malloc实现步骤: 1)请求大小调整:首先,malloc 需要调整用户请求的大小,以适应内部数据结构(例如,可能需要存储额外的元数据)。通常,这包括对齐调整,确保分配的内存地址满足特定硬件要求(如对齐到8字节或16字节边界)。 2)空闲…...
三维GIS开发cesium智慧地铁教程(5)Cesium相机控制
一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点: 路径验证:确保相对路径.…...

Mybatis逆向工程,动态创建实体类、条件扩展类、Mapper接口、Mapper.xml映射文件
今天呢,博主的学习进度也是步入了Java Mybatis 框架,目前正在逐步杨帆旗航。 那么接下来就给大家出一期有关 Mybatis 逆向工程的教学,希望能对大家有所帮助,也特别欢迎大家指点不足之处,小生很乐意接受正确的建议&…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)
0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...