阿里云短信服务之验证码入门教学

25 篇文章 0 订阅
16 篇文章 0 订阅

阿里云短信模板配置

首先要去阿里云开启短信服务,如下图
在这里找到短信服务
在这里找到短信服务开启短信服务,开启后进入控制台

开启短信服务,开启后进入控制台
在这里插入图片描述
点击左侧的国内消息 ,然后点击右边的模板管理,然后新建一个模板在这里插入图片描述
这里注意,要写的具有实际的意义,不要乱写如"测试""开发"等,不要写的太简单,不然审核不给通过
这里审核会有一小段时间,快的话三两分钟,慢的话一两个小时,看阿里云那边安排
然后出来 进入签名管理,申请一个签名
在这里插入图片描述

在这里插入图片描述
签名一定要具有实际意义一般是: ${网站名称} + XX网站
别只写"电商网站","测试网站"等等,一定要有实际的意义
申请完后等待审核就OK了

后台代码

不废话,直接上代码

pom.xml

引入依赖

  <dependencies>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
        </dependency>
        <dependency>
            <groupId>com.aliyun</groupId>
            <artifactId>aliyun-java-sdk-core</artifactId>
        </dependency>

    </dependencies>

controller

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

    @Autowired
    private MsmService msmService;

    @Autowired
    private RedisTemplate<String,String> redisTemplate;

    @GetMapping("send/{phone}")
    public R sendMsm(@PathVariable String phone){
        //1 从redis获取验证码,如果获取到直接返回
        String code = redisTemplate.opsForValue().get(phone);
        if(!StringUtils.isEmpty(code)){
            return R.ok();
        }
        //2 如果redis获取不到,进行阿里云发送
        //生成随机值,传递阿里云进行发送
        code = RandomUtil.getFourBitRandom();
        Map<String,Object> param = new HashMap<>();
        param.put("code",code);

        //调用service发送短信的方法
        boolean isSend = msmService.send(param,phone);
        if(isSend){
            //发送成功,把发送成验证码放到Redis中
            //设置有效时间 5分钟
            redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
            return R.ok();
        }else {
            return R.error().message("短信发送失败");
        }
    }
}

service

@Service
public class MsmServiceImpl implements MsmService {

    //发送短信的方法
    @Override
    public boolean send(Map<String, Object> param, String phone) {
        if(StringUtils.isEmpty(phone)){
            return false;
        }

        DefaultProfile profile =
                DefaultProfile.getProfile("default", "****", "******");
        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","克拉克刘在线教育网站");  //申请阿里云 签名名称
        request.putQueryParameter("TemplateCode","SMS_195225649"); //申请阿里云 模板Code
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param)); //验证码 格式为JSON字符串,{"code":"1234"}

        try{
            //最终发送
            CommonResponse response = client.getCommonResponse(request);
            boolean success = response.getHttpResponse().isSuccess();
            return  success;
        }catch (Exception e){
            e.printStackTrace();
        }
        return false;
    }
}
    DefaultProfile profile =
            DefaultProfile.getProfile("default", "****", "******");
    这里要注意,后两个参数为你的访问阿里云API的AccessKey ID和AccessKey Secret,如果没有的话需要去阿里云里申请一个

在这里插入图片描述

RandomUtil

获取随机数作为验证码

public class RandomUtil {

	private static final Random random = new Random();

	private static final DecimalFormat fourdf = new DecimalFormat("0000");

	private static final DecimalFormat sixdf = new DecimalFormat("000000");

	public static String getFourBitRandom() {
		return fourdf.format(random.nextInt(10000));
	}

	public static String getSixBitRandom() {
		return sixdf.format(random.nextInt(1000000));
	}

	/**
	 * 给定数组,抽取n个数据
	 * @param list
	 * @param n
	 * @return
	 */
	public static ArrayList getRandom(List list, int n) {

		Random random = new Random();

		HashMap<Object, Object> hashMap = new HashMap<Object, Object>();

		// 生成随机数字并存入HashMap
		for (int i = 0; i < list.size(); i++) {

			int number = random.nextInt(100) + 1;

			hashMap.put(number, i);
		}

		// 从HashMap导入数组
		Object[] robjs = hashMap.values().toArray();

		ArrayList r = new ArrayList();

		// 遍历数组并打印数据
		for (int i = 0; i < n; i++) {
			r.add(list.get((int) robjs[i]));
			System.out.print(list.get((int) robjs[i]) + "\t");
		}
		System.out.print("\n");
		return r;
	}
}
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值