废话少说,先说步骤
- 申请阿里云账号
- 购买短信套餐
- 配置签名以及消息模板
- 创建Accesskey以及获取AccessKeySecret(妥善保存)
- 代码实现
配置签名和消息模板
- 这个消息签名需要审核,但是一般在申请中说明需要使用的功能和使用的地点(网站或者App的名称)是很快的,我大概半个小时两个都审核完成了,官方签名和消息模板介绍
- 这个签名是你发送消息的名称,表明了是什么公司或者那个App给你的消息,例如: [百度账号]验证码: 234234.您正在使用短信验证码登录功能,该验证码仅用于身份验证,请勿泄露给他人使用!
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190715150828756.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTUwNDgy,size_16,color_FFFFFF,t_70)
- 这个模板ID和签名名称还是比较重要的,后续发请求的必带参数之一
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190715151923165.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTUwNDgy,size_16,color_FFFFFF,t_70)
创建Accesskey以及获取AccessKeySecret(妥善保存)
- 点击右上角的人物头像创建AccessKey和AccessKeySecret
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190715152321718.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTUwNDgy,size_16,color_FFFFFF,t_70)
- 申请创建AccessKey的时候会向登陆者绑定的手机号发送一条验证码消息
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190715152952601.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMTUwNDgy,size_16,color_FFFFFF,t_70)
代码实现
public SysSmsLogBO sendCode(ApiReqHeader reqHeader,String code, String mobile) {
AliyunSmsConfig config = sysSettingsService.getConfigObject(ConfigKey.SMS_CONFIG_KEY, AliyunSmsConfig.class);
if (StringUtils.isNullOrEmpty(config)) {
throw new ReqFailedException("请先配置短信平台信息");
}
if (StringUtils.isNullOrEmpty(config.getAccessKeyId())) {
throw new ReqFailedException("请先配置短信平台AccessKeyId");
}
if (StringUtils.isNullOrEmpty(config.getAccessKeySecret())) {
throw new ReqFailedException("请先配置短信平台AccessKeySecret");
}
if (StringUtils.isNullOrEmpty(config.getSign())) {
throw new ReqFailedException("请先配置短信平台签名");
}
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
SendSmsResponse sendSmsResponse = null;
boolean sendFail = false;
try {
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", config.getAccessKeyId(), config.getAccessKeySecret());
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setMethod(MethodType.POST);
request.setPhoneNumbers(mobile);
request.setSignName(config.getSign());
request.setTemplateCode(config.getCheckCodeTemplateCode());
request.setTemplateParam("{\"code\":\""+code+"\"}");
request.setOutId("yourOutId");
sendSmsResponse = acsClient.getAcsResponse(request);
} catch (Exception e) {
sendFail = true;
e.printStackTrace();
}
if (sendFail) {
throw new ReqFailedException("短信发送失败");
}
SysSmsLogBO smsLogBO = new SysSmsLogBO();
smsLogBO.setSendId(sendSmsResponse.getBizId());
smsLogBO.setInvalidNum(0);
smsLogBO.setSuccessNum(1);
smsLogBO.setReturnMsg(sendSmsResponse.getMessage());
smsLogBO.setSendStatus(!sendFail ?1:0);
smsLogBO.setSign(config.getSign());
smsLogBO.setContent("手机验证码:"+code);
smsLogBO.setSendTime(new Date());
smsLogBO.setMobile(mobile);
try {
smsLogBO.setMemberId(Long.parseLong(reqHeader.getUserNo()));
} catch (Exception e) {
smsLogBO.setMemberId(0L);
}
sysSmsLogService.save(reqHeader,smsLogBO);
return smsLogBO;
}
- 代码是别人的写的,项目之前配置的阿里云失效了,今天重新购买了短信套餐,以前也没有用过阿里大于,趁着机会看了下,不深究