文章目录

  • 前言

一、开通短信服务

二、添加签名和模板管理

  • 1.添加模板管理
  • 2.添加签名管理

三、编写短信发送接口

  • 1.引入pom依赖
  • 2.编写controller,根据手机号发送短信
  • 3.编写service
  • 4.获取随机数验证码工具类
  • 总结



前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、开通短信服务

java 短信模版的存储格式 java短信模板设计_java 短信模版的存储格式

java 短信模版的存储格式 java短信模板设计_阿里云_02


java 短信模版的存储格式 java短信模板设计_发送短信_03

二、添加签名和模板管理

1.添加模板管理

###    1)选择 国内消息 - 模板管理 - 添加模板

java 短信模版的存储格式 java短信模板设计_发送短信_04


    2)点击 添加模板,进入到添加页面,输入模板信息

java 短信模版的存储格式 java短信模板设计_发送短信_05


    3)点击提交,等待审核,审核通过后可以使用

2.添加签名管理

###    1)选择 国内消息 - 签名管理 - 添加签名

java 短信模版的存储格式 java短信模板设计_java_06

###    2)点击添加签名,进入添加页面,填入相关信息

注意:签名要写的有实际意义

java 短信模版的存储格式 java短信模板设计_java 短信模版的存储格式_07

###    3)点击提交,等待审核,审核通过后可以使用了

三、编写短信发送接口

1.引入pom依赖

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

2.编写controller,根据手机号发送短信

@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.getSixBitRandom();
        Map<String,Object> param = new HashMap<>();
        param.put("code",code);
        //调用service发送短信的方法
        boolean isSend = msmService.send(param,phone);
        if(isSend) {
            //发送成功,把发送成功验证码放到redis里面
            //设置有效时间
            redisTemplate.opsForValue().set(phone,code,5, TimeUnit.MINUTES);
            return R.ok();
        } else {
            return R.error().message("短信发送失败");
        }
    }

3.编写service

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

        DefaultProfile profile =
                DefaultProfile.getProfile("default", "LTAI4Fec4n99HjGECZGjxVx8", "By1KnhZRjUR8imapMzYTqR6m0F1s1n");
        IAcsClient client = new DefaultAcsClient(profile);

        //设置相关固定的参数
        CommonRequest request = new CommonRequest();
        //request.setProtocol(ProtocolType.HTTPS);
        request.setMethod(MethodType.POST);
        request.setDomain("dysmsapi.aliyuncs.com");
        request.setVersion("2017-05-25");
        request.setAction("SendSms");

        //设置发送相关的参数
        request.putQueryParameter("PhoneNumbers",phone); //手机号
        request.putQueryParameter("SignName","71鲁班不会飞的网站"); //申请阿里云 签名名称
        request.putQueryParameter("TemplateCode","SMS_189032712"); //申请阿里云 模板code
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(param)); //验证码数据,转换json数据传递

        try {
            //最终发送
            CommonResponse response = client.getCommonResponse(request);
            boolean success = response.getHttpResponse().isSuccess();
            return success;
        }catch(Exception e) {
            e.printStackTrace();
            return false;
        }

    }

4.获取随机数验证码工具类

/**
 * 获取随机数
 * 
 * @author qianyi
 *
 */
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;
	}
}

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容