记录一下java接入阿里云短信的操作过程
账号注册
- 进入官网:https://www.aliyun.com/
- 注册账号:可以直接使用支付宝授权登录
- 购买短信服务套餐
- 一般新人都会有比较便宜的或者使用套餐,参考下图购买:
- 首页找到最下方,点开免费试用
- 找到短信免费试用套餐包
进入短信服务
设置签名
个人用户只能设置验证码场景的签名,其他类型的签名需要企业资格认证
设置模板
API文档
- 文档地址:https://api.aliyun.com/new#/?product=Dysmsapi&version=2017-05-25&api=SendSms¶ms={}&tab=DOC&lang=JAVA
- 参考短信发送API
获取签名
代码示例
- 引入依赖
<!--阿里云短信服务-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.0</version>
</dependency>
- yml配置文件
ali:
sms:
accessKeyId: 自己的accessKeyId
accessSecret: 自己的accessSecret
signName: 自己的短信签名
templateCode: 自己的短信模板
- 工具类(仅有短信发送的方法)
import com.aliyuncs.CommonRequest;
import com.aliyuncs.CommonResponse;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
public class ALiSmsUtil {
public static CommonResponse sendSms(String accessKeyId, String accessSecret, String phoneNumbers, String signName, String templateCode, String params) throws ClientException {
//设置区域与秘钥
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessSecret);
//创建客户端
IAcsClient client = new DefaultAcsClient(profile);
//创建请求体
CommonRequest request = new CommonRequest();
//设置请求方式为post请求
request.setSysMethod(MethodType.POST);
//设置域名(固定域名)
request.setSysDomain("dysmsapi.aliyuncs.com");
//设置短信版本
request.setSysVersion("2017-05-25");
//设置执行的方法
request.setSysAction("SendSms");
//设置区域id
request.putQueryParameter("RegionId", "cn-hangzhou");
//设置电话号码,多个电话号码逗号隔开
request.putQueryParameter("PhoneNumbers", phoneNumbers);
//设置短信签名
request.putQueryParameter("SignName", signName);
//设置选择的模板
request.putQueryParameter("TemplateCode", templateCode);
//设置参数
request.putQueryParameter("TemplateParam", params);
//发送短信请求
CommonResponse response = client.getCommonResponse(request);
System.out.println(response.getData());
//返回响应结果
return response;
}
}
- 发送短信的代码
/**
* 验证码操作处理
*
* @author ty
*/
@Api(value = "验证码操作" , description = "验证码操作接口" , tags = "验证码操作")
@RestController
public class CaptchaController {
@Autowired
private RedisCache redisCache;
@Value("${ali.sms.accessKeyId}")
private String accessKeyId;
@Value("${ali.sms.accessSecret}")
private String accessSecret;
@Value("${ali.sms.signName}")
private String signName;
@Value("${ali.sms.templateCode}")
private String templateCode;
/**
* 短信验证码
*/
@ApiOperation(value = "短信验证码" , notes = "短信验证码")
@GetMapping("/getSmsCode")
@ApiImplicitParams({
@ApiImplicitParam(name = "phonenumber", value = "电话号码", required = true, dataType = "String", paramType = "query")
})
@CrossOrigin
public AjaxResult getSmsCode(@RequestParam("phonenumber") String phonenumber){
if(StringUtils.isEmpty(phonenumber)){
throw new CustomException("手机号码不可以为空");
}
//生成随机字串
String smsCode = VerifyCodeUtils.generateSmsCode(4);
String smsCodeKey = Constants.SMS_CODE_KEY + phonenumber;
redisCache.setCacheObject(smsCodeKey, smsCode, Constants.SMSCODE_EXPIRATION, TimeUnit.MINUTES);
Map<String, String> mapParams = new HashMap<>();
mapParams.put("code" , smsCode);
String param = JSON.toJSONString(mapParams);
//return AjaxResult.success("操作成功",smsCode);
// 发送短信验证码
try {
CommonResponse commonResponse = ALiSmsUtil.sendSms(accessKeyId, accessSecret, phonenumber, signName, templateCode, param);
String data = commonResponse.getData();
Map map = JSON.parseObject(data, Map.class);
String code = (String) map.get("Code");
String message = (String) map.get("Message");
if (commonResponse.getHttpStatus() == 200 && "OK".equals(code)) {
//ajax.put("smsCode" , smsCode);
return AjaxResult.success("操作成功",smsCode);
}
return AjaxResult.error(message);
} catch (ClientException e) {
e.printStackTrace();
return AjaxResult.error(e.getMessage());
}
}
}
至此阿里云短信验证码的接入操作已经完成,对于想要通过api创建模板,查询短信记录的朋友,可以多多参考官方API文档操作即可!