Java 使用阿里云短信服务发送短信验证码

阿里云发送短信分为以下几个步骤

  1. 在阿里云开通短信服务 生成获取AccessKeyId 和 AccessKeySecret
  2. 在控制台创建、申请短信模版,申请通过即可使用。记下<模版CODE>
  3. 创建短信工具类方便调用发送短信
@Slf4j
public class SmsUtils {
	// 发送短信
    public static String sendSmsAliyun(String mobile, String code) {
        DefaultProfile profile = DefaultProfile.getProfile("default", "这里填AccessKeyId", "这里填AccessKeySecret");
        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("PhoneNumbers", mobile);
        request.putQueryParameter("SignName", "这里可使用公司名称,即发送人签名");
        request.putQueryParameter("TemplateCode", "这里填短信模版CODE");
        request.putQueryParameter("TemplateParam", "{\"code\":\""+code+"\"}");
        try {
            CommonResponse response = client.getCommonResponse(request);
            log.info("request:{}", request);
            log.info("response:{}", response.getData());
            return "发送验证码成功";
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return "发送验证码成功";
    }
}

----------------------------------------- 我是分割线 -----------------------------------------

用户获取验证码

	/**
	 * 用户获取验证码
	 *
	 * @param phone 用户手机号
	 * @return 获取验证码
	 */
	@PostMapping("/getCode")
	@ApiOperation(value = "用户获取验证码")
	public Result getCode(@RequestParam(value = "phone") String phone) {
	    if (phone == null) {
	        log.error("获取验证码失败,手机号为Null");
	        return Result.failed("手机号不能为空");
	    }
	    // 获取发送验证码
	    int code = cacheCode(phone);
	    // 发送验证码
	    SmsUtils.sendSmsAliyun(phone, String.valueOf(code));
	    return Result.ok();
	}

 	/**
     * 存入缓存 返回code
     *
     * @param phone 手机号
     * @return 验证码
     */
    private int cacheCode(String phone) {
        int code = getCode();
        redisService.set("_send_msg_" + phone, code + "", 120L);
        return code;
    }

    /**
     * 生成验证码
     */
    private int getCode() {
        int tmp = RANDOM.nextInt(999999);
        if (tmp < 100000) {
            tmp += 100000;
        }
        return tmp;
    }

你可能感兴趣的:(Java 使用阿里云短信服务发送短信验证码)