短信验证码 - 阿里云短信服务

签名与模板

要使用阿里的短信服务,必须先创建签名和模板。

 

项目示例

业务分析:

用户注册的时候需要短信验证码,我们点击获取验证码的按钮。即调用发送短信的代码,产生一个6位数的验证码,而我们需要验证这个验证码对不对。所以我们需要在产生随机数验证码之后,将验证码存入到Redis中去,手机号为key,验证码为value,给设置一个存活时间。在做校验的时候,取出Redis中的验证码与input输入框中的验证码进行校验。

1、引入pom依赖

<dependency>
	<groupId>com.aliyun</groupId>
	<artifactId>aliyun-java-sdk-core</artifactId>
	<version>4.1.0</version>
</dependency>

2、发送短信业务实现

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private RedisTemplate redisTemplate;

    /**
     * 发送短信
     * @param phone 手机号码
     * @return
     */
    @Override
    public void sendCode(String phone) {
        // 生成一个随机6位数字,作为验证码
        StringBuffer sb = new StringBuffer();
        for (int i = 1; i < 7; i++){
            int s = new Random().nextInt(10);
            sb.append(s);
        }
        // 手机号作为Key,验证码作为Value保存到Redis中,生存时间为10分钟
        redisTemplate.boundValueOps(phone).set(sb.toString(),60 * 10, TimeUnit.SECONDS);
        String smsCode = sb.toString();
        // 调用API
		SmsUtil.sendSms(phone,"SMS_4123456","寻宝游戏",smsCode);
    }
}

3、阿里云短信服务API

public class SmsUtil {
    /**
     * 发送短信
     * @param mobile 手机号
     * @param template_code 模板号
     * @param sign_name 签名
     * @param param 验证码
     */
    public static void sendSms(String mobile,String template_code,String sign_name,String param) {
        // xxxx:AccessKeyId     aaaa:AccessKeySecret      这个需要自己去阿里云配置一个子用户AccessKey
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "xxxxxxxx", "aaaaaaaaa");
        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", mobile);
        request.putQueryParameter("SignName", sign_name);
        request.putQueryParameter("TemplateCode", template_code);
        request.putQueryParameter("TemplateParam",param);
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }
}

4、收到短信后,从Redis中取出手机号对应的验证码进行对比

 阿里云获取AccessKey

添加短信权限

发布了100 篇原创文章 · 获赞 25 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40885085/article/details/104385507