阿里云短信验证

1.什么是短信验证

在我们日常生活中经常会遇到短信验证功能,像上网购票或者注册网站账号等场景需要手机验证码,而验证码短信是商家为用户提供用于注册、信息变更等的安全凭证,通过手机验证码短信的内容来帮助用户安全使用账号。短信验证码应用到的场景:安全登录、用户注册、忘记密码、信息变更、活动确认、登录异常等。

2.开通服务

搜索阿里云官网 https://www.aliyun.com/ ,登录进去之后选择产品,搜索短信服务并开通此服务

2.1 添加签名

按照要求,输入合法信息并提交

2.2 添加模板

按照要求,输入合法模板信息并提交

 最后等待审核成功之后就可以使用阿里云短信验证功能了

3.代码实现

3.1 导入依赖

使用阿里云短信验证需要导入以下两个依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.26</version>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
            <version>4.5.1</version>
        </dependency>

3.2 编写代码

这里我将随机生成一个六位数的字符串抽离成了一个工具类CodeUtil

public class CodeUtil {


    public static String getCode() {
        String content = "qwertyuiopasdfghjklzxcvbnm1234567890ZXCVBNMQWERTYUIOPASDFGHJKL";
        Random random = new Random();
        String result = "";
        for (int i = 0; i < 6; i++) {
            int index = random.nextInt(content.length());
            char c = content.charAt(index);
            result += c;
        }
        return result;
    }

}

然后创建MsmController,提供发送验证码的接口

@RestController
@RequestMapping("edumsm/msm")
@CrossOrigin
public class MsmController {

    @Autowired
    private MsmService msmService;

    @Autowired
    private RedisTemplate<String, String> template;

    @GetMapping("send/{phone}")
    public R sendMsmCode(@PathVariable String phone) {
        String code = template.opsForValue().get(phone);
        if (!StringUtils.isEmpty(code)) {
            return R.ok().data("msg","请五分钟后再试");
        }
        code = CodeUtil.getCode();
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("code", code);
        boolean isSend = msmService.sendCode(map, phone);
        if (isSend) {
            template.boundValueOps(phone).set(code, 5, TimeUnit.MINUTES);
        }
        return R.ok();
    }

}

创建MsmService,实现发送短信验证码

@Service
public class MsmServiceImpl implements MsmService {

    public boolean sendCode(Map<String, Object> map, String phone) {

        if (StringUtils.isEmpty(phone)) {
            return false;
        }
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", 换成自己的KeyID, 换成自己的secret);
        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", 换成自己的);
        // 验证码 ----
        //request.putQueryParameter("TemplateParam", "{"code":"" + map.get("code") + ""}");
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(map).toString());
        try {
            CommonResponse response = client.getCommonResponse(request);
            boolean success = response.getHttpResponse().isSuccess();
            return success;
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return false;
    }
}

当我们访问controller接口的时候携带手机号就可以发送短信验证码了。

一点点学习,一丝丝进步。不懈怠,才不会被时代所淘汰!

原文地址:https://www.cnblogs.com/fqh2020/p/14771091.html