当前位置: 首页 > news >正文

第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方短信发送服务平台还有容联云和凯信通过&#xff0c;在配置上来说阿里云和容联云配置都比较复杂&#xff0c;网上程序集成示例完善&#xff0c;资费灵活。凯信通配置十分简单只要在程序中指定其…...

CSGO社区服搭建服务器架设游戏服务端教程

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

【Linux学习】基础IO——系统调用 | 文件描述符fd | 重定向

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux学习》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 基础IO&#x1f34e;文件操作&#x1f349;使用C接口进行文件操作&#x1f349;文件操作的系统调…...

PLC实验—西门子S7 1200读取超声波传感器数据

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

一次Linux系统密码修改失败事件

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

C语言循环控制语句Break,goto,continue语句讲解

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

Zabbix“专家坐诊”第183期问答汇总

问题一 Q&#xff1a;老师&#xff0c;请问一下zabbix采集的数据怎么过滤&#xff0c;获取数据是nottime20:30 notafter3&#xff0c;怎么过滤出netafter3 &#xff1f;谢谢。 A&#xff1a;过滤器设置如下图。 问题二 Q&#xff1a;大佬&#xff0c;请问一下被管节点部署了…...

以太网协议和DNS

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

【设计模式】原型模式与建造者模式

原型模式 原型模式是指通过原型实例指定创建对象的种类&#xff0c;然后通过拷贝的方式创建新的对象。属于创建型模式 原型模式的核心在于拷贝原型对象&#xff0c;主要用于对对象的复制。当你需要通过一大段get/set方法去构建对象的时候&#xff0c;就可以考虑使用原型模式了…...

QT之Http请求

今天我们介绍一下QT的http请求&#xff0c;这里有post和get两种方式 一、post请求方式&#xff1a;参数分为网址和具体请求值两个部分&#xff0c;有时候还需要设置头信息&#xff0c;看具体情况定 1 void MainWindow::sendPostRequest()2 {3 QNetworkAccessManager *m_pH…...

何谓dB , dB怎么理解?

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

【数据聚类|深度聚类】Unsupervised Deep Embedding for Clustering Analysis(DEC)论文研读

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

Nuxt.js项目开发过程遇到的问题以及对Nuxt.js的学习与总结

文章目录&#x1f4cb;前言&#x1f4bb;Nuxtjs3快速了解&#x1f3af;nuxtjs是什么&#xff1f;官网是这样介绍它的。&#x1f3af;关于nuxtjs的SSR开发&#x1f9e9;SSR应用场景&#x1f9e9;nuxtjs的特性&#x1f4bb;nuxtjs的初始目录结构&#x1f3af;关于各个目录的解释&…...

JavaSE:异常机制

异常概念异常发生的原因用户输入非法数据要打开的文件不存在网络中断/JVM内存溢出&#xff08;JVM是JRE的一部分。它是一个虚构出来的计算机&#xff09;除0、非法参数等三种类型的异常&#xff0c;用以理解异常检查性异常【otherException】&#xff1a;程序员无法预见的&…...

Go mockito 使用说明 (github/mockey)

GitHub - bytedance/mockey: a simple and easy-to-use golang mock library Go mockito 是什么? mockey是一个简单易用的golang mock库&#xff0c;可以快速方便的mock函数和变量。目前广泛应用于字节跳动服务的单元测试编写。底层是monkey patch&#xff0c;通过在运行时重…...

Spring Boot+Vue前后端分离项目练习01之网盘项目的搭建

1.前期设计 一般看来&#xff0c;网盘系统主要实体包括&#xff1a;用户、存储信息、用户文件、文件、回收文件等基本功能点。 各实体对应的表结构如下所示&#xff1a; 表名&#xff1a;user&#xff08;用户表&#xff09; 字段名属性说明userIdbigint主键usernamevarcha…...

超详细MySQL(免安装版)安装与配置

一、MySQL下载 首先打开MySQL官网&#xff0c;官网首页地址为 MySQL官网首页地址 进入官网后如下图所示&#xff0c;点击DOWNLOADS进入下载页面 下滑页面找到MySQL Community&#xff08;GPL&#xff09;Downloads>>并点击 接下来点击MySQL Community Server 若想要安…...

STM32F1,F4,L1系列禁止JTAG和SW引脚方法

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

NVIDIA CUDA初级教程视频学习笔记1

周斌老师 课程链接&#xff1a; 目录第一课内容生态环境第一课 CPU体系架构的概述什么是CPU指令存储器架构CPU内部的并行性第一课 预修课程&#xff1a; Cuda c programming guide 参考内容 1,2&#xff0c;3查找一下。 内容 CPU体系架构概述 并行程序设计概述 CUDA开发环境…...

CEC2005:星雀优化算法(Nutcracker optimizer algorithm,NOA)求解CEC2005(提供MATLAB代码)

一、星雀优化算法NOA 星雀优化算法(Nutcracker optimizer algorithm,NOA)由Mohamed Abdel-Basset等人于2023年提出&#xff0c;该算法模拟星雀的两种行为&#xff0c;即&#xff1a;在夏秋季节收集并储存食物&#xff0c;在春冬季节搜索食物的存储位置。 星鸦单独或成对活动&…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)

说明&#xff1a; 想象一下&#xff0c;你正在用eNSP搭建一个虚拟的网络世界&#xff0c;里面有虚拟的路由器、交换机、电脑&#xff08;PC&#xff09;等等。这些设备都在你的电脑里面“运行”&#xff0c;它们之间可以互相通信&#xff0c;就像一个封闭的小王国。 但是&#…...

conda相比python好处

Conda 作为 Python 的环境和包管理工具&#xff0c;相比原生 Python 生态&#xff08;如 pip 虚拟环境&#xff09;有许多独特优势&#xff0c;尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处&#xff1a; 一、一站式环境管理&#xff1a…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

04-初识css

一、css样式引入 1.1.内部样式 <div style"width: 100px;"></div>1.2.外部样式 1.2.1.外部样式1 <style>.aa {width: 100px;} </style> <div class"aa"></div>1.2.2.外部样式2 <!-- rel内表面引入的是style样…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit&#xff08;传感器服务&#xff09;# 前言 在运动类应用中&#xff0c;运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据&#xff0c;如配速、距离、卡路里消耗等&#xff0c;用户可以更清晰…...

R语言速释制剂QBD解决方案之三

本文是《Quality by Design for ANDAs: An Example for Immediate-Release Dosage Forms》第一个处方的R语言解决方案。 第一个处方研究评估原料药粒径分布、MCC/Lactose比例、崩解剂用量对制剂CQAs的影响。 第二处方研究用于理解颗粒外加硬脂酸镁和滑石粉对片剂质量和可生产…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

Razor编程中@Html的方法使用大全

文章目录 1. 基础HTML辅助方法1.1 Html.ActionLink()1.2 Html.RouteLink()1.3 Html.Display() / Html.DisplayFor()1.4 Html.Editor() / Html.EditorFor()1.5 Html.Label() / Html.LabelFor()1.6 Html.TextBox() / Html.TextBoxFor() 2. 表单相关辅助方法2.1 Html.BeginForm() …...

MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)

macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 &#x1f37a; 最新版brew安装慢到怀疑人生&#xff1f;别怕&#xff0c;教你轻松起飞&#xff01; 最近Homebrew更新至最新版&#xff0c;每次执行 brew 命令时都会自动从官方地址 https://formulae.…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...