1.首先要注册阿里云,购买阿里云短信服务,拿到AccessKey ID和AccessKey Secret

链接: https://usercenter.console.aliyun.com/#/manage/ak

2.创建短信签名和模板

链接: https://dysms.console.aliyun.com/dysms.htm#/domestic/text/sign

3.使用maven导入阿里提供的SDK包

<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.5.3</version>
</dependency>

4.封装好的自拟定工具类

import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.web.multipart.MultipartFile;import java.io.IOException;
import java.util.Base64;
import java.util.Map;/*** 阿里云短信工具类** <dependency>* <groupId>com.aliyun</groupId>* <artifactId>aliyun-java-sdk-core</artifactId>* <version>4.5.3</version>* </dependency>*/
public class AliYunSmsUtils {//阿里云用户AccessKey IDprivate static final String ACCESS_KEY_ID = "aaa";//阿里云用户AccessKey Secretprivate static final String ACCESS_SECRET = "bb";//阿里云短信服务器区域类型private static final String REGION_ID = "cn-hangzhou";//阿里云短信请求地址private static final String ALIYUN_IP = "dysmsapi.aliyuncs.com";//阿里云短信服务版本号private static final String VERSION = "2017-05-25";/*** 发送短信** @param phoneNumbers 接收短信的手机号码* @param mapContent   短信内容,key是对应短信模板的参数字段,value是字段对应的内容* @param smsCodeType  短信模板签名和短信模板code* @return*/public static String startSendSms(String phoneNumbers, Map<String, String> mapContent, SmsCodeType smsCodeType) {if (StringUtils.getNotNull(phoneNumbers) || mapContent.isEmpty() || smsCodeType == null) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.SEND_SMS);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置接收短信的手机号码commonRequest.putQueryParameter("PhoneNumbers", phoneNumbers);//设置阿里云短信模板签名commonRequest.putQueryParameter("SignName", smsCodeType.signName);//设置阿里云短信模板codecommonRequest.putQueryParameter("TemplateCode", smsCodeType.templateCode);//设置短信内容commonRequest.putQueryParameter("TemplateParam", parsingKeyValue(mapContent));try {//确认发送短信commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {//参数配置校验未通过错误e.printStackTrace();}return commonResponse.getData();}/*** 批量发送短信** @param phoneAndContentMap 接收手机号码集合,短信签名集合,短信内容集合* @param smsCodeType        短信模板code* @return*/public static String startSendBatchSms(Map<Map<String, SmsCodeType>, Map<String, String>> phoneAndContentMap, SmsCodeType smsCodeType) {if (phoneAndContentMap.isEmpty() || smsCodeType == null) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.BATCH_SEND_SMS);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置接收短信的手机号码String a = parsingPhone(phoneAndContentMap);commonRequest.putQueryParameter("PhoneNumberJson", parsingPhone(phoneAndContentMap));//设置阿里云短信模板签名String b = parsingSignName(phoneAndContentMap);commonRequest.putQueryParameter("SignNameJson", parsingSignName(phoneAndContentMap));//设置阿里云短信模板codecommonRequest.putQueryParameter("TemplateCode", smsCodeType.templateCode);//设置短信内容String c = parsingValue(phoneAndContentMap);commonRequest.putQueryParameter("TemplateParamJson", parsingValue(phoneAndContentMap));try {//确认发送短信commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {//参数配置校验未通过错误e.printStackTrace();}return commonResponse.getData();}/*** 查询指定日期下的指定/所有短信** @param phoneNumbers 接收短信的手机号码* @param time         发送短信的时间,格式 YYYYmmDD* @param page         当前页* @param limit        每页条数* @param bizId        发送短信成功以后返回的唯一标识* @return*/public static String startQuerySendDetails(String phoneNumbers, String time, int page, int limit, String bizId) {if (StringUtils.getNotNull(phoneNumbers) || StringUtils.getNotNull(time) || page < 1 || limit < 1) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.QUERY_SEND_DETAILS);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置当前页commonRequest.putQueryParameter("CurrentPage", String.valueOf(page));//设置每页条数commonRequest.putQueryParameter("PageSize", String.valueOf(limit));//设置发送短信的时间,格式 YYYYmmDDcommonRequest.putQueryParameter("SendDate", time);//设置接收短信的手机号码commonRequest.putQueryParameter("PhoneNumber", phoneNumbers);if (!StringUtils.getNotNull(bizId)) {commonRequest.putQueryParameter("BizId", bizId);}try {commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return commonResponse.getData();}/*** 申请通用短信签名** @param signName          短信签名名称* @param smsSignSourceType 短信签名类型* @param remark            短信签名说明* @param file              短信签名图片(针对不同的类型传不同的图片)* @return*/public static String startAddSmsSign(String signName, SmsSignSourceType smsSignSourceType, String remark, MultipartFile file) {if (StringUtils.getNotNull(signName) || smsSignSourceType == null || StringUtils.getNotNull(remark) || file == null) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.ADD_SMS_SIGN);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置阿里云短信签名申请签名名称commonRequest.putQueryParameter("SignName", signName);//设置阿里云短信签名申请类型commonRequest.putQueryParameter("SignSource", String.valueOf(smsSignSourceType.SignSourceId));//设置阿里云短信签名申请说明commonRequest.putQueryParameter("Remark", remark);//设置阿里云短信签名,当前图片格式String str = file.getOriginalFilename();commonRequest.putQueryParameter("SignFileList.1.FileSuffix", str.substring(str.indexOf(".") + 1));try {//设置阿里云短信签名,当前图片的base64字符串commonRequest.putQueryParameter("SignFileList.1.FileContents", Base64.getEncoder().encodeToString(file.getBytes()));commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return commonResponse.getData();}/*** 申请短信模板** @param smsTemplateType 短信模板类型* @param templateName    短信模板名称* @param templateContent 短信模板格式内容,对应的参数用 ${name} 表示,对应发送短信时候的内容参数* @param remark          短信模板申请说明* @return*/public static String startAddSmsTemplate(SmsTemplateType smsTemplateType, String templateName, String templateContent, String remark) {if (smsTemplateType == null || StringUtils.getNotNull(templateName) || StringUtils.getNotNull(templateContent) || StringUtils.getNotNull(remark)) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.ADD_SMS_TEMPLATE);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置阿里云短信模板申请类型commonRequest.putQueryParameter("TemplateType", String.valueOf(smsTemplateType.TemplateTypeId));//设置阿里云短信模板申请名称commonRequest.putQueryParameter("TemplateName", templateName);//设置阿里云短信模板申请格式内容commonRequest.putQueryParameter("TemplateContent", templateContent);//设置阿里云短信模板申请说明commonRequest.putQueryParameter("Remark", remark);try {commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return commonResponse.getData();}/*** 删除短信签名** @param signName 短信签名名称* @return*/public static String startDeleteSmsSign(String signName) {if (StringUtils.getNotNull(signName)) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.DELETE_SMS_SIGN);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置要删除的短信模板签名名称commonRequest.putQueryParameter("SignName", signName);try {commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return commonResponse.getData();}/*** 删除短信模板** @param templateCode* @return*/public static String startDeleteSmsTemplate(String templateCode) {if (StringUtils.getNotNull(templateCode)) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.DELETE_SMS_TEMPLATE);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置要删除的短信模板签名名称commonRequest.putQueryParameter("TemplateCode", templateCode);try {commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return commonResponse.getData();}/*** 修改申请未通过的短信签名再次申请** @param signName          短信签名名称(必须要是申请未通过的短信签名,不然会报错)* @param smsSignSourceType 短信签名类型* @param remark            短信签名说明* @param file              短信签名图片(针对不同的类型传不同的图片)* @return*/public static String startModifySmsSign(String signName, SmsSignSourceType smsSignSourceType, String remark, MultipartFile file) {if (StringUtils.getNotNull(signName) || smsSignSourceType == null || StringUtils.getNotNull(remark) || file == null) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.MODIFY_SMS_SIGN);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置阿里云短信签名申请签名名称commonRequest.putQueryParameter("SignName", signName);//设置阿里云短信签名申请类型commonRequest.putQueryParameter("SignSource", String.valueOf(smsSignSourceType.SignSourceId));//设置阿里云短信签名申请说明commonRequest.putQueryParameter("Remark", remark);//设置阿里云短信签名,当前图片格式String str = file.getOriginalFilename();commonRequest.putQueryParameter("SignFileList.1.FileSuffix", str.substring(str.indexOf(".") + 1));try {//设置阿里云短信签名,当前图片的base64字符串commonRequest.putQueryParameter("SignFileList.1.FileContents", Base64.getEncoder().encodeToString(file.getBytes()));commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return commonResponse.getData();}/*** 修改申请未通过的短信模板再次申请** @param smsTemplateType 短信模板类型* @param templateName    短信模板名称* @param templateCode    短信模板code(申请短信模板时生成的code,修改的时候要带上,必须要是未通过的,不然报错)* @param templateContent 短信模板格式内容,对应的参数用 ${name} 表示,对应发送短信时候的内容参数* @param remark          短信模板申请说明* @return*/public static String startModifySmsTemplate(SmsTemplateType smsTemplateType, String templateName, String templateCode, String templateContent, String remark) {if (smsTemplateType == null || StringUtils.getNotNull(templateName) || StringUtils.getNotNull(templateCode) || StringUtils.getNotNull(templateContent) || StringUtils.getNotNull(remark)) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.MODIF_SMS_TEMPLATE);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置阿里云短信模板申请类型commonRequest.putQueryParameter("TemplateType", String.valueOf(smsTemplateType.TemplateTypeId));//设置阿里云短信模板申请名称commonRequest.putQueryParameter("TemplateName", templateName);//设置阿里云短信模板修改再次申请codecommonRequest.putQueryParameter("TemplateCode", templateCode);//设置阿里云短信模板申请格式内容commonRequest.putQueryParameter("TemplateContent", templateContent);//设置阿里云短信模板申请说明commonRequest.putQueryParameter("Remark", remark);try {commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return commonResponse.getData();}/*** 查询指定名称的短信签名** @param signName 要查询的短信签名名称* @return*/public static String startQuerySmsSign(String signName) {if (StringUtils.getNotNull(signName)) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.QUERY_SMS_SIGN);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置要查询的短信签名名称commonRequest.putQueryParameter("SignName", signName);try {commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return commonResponse.getData();}/*** 查询指定code的短信模板** @param templateCode 要查询的短信模板code* @return*/public static String startQuerySmsTemplate(String templateCode) {if (StringUtils.getNotNull(templateCode)) {throw new NullPointerException();}//初始化设置阿里云短信发送消息体CommonRequest commonRequest = getCommonRequest(SmsInterfaceType.QUERY_SMS_TEMPLATE);//初始化阿里云短信接收结果消息体CommonResponse commonResponse = null;//初始化设置阿里云用户唯一标识和短信服务器区域类型(用来认证用户的)DefaultProfile defaultProfile = DefaultProfile.getProfile(REGION_ID, ACCESS_KEY_ID, ACCESS_SECRET);IAcsClient iAcsClient = new DefaultAcsClient(defaultProfile);//设置阿里云短信消息体请求类型commonRequest.setSysMethod(MethodType.POST);//设置阿里云短信消息体接口调用ip地址commonRequest.setSysDomain(ALIYUN_IP);//设置阿里云短信服务版本commonRequest.setSysVersion(VERSION);//设置阿里云短信请求接口类型commonRequest.setSysAction(SmsInterfaceType.QUERY_SMS_TEMPLATE.type);//设置阿里云短信服务器区域类型commonRequest.putQueryParameter("RegionId", REGION_ID);//设置要查询的短信签名名称commonRequest.putQueryParameter("TemplateCode", templateCode);try {commonResponse = iAcsClient.getCommonResponse(commonRequest);} catch (ServerException e) {e.printStackTrace();} catch (ClientException e) {e.printStackTrace();}return commonResponse.getData();}/*** 短信请求接口类型*/@Getter@AllArgsConstructorprivate enum SmsInterfaceType {//申请短信模板签名ADD_SMS_SIGN("AddSmsSign"),//申请短信模板ADD_SMS_TEMPLATE("AddSmsTemplate"),//删除短信模板签名DELETE_SMS_SIGN("DeleteSmsSign"),//删除短信模板DELETE_SMS_TEMPLATE("DeleteSmsTemplate"),//修改未审核通过的短信模板签名,重新申请审核MODIFY_SMS_SIGN("ModifySmsSign"),//修改未审核通过的短信模板,重新申请审核MODIF_SMS_TEMPLATE("ModifySmsTemplate"),//查询所有短信模板签名QUERY_SMS_SIGN("QuerySmsSign"),//查询所有短信模板QUERY_SMS_TEMPLATE("QuerySmsTemplate"),//查询所有已发送的短信QUERY_SEND_DETAILS("QuerySendDetails"),//发送短信SEND_SMS("SendSms"),//批量发送短信BATCH_SEND_SMS("SendBatchSms");private final String type;}/*** 短信签名和短信模板code*/@Getter@AllArgsConstructorpublic enum SmsCodeType {//登录确认验证码CONFIRM_LOGIN("道贞财务", "SMS_189465821"), //登录异常验证码LOGIN_ABNORMAL("道贞财务", "SMS_210350075"),//用户注册验证码USER_ADD("道贞财务", "SMS_210350074"),//修改密码验证码UPDATE_PASSWORD("道贞财务", "SMS_210350073"),//用户信息变更验证码UPDATE_CONTENT("道贞财务", "SMS_210350072"),//身份验证验证码IDENTITY_CODE("道贞财务", "SMS_210350077");private final String signName;private final String templateCode;}/*** 短信模板签名类型*/@Getter@AllArgsConstructorpublic enum SmsSignSourceType {//企事业单位的全称或简称。ENTERPRISE(0),//工信部备案网站的全称或简称。WEB(1),//App应用的全称或简称。APP(2),//公众号或小程序的全称或简称。APPLET(3),//电商平台店铺名的全称或简称。CONSULT(4),//商标名的全称或简称。TRADEMARK(5);private final Integer SignSourceId;}/*** 短信模板类型*/@Getter@AllArgsConstructorpublic enum SmsTemplateType {//验证码。CODE(0),//短信通知。notice(1),//推广短信。push(2),//国际/港澳台消息。countries(3);private final Integer TemplateTypeId;}/*** 所有请求通用参数** @param smsInterfaceType* @return*/private static CommonRequest getCommonRequest(SmsInterfaceType smsInterfaceType) {//初始化设置阿里云短信发送消息体CommonRequest commonRequest = new CommonRequest();//设置阿里云短信消息体请求类型commonRequest.setSysMethod(MethodType.POST);//设置阿里云短信消息体接口调用ip地址commonRequest.setSysDomain(ALIYUN_IP);//设置阿里云短信服务版本commonRequest.setSysVersion(VERSION);//设置阿里云短信请求接口类型commonRequest.setSysAction(smsInterfaceType.type);//设置阿里云短信服务器区域类型commonRequest.putQueryParameter("RegionId", REGION_ID);return commonRequest;}/*** 把短信内容进行排版,排成阿里云要求的格式** @param mapContent* @return*/private static String parsingKeyValue(Map<String, String> mapContent) {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("{");for (String key : mapContent.keySet()) {stringBuilder.append("'" + key + "':'" + mapContent.get(key) + "',");}return stringBuilder.substring(0, stringBuilder.length() - 1) + "}";}/*** 把批量发送短信的接收手机号码进行排版,排成阿里云要求的格式** @param phoneAndContentMap N个手机号码* @return*/private static String parsingPhone(Map<Map<String, SmsCodeType>, Map<String, String>> phoneAndContentMap) {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("[");for (Map<String, SmsCodeType> stringSmsCodeTypeMap : phoneAndContentMap.keySet()) {if (stringSmsCodeTypeMap.size() == 1) {for (String key : stringSmsCodeTypeMap.keySet()) {stringBuilder.append("'" + key + "',");}} else {throw new ArrayIndexOutOfBoundsException();}}return stringBuilder.substring(0, stringBuilder.length() - 1) + "]";}/*** 把批量发送短信的短信签名名称进行排版,排成阿里云要求的格式** @param phoneAndContentMap* @return*/private static String parsingSignName(Map<Map<String, SmsCodeType>, Map<String, String>> phoneAndContentMap) {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("[");for (Map<String, SmsCodeType> stringSmsCodeTypeMap : phoneAndContentMap.keySet()) {if (stringSmsCodeTypeMap.size() == 1) {for (SmsCodeType value : stringSmsCodeTypeMap.values()) {stringBuilder.append("'" + value.signName + "',");}} else {throw new ArrayIndexOutOfBoundsException();}}return stringBuilder.substring(0, stringBuilder.length() - 1) + "]";}/*** 把批量发送短信的短信内容进行排版,排成阿里云要求的格式** @param phoneAndContentMap 短信参数名和对应的内容* @return*/private static String parsingValue(Map<Map<String, SmsCodeType>, Map<String, String>> phoneAndContentMap) {StringBuilder stringBuilder = new StringBuilder();stringBuilder.append("[");for (Map<String, SmsCodeType> key : phoneAndContentMap.keySet()) {stringBuilder.append(parsingKeyValue(phoneAndContentMap.get(key)) + ",");}return stringBuilder.substring(0, stringBuilder.length() - 1) + "]";}}

5.更详细的官方教程看这里

链接: https://help.aliyun.com/document_detail/59210.html?spm=a2c4g.11174283.4.1.1b442c4229MHcp
链接: https://api.aliyun.com/new?spm=a2c4g.11186623.2.4.1c5a1e08EoAftX#/?product=Dysmsapi

[风一样的创作]二次封装阿里云短信 验证码 发送短信 查询短信 编辑短信相关推荐

