JAVA 实现阿里云的短信验证码

调用发送短信代码

1、此处:String template = “SMS_22*****05”;这里修改为你自己的短信模板

/**
     * 发送手机短信
     */
    @Autowired
    private SendSmsImpl sendSms;
   
    
    @CrossOrigin
    @PostMapping("/aliyun")
    @ApiOperation(value = "发送阿里云短信验证码",response = R.class)
    public R aliyun(@Validated RequestAliyunNoteEntity requestAliyunNoteEntity) {
        //获取手机号,发送短信验证码
        String account = requestAliyunNoteEntity.getAccount();
        //code模板
        String template = "SMS_22*****05";
        //随机获取验证码-6位
        HashMap<String, Object> mp = new HashMap<>();
        StringBuilder sb = new StringBuilder();
        Random random = new Random();
        for(int i=0;i<6;i++){
            sb.append(random.nextInt(10));
        }
        mp.put("code",sb);
        //如果发送代码成功!那么就存储(替换)验证码到数据库
        boolean send = sendSms.send(account, template, mp);
        if(send){
            Boolean aBoolean = clientCodeService.saveNote(account, sb.toString());
            if(aBoolean){
                return R.ok();
            }else{
                return R.error("出现了点意外!");
            }
        }else{
            return R.error("刚刚发生了什么事儿?");
        }
    }

二、发送短信的主要代码

/**
 * @author LunarYouI
 * @create 2021-06-15 10:56
 *
 * 传入手机号、模板code、验证码
 */
public interface SendSms {
    boolean send(String phoneNum, String templateCode, Map<String,Object> code);
}

1、此处:DefaultProfile profile = DefaultProfile.getProfile(“cn-hangzhou”, “参数2”, “参数3”); 需要将2、3参数修改为自己的accessKeyIdsecret
2、此处:request.putQueryParameter(“SignName”, “参数2”);参数2需要修为自己的签名名称,否则不可用

/**
 * @author LunarYouI
 * @create 2021-06-15 10:59
 */
@Service
public class SendSmsImpl implements SendSms{
    @Override
    public boolean send(String phoneNum, String CODE, Map<String, Object> code) {
        //链接阿里云
        DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "####5tNzdq3Gw8Wh########", "####qRNeKwUrEQjsAwIbIb########");
        //构建成客户端
        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", phoneNum);//手机号码
        request.putQueryParameter("SignName", "自行修改");//签名名称
        request.putQueryParameter("TemplateCode", CODE);//模板的code
        //构建一个短信验证码
        request.putQueryParameter("TemplateParam", JSONObject.toJSONString(code));
        try {
            CommonResponse response = client.getCommonResponse(request);
            System.out.println(response.getData());
            //成功就返回true【response.getHttpResponse().isSuccess()里面默认就带了布尔值】
            return response.getHttpResponse().isSuccess();
        } catch (ServerException e) {
            e.printStackTrace();
        } catch (ClientException e) {
            e.printStackTrace();
        }
        return false;
    }
}

最终效果图:
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
阿里云验证码的Java代码示例如下: ``` import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.sms.model.v20160927.SendSmsRequest; import com.aliyuncs.sms.model.v20160927.SendSmsResponse; public class AliyunSmsUtil { public static void sendSms(String phoneNumbers, String signName, String templateCode, String templateParam) { // 设置超时时间-可自行调整 System.setProperty("sun.net.client.defaultConnectTimeout", "10000"); System.setProperty("sun.net.client.defaultReadTimeout", "10000"); // 初始化ascClient需要的几个参数 final String product = "Dysmsapi"; final String domain = "dysmsapi.aliyuncs.com"; // 替换成你的AK (产品密) final String accessKeyId = "yourAccessKeyId";// 你的accessKeyId,参考本文档步骤2 final String accessKeySecret = "yourAccessKeySecret";// 你的accessKeySecret,参考本文档步骤2 // 初始化ascClient,暂时不支持多region(请勿修改) IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); try { DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain); } catch (ClientException e) { e.printStackTrace(); } IAcsClient acsClient = new DefaultAcsClient(profile); // 组装请求对象 SendSmsRequest request = new SendSmsRequest(); // 必填:待发送手机号 request.setPhoneNumbers(phoneNumbers); // 必填:签名-可在控制台中找到 request.setSignName(signName); // 必填:模板-可在控制台中找到 request.setTemplateCode(templateCode); // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 request.setTemplateParam(templateParam); // 发送请求 try { SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); if (sendSmsResponse.getCode() != null && sendSmsResponse.getCode().equals("OK")) { // 请求成功 System.out.println("发送成功!"); } else { System.out.println("发送失败:" + sendSmsResponse.getMessage()); } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } } } ```
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值