阿里的短信服务分为三块,一是阿里云短信服务,二是云通讯,三是阿里大于,不过后期都会统一到阿里云短信服务平台的,所以这里只需要学习如何使用阿里云短信服务就可以了。
如果是个人开发者,项目呢还没上线,项目中还需要用到短信服务,想熟悉一下短信服务的代码调用,那看这个教程就对了。
注册登录,然后点击免费开通
这里一定要把AccessKeyId和AccessKeySecret 记录下来!!!
AccessKeyId | AccessKeySecret |
---|---|
xxxxx | xxxxx |
这里的签名名称建议使用ABC商城,使用其他的审核不容易通过。适用场景选择验证码,不要选择通用!!!因为选择通用要上传一大堆东西,太麻烦。
建议就和这个一样,变量只支持一个,模板类型一定选“验证码”。否则审核很难通过。
短信服务中的变量及其值要以json字符串的形式作为参数传入,因为拼接字符串太过麻烦,这里建议使用实体类转json字符串的形式。
/**
* 短信内容VO类
*/
@Data
public class AliyunSmsVO1 {
private String code; // 验证码
}
/**
* 阿里云短信服务工具类
*/
public class AliyunSmsUtils {
public AliyunSmsUtils() {
super();
}
//产品名称:云通信短信API产品,开发者无需替换
static final String product = "Dysmsapi";
//产品域名,开发者无需替换
static final String domain = "dysmsapi.aliyuncs.com";
// TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
static final String accessKeyId = "xxxxxx"; // TODO 修改成自己的accessKeyId
static final String accessKeySecret = "xxxxxx"; // TODO 修改成自己的accessKeySecret
static final String signName = "ABC商城";
static final String templateCode = "SMS_206548955";
/**
* 发送短信
* @param telephone 发送的手机号码
* @param content 发送的内容,json字符串
* @return
* @throws ClientException
*/
public static SendSmsResponse sendSms(String telephone,String content) throws ClientException {
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();
//必填:待发送手机号
request.setPhoneNumbers(telephone);
//必填:短信签名-可在短信控制台中找到
request.setSignName(signName); // TODO 修改成自己的签名
//必填:短信模板-可在短信控制台中找到
request.setTemplateCode(templateCode); // TODO 修改成自己的模板CODE
//可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为"{\"code\":\"123456\"}"
request.setTemplateParam(content);
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("yourOutId");
//hint 此处可能会抛出异常,注意catch
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);
if(sendSmsResponse.getCode()!= null && sendSmsResponse.getCode().equals("OK")){
System.out.println("短信发送成功!");
}else {
System.out.println("短信发送失败!");
}
return sendSmsResponse;
}
public static void main(String[] args) throws ClientException, InterruptedException {
AliyunSmsVO1 aliyunSmsVO1 = new AliyunSmsVO1();
aliyunSmsVO1.setCode("11111");
String s = JSONObject.toJSONString(aliyunSmsVO1);
//发短信
SendSmsResponse response =sendSms("xxxxx",s); // TODO 填写你需要测试的手机号码
System.out.println("短信接口返回的数据----------------");
System.out.println("Code=" + response.getCode());
System.out.println("Message=" + response.getMessage());
System.out.println("RequestId=" + response.getRequestId());
System.out.println("BizId=" + response.getBizId());
}
}
HTML代码:<input onkeyup="onlyNumber(this)" onblur="onlyNumber(this)" />js代码://强制限制只能输入数字function onlyNumber(obj){ //得到第一个字符是否为负号 var t = obj.value.charAt(0); //先把非数字的都替换掉,除了数字和. obj.value =...
Vue根据浏览器窗体变化动态设置Element Table组件的最大高度这个场景应该经常遇到,比如说在一个页面有一个table,想让他数据过多的时候自动出现滚动条而不至于冲到屏幕外被隐藏,如果表格下面还有换页的话,换页直接冲没了,所以需要计算这个table表格的最大高度。使用的是饿了吗Element组件库的table组件,有一个属性是 max-height ,设置表格的最大高度,高出自动出现纵向滚动条。<el-table :data="dataList" :max-height="m
问题 1840: [蓝桥杯][2015年第六届真题]赢球票时间限制: 1Sec 内存限制: 128MB 提交: 160 解决: 84题目描述某机构举办球票大奖赛。获奖选手有机会赢得若干张球票。主持人拿出 N 张卡片(上面写着 1~N 的数字),打乱顺序,排成一个圆圈。你可以从任意一张卡片开始顺时针数数: 1,2,3.....如果数到的数字刚好和卡片上的数字相同,则把该卡片收入囊中...
先把内容放入一个input中然后判断是插入还是修改如果是修改才会向富文本编辑器中嵌入html代码UE.getEditor("chvGoodsRemark", {autoClearinitialContent:false,wordCount:true,elementPathEnabled:true,autoHeightEnabled:false,maximumWords:0,fullscreen:f...
Android ADB命令大全(通过ADB命令查看wifi密码、MAC地址、设备信息、操作文件、查看文件、日志信 获取序列号: adb get-serialno查看连接计算机的设备: adb devices重启机器: adb reboot重启到bootloader,即刷机模式: adb reboot bootload
接上一章<额外域控制器_安装之二_(WindowsServer2008R2SP1英文版)>!在这章中,我们学习如何在DC01上安装证书服务角色!1.我们登陆到DC01服务器,打开ServerManager--Add&Roes角色,选择以下功能并点击Next!2.保持默认点击Next!3.注意选中以下内容,因为我们可以放便通过WEB方式申请!4.保持默认不变...
springClound有关feign的分析,作者从示例开头一步一步帮你揭开feign的神秘面纱。作者从四个方面阐述springClound的feign组件 1、feign的概念以及使用实例 2、通过@EnableFeignClient注解 分析了feign和spring结合的原理 3、通过@FeignClient注解,分析feign如何使用希望能给你在学习springClound的过程中带来一些帮助。
前段时间,项目中需要使用阿里云短信以及短信回执,在这里记录一下遇到的问题以及解决方案。首先,调用阿里云的短信API,返回类型是SendSmsResponse,格式如下。Code表示调用API的返回值,具体错误码参考官网[API错误码]。当Code为OK时表示调用API成功,但这并不表示接收方收到该条短信,这时候需要查看短信发送回执,也就是订阅SmsReport短信状态报告,获取短信发送状态。...
经常在程序操作文件时,遇到文件以及损坏的问题,那么如何校验文件是否损坏呢?这就需要Apache Tika包了,maven引用如下:org.apache.tikatika-parsers1.16org.apache.tikatika1.16pomorg.apache.tikatika-core1.16使用方法:try {Tika tika = new Tika();URL url = new URL...
1、根据业务需求设计数据库表2、根据数据库表设计一个Excel模板模板的每列属性必须与表字段一一对应3、环境准备我这里项目环境是基于SpringBoot单体式架构,持久层用的公司框架,内置了基于MyBatis-Plus的各种单表操作的方法。导入依赖 <!--使用POI读取文件--> <dependency> <groupId>org.apache.poi</groupId>
1 字典1.1 可变类型与不可变类型序列是以连续的整数为索引,与此不同的是,字典以"关键字"为索引,关键字可以是任意不可变类型,通常用字符串或数值。字典是 Python 唯一的一个 映射类型,字符串、元组、列表属于序列类型。那么如何快速判断一个数据类型 X 是不是可变类型的呢?两种方法:麻烦方法:用 id(X) 函数,对 X 进行某种操作,比较操作前后的 id,如果不一样,则 X 不可变,如果一样,则 X 可变。便捷方法:用 hash(X),只要不报错,证明 X 可被哈希,即不可变,反过来不可
Vue-cli3以上版本怎么配置Webpackvue-cli3以下版本中,关于webpack的一些配置都在config目录文件中,可是vue-cli3以上版本中,没有了config目录,那该怎么配置webpack呢?这时,vue-cli给我们提供了一个可选的配置文件(但需要我们自己手动创建哦vue.config.js,跟package.js同级)看下vue.config.js中常用的配置module.exports = {}publicPath:部署应用包的基本Url,默认/, 可以设置为