  1. 【阿里云高校计划】Day4 汽车保险数据查询

    [阿里云高校计划]Day4 汽车保险数据查询 代码结构 api.php为主程序,负责接收请求与逻辑关系处理 upload.class.php为PHP上传类 index.html为前端页面,时间仓促没有 ...

  2. 自动识别阿里云的滚动验证码

    有些人需要在企业查等网站自动识别验证码.这个验证码称为阿里云的滚动验证码.虽然这看起来是很简单, 但是自动识别也不那么简单. 网上有几个文章,都是用puppet的.不过因为有个网站就阻止puppet上 ...

  3. 2019年技术盘点云数据库篇(二):阿里云携手MongoDB率先上线4.2数据库 云上数据库已是大势所趋...

    戳蓝字"CSDN云计算"关注我们哦! 作者 | 刘丹 出品 | CSDN云计算(ID:CSDNcloud) 随着技术的飞速发展,云数据库在云计算的大背景下,作为一种新兴的共享基础架 ...

  4. 风清扬Excel全套300集教程 阿里云盘

    「风清扬Excel全套300集教程」https://www.aliyundrive.com/s/uLk8ruJwe3b 点击链接保存,或者复制本段内容,打开「阿里云盘」APP ,无需下载极速在线查看, ...

  5. 传文件 华为云桌面_怎么避免亚马逊账号关联(二)?阿里云华为云ECS远程桌面教程...

