发布于2020-11-19 20:24 阅读(1300) 评论(0) 点赞(20) 收藏(2)
温馨提示: 需要成本(本人充值了1元)
信息别泄露!信息别泄露!信息别泄露!
个人使用的是SpringBoot来做的
这里就不再示范
代码中需要用到:Access_key_id,Secret
注意:代码中的许多参数和这里面是对应的
<!--阿里云短信服务-->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.5.3</version>
</dependency>
注意:这里只放了实现的代码,代码中的其他相关类未贴出来!!!
SmsServiceImpl.java
package com.zwulle.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
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 com.zwulle.enums.VerificationType;
import com.zwulle.service.ISmsService;
import com.zwulle.utils.VerificationCodeUtil;
import com.zwulle.vo.BaseVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import java.util.concurrent.TimeUnit;
/**
* SmsServiceImpl
*
* @author ZWulle
* @date 2020-11-16
*/
@Service
public class SmsServiceImpl implements ISmsService {
/**
* ACCESS_KEY_ID
*/
private final static String ACCESS_KEY_ID = "这里是阿里云的accessKeyId";
/**
* SECRET
*/
private final static String SECRET = "密钥";
/**
* Redis验证码头 CODE_HEADER
*/
private final static String CODE_HEADER = "CODE_HEADER:";
/**
* APP_NAME,会传值给SignName,签名名称
*/
private final static String APP_NAME = "签名名称";
/**
* TemplateCode 模板CODE
*/
private final static String TEMPLATE_CODE = "模板CODE";
/**
* 注入redis
*/
@Autowired
private StringRedisTemplate redisTemplate;
@Override
public BaseVO sms(String phone) {
//这里可以通过帮助文档里的demo获取
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", ACCESS_KEY_ID, SECRET);
IAcsClient client = new DefaultAcsClient(profile);
CommonRequest request = new CommonRequest();
request.setSysMethod(MethodType.POST);
request.setSysDomain("dysmsapi.aliyuncs.com");
request.setSysVersion("2017-05-25");
request.setSysAction("SendSms");
//自定义参数,这里会用到
request.putQueryParameter("PhoneNumbers", phone);
request.putQueryParameter("SignName", APP_NAME);
request.putQueryParameter("TemplateCode", TEMPLATE_CODE);
//构建一个长度为4的纯数字随机验证码,这是自己写的工具类
String code = VerificationCodeUtil.getVerification(4, VerificationType.NUMCODE);
//短信模板中的code值,短信内容里的验证码值,我因为这个参数没写导致短信一直没发送成功
//可以自己看看阿里云的帮助文档,看看短信参数是哪些,这里好像是要一个json串;我就构建了这个参数
//如果注释掉这行,会返回一个“isv.TEMPLATE_MISSING_PARAMETERS”提示(模板变量缺少对应参数值)
request.putQueryParameter("TemplateParam", "{ " + "code" + ":" + code + "}");
JSONObject jsonObject = null;
try {
CommonResponse response = client.getCommonResponse(request);
//response.getData()返回短信执行的结果,如:{"Message":"模板变量缺少对应参数值","RequestId":"025FAB7F-9103-4469-B483-7698521A1A66","Code":"isv.TEMPLATE_MISSING_PARAMETERS"}
jsonObject = JSON.parseObject(response.getData());
String result = (String) jsonObject.get("Code");
if ("OK".equalsIgnoreCase(result)) {
//将验证码放入redis中,设置过期时间10分钟
String key = CODE_HEADER + phone;
redisTemplate.opsForValue().set(key, code, 10, TimeUnit.MINUTES);
return new BaseVO(BaseVO.SUCCESS_CODE, "验证码已发送,10分钟内有效!", jsonObject);
}
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
e.printStackTrace();
}
return new BaseVO(BaseVO.SEND_CODE_FAILED, "验证码发送失败,请稍候再试!!!", jsonObject);
}
}
SmsController.java
package com.zwulle.controller;
import com.zwulle.service.ISmsService;
import com.zwulle.vo.BaseVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class SmsController {
/**
* 注入smsService
*/
@Autowired
private ISmsService smsService;
/**
* 短信测试接口
*
* @param phone 手机号
* @return
*/
@PostMapping("/sms")
public BaseVO sms(@RequestParam String phone) {
//这里可以自己写一个手机号校验工具类,反正也是学习
//return smsService.sms(phone);
return new BaseVO("测试接口,不能直接访问!");
}
}
使用postman进行测试
postman结果(这里是其他接口调用了service,没有使用/sms来测试;效果一样)
手机接收短信如下:
学会使用,学会学习!要从使用中提示自己的排错能力!
当然啦!公司这类功能应该不会这么简单,但是个人的项目练习还是可以满足的!!!
学会分享也是一种进步!!!
作者:天使之恋
链接:http://www.javaheidong.com/blog/article/876/01b7bceb7fe10b3a52d7/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!