一、使用步驟
1、申請阿里雲賬號並認證
鏈接地址:https://www.aliyun.com/product/sms
2、創建一個新的AccessKeys 包含AccessKey ID 和Access Key Secret 記得截圖保存 (最重要的一步)
3、新建簽名和短信模板
因爲阿里照顧到開發人員使用短信服務 所以可以 選擇通用場景 不需要上傳材料!
模板選擇 注:個人用戶只能選擇驗證碼 其他無法通過申請
項目配置AccessKey ID 和Access Key Secret
AccessKey配置類
@Configuration
@PropertySource(value="classpath:application.yml")
public class SmsConfig {
public static String accessKeyID;
public static String AccessKeySecret;
public String getAccessKeyID() {
return accessKeyID;
}
@Value("${aliyunSms.AccessKeyID}")
public void setAccessKeyID(String accessKeyID) {
SmsConfig.accessKeyID = accessKeyID;
}
public String getAccessKeySecret() {
return AccessKeySecret;
}
@Value("${aliyunSms.AccessKeySecret}")
public void setAccessKeySecret(String accessKeySecret) {
SmsConfig.AccessKeySecret = accessKeySecret;
}
}
創建請求工具類 我寫了登錄和註冊請求驗證碼 這裏只放出登錄的模板
登錄驗證碼生成請求工具類
public class SmsLoginRequest {
public static int code ;
private static Log logger= LogFactory.getLog(SmsRegisteRequest.class);
public static CommonRequest generateSmsRequest(String phone){
//隨機生成六位驗證碼
code = (int)((Math.random()*9+1)*100000);
CommonRequest request = new CommonRequest();
request.setMethod(MethodType.POST);
request.setDomain("dysmsapi.aliyuncs.com");
request.setVersion("2017-05-25");
request.setAction("SendSms");
//目前阿里最新的設置請求體的方式
request.putQueryParameter("RegionId", "cn-hangzhou");
request.putQueryParameter("PhoneNumbers",phone );
request.putQueryParameter("SignName", 簽名);
request.putQueryParameter("TemplateCode", 模板code);
request.putQueryParameter("TemplateParam", "{\"code\":\""+code+"\"}");
return request;
}
}
最後controller層 短信發送方法
結合了Redis緩存
/**
* 發送驗證碼
*
* @return
*/
@RequestMapping(value = "/sendSms", method = RequestMethod.POST)
@Transactional(rollbackFor = MyException.class)
public RetResult<?> sendVerificationCode(@RequestBody UserBO userBO)throws MyException {
//短信登錄驗證
SmsUtil.sendLoginSms(userBO.getPhone());
int loginCode = SmsLoginRequest.code;
//將code存入緩存 並設置過期時間爲 1分鐘
stringRedisTemplate.opsForValue().set(userBO.getPhone(), String.valueOf(loginCode));
stringRedisTemplate.expire(userBO.getPhone(), 1, TimeUnit.MINUTES);
if (loginCode <= 0) {
throw new MyException("驗證碼發送失敗!");
}
return RetResponse.makeOKRsp("短信驗證碼已發送,請在1分鐘內確認!");
}
源碼地址: https://github.com/MandalasWang/sms-server