    在上一篇如何避免账号关联的文章中,我们具体说明了简单有效的避免关联的方法.其中的一种方法就是阿里云或者华为云ECS,利用远程网络的设置实现远程桌面控制账号从而区分切割开账号避免关联. 上一篇没看过的同 ...

  6. (二)MQTT+阿里云实现两个设备之间的通信。

    1,介绍 MQTT+阿里云的使用 讲了如何使用阿里云,实现云端和客户端之间的通信,这篇就说客户端和客户端之间如何通信. 2,设备间通信:云产品流转 我们创建了一个名为:stm32_to_client的 ...

  7. python 批量域名证书过期查找(二),从阿里云导出后的文件夹中的excel查找

    python 读取文件夹中 从阿里云导出后的域名excel 判断域名 ssl 过期 import os import ssl import socket import requestsfrom ope ...

  8. 健康管理系统第六天(移动端开发之体检预约_经典五表联查_调用阿里云提供的短信服务进行短信验证码发送)

    一.移动端开发 1.移动端开发方式 随着移动互联网的兴起和手机的普及,目前移动端应用变得愈发重要,成为了各个商家的必争之地.例如,我们可以使用手机购物.支付.打车.玩游戏.订酒店.购票等, 以前只能通 ...

  9. 七牛云 阿里云图片存储 新增套餐 分页 定时任务Quartz(作业:编辑和删除功能)

