Skip to content

Latest commit

 

History

History
138 lines (131 loc) · 5.35 KB

阿里云短信验证.md

File metadata and controls

138 lines (131 loc) · 5.35 KB

一、阿里云账号相关设置

  • 第一步:登录阿里云控制台并创建子账号:https://usercenter.console.aliyun.com/#/manage/ak。
  • 第二步:进入跳转页面填上 登录名称、显示名称、勾选编程访问。最后点击确定。
  • 第三步:切记需要在本地新建一个记事本保存AccessKey ID和AccessKey Secret信息。
  • 可选步骤:
    • 设置用户组功能(可以方便管理多用户权限,如果只有一个用户的话也可以忽略本步骤),填入组相关信息后通过手机验证即可;
    • 设置用户组权限:在添加组成员功能里添加第二步新建的用户;添加SMS权限
  • OK。

二、使用阿里的短信验证服务

  • 短信服务的基本设置:产品与服务 --> 短信服务
  • 设置并记录签名、模板信息:点击国内消息或者国际消息,填写签名管理和模板管理信息,需要审核通过才能用。审核通过后记录签名管理-->签名名称;模板管理-->模版CODE 签名是短信开头[公司名称]的内容,模板是后面的验证码格式。可参考以下设置: 之前用过
  • 查看阿里短信SDK使用方法:
    • 点击帮助文档
    • 查看SDK的使用流程
    • 体验短信SDK服务 ${code}
  • OK,执行成功说明短信验证的相关设置都没问题,下面把SDK集成到项目中。

三、在项目代码中接入短信验证服务

  • 1.新建个springboot项目导入以下maven依赖
<!--新版ali sms sdk-->
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>4.1.0</version>
</dependency>
<!--传输json数据-->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.68</version>
</dependency>
<!--缓存手机对应的验证码-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 2.1编写SendSms接口
public interface SendSms {
    public boolean send(String phone, String templateCode, Map<String,Object> params);
}
  • 2.2编写实现类来实现SendSms接口
@Service
public class SendSmsImpl implements SendSms {
    @Override
    public boolean send(String phone, String templateCode, Map<String, Object> params) {
        // 连接阿里云,需要设置子用户的access信息
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "<accessKeyId>", "<accessSecret>");
        IAcsClient client = new DefaultAcsClient(profile);
        // 构建请求信息
        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", templateCode);
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(params));
        try {
            // 响应
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
            return response.getHttpResponse().isSuccess();
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return false;
    }
}
  • 2.3编写controller对外接口
@RestController
public class SmsApiController {
    @Autowired
    private SendSms sendSms;
    @Autowired
    private RedisTemplate<String,String> redisTemplate;
    @GetMapping("/sendSms/{phone}")
    public String code(@PathVariable("phone") String phone) {
        String code = redisTemplate.opsForValue().get(phone);
        if(!StringUtils.isEmpty(code)) {
            return phone+":"+code+",验证码还有效,请设置5分钟内不能触发该请求";
        }
        code = UUID.randomUUID().toString().substring(0,4);
        Map<String,Object> map = new HashMap<>();
        // 对应模板中的${code}
        map.put("code",code);
        boolean isSuccess = sendSms.send(phone,"SMS_162521078",map);
        if(isSuccess) {
            redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
            return phone+":"+code+"发送成功";
        } else {
            return "发送失败";
        }
    }
}
  • 2.4调用接口发送验证码

http://localhost:8080/sendSms/137xxxxx

OK!!看看是否接收到了验证码。★,°:.☆( ̄▽ ̄)/$:.°★