    @TOC 第4章 预约管理-套餐管理 今日目标: 熟悉图片存储方案 掌握七牛云图片上传 掌握新增套餐并图片上传到七牛云 掌握体检套餐分页展示 熟悉定时调度任务Quartz 1. 图片存储方案 1.1 ...

最新文章

  1. 聚类Clustering
  2. ML与Information:机器学习与Information信息论之间那些七七八八、乱七八糟、剪不断理还乱的关系攻略
  3. ida动态调试apk(so层)
  4. uva 10003——Cutting Sticks
  5. 外部jar包_大数据系列之PySpark读写外部数据库
  6. sip hold 解决方法【原创】
  7. 计算机图形学全代码,计算机图形学作业参考代码
  8. 《西方确指》明心生极乐、专修净土乃大孝、持咒显空慧
  9. IDEA如何设置author头注解
  10. bzoj2109: [Noi2010]Plane 航空管制
  11. 大立公告:红外焦平面阵将以新的面貌出现
  12. 红包大战不再是两马战,内容平台为何成为新生力量?
  13. MIT6.031学习笔记:(一)code review
  14. 一寸照纯红色底图片_一寸照纯红色底图片
  15. 阿里旺旺自动回复工具开发二
  16. curl可以访问但是requests就返回安全验证
  17. PreScan快速入门到精通第三十四讲基于PreScan进行超声波雷达传感器仿真
  18. 第十五篇 项目整体管理__项目启动会议、项目目标
  19. 目标跟踪算法--Camshift 和Meanshift
  20. clannad手游汉化版_clannad游戏中文版

热门文章

  1. 用户研究:深度解析用户画像
  2. 360浏览器如何调试html,360js是什么?360浏览器如何调试js?
  3. ROS通信机制:话题、服务、参数
  4. 1. 人工智能(AI)概述
  5. 随记 asp.net使用echart,时间纵轴不显示
  6. jbod ugood 磁盘驱动状态_Win10扫描修复磁盘驱动器错误全攻略
  7. android aidl混淆代码,Android代码混淆
  8. 右键新建excel无法打开
  9. 寒武纪cnstream模型加速的python环境搭建笔记
  10. 读书随想2 - 格鲁夫给经理人的第一课