阿里云验证码与通知短信

1、入住阿里云

首先,注册阿里云账号或者快捷登陆

其次,实名认证

根据情况选择是企业还是个人用户(以个人用户为例)

然后选择个人支付宝授权认证

最后,根据实际情况填写个人信息

2、开通短信服务

首先,登陆

其次,绑定电子邮箱

绑定成功后,选择开通短信服务

开通成功后,可以看到阿里云免费赠送了100条短信

如果短信不够用,可以购买,不具体叙述。

3、获取AccessKey

首先,将鼠标放到用户头像上

点击accesskeys,出现下面的界面:

点击开始使用子用户Accesskey,进入下面的界面:

点击开通后跳转下面的界面:

再点击下面的accesskeys:

出现下面界面:

选择继续使用Accesskey,点击创建AccessKey,如下图:

成功后,如图:

4、创建签名和模版

(1)创建签名

首先,短信服务->国内消息,如图:

点击添加签名,根据实际情况填写申请信息(例如:签名用途,选择第二个)

注:如何获取ICP备案:https://jingyan.baidu.com/article/925f8cb818d04cc0dce05660.html

(2)添加模板

模板类型可以选择验证码也可以选择短信通知,由于需要测试验证码短信和通知短信,所以可以添加两个模板

添加审核成功后,如图:

5、编程(Java)

public class SmsUtil {
	
	//产品名称:云通信短信API产品,开发者无需替换
	static final String product="Dysmsapi";
	//产品域名,开发者无需替换
	static final String domain = "dysmsapi.aliyuncs.com";
	// 此处需要替换成开发者自己的AccessKey(在阿里云访问控制台寻找)
	static final String accessKeyId = "yourAccessKeyId";
    static final String accessKeySecret = "yourAccessKeySecret";
    
    /**
     * 发送验证码短信
     * 模板为验证码类型
     * 
     * @phoneNumber
     */
    public static boolean sendSms(String phoneNumber,String code) throws ClientException{
    	//可自助调整超时时间
    	System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        //初始化acsClient,暂不支持region化
        IClientProfile profile=DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        IAcsClient acsClient=new DefaultAcsClient(profile);
        //组装请求对象-具体描述见控制台-文档部分内容
        SendSmsRequest request=new SendSmsRequest();
        //必填:待发送手机号
        request.setPhoneNumbers(phoneNumber);
        //必填:短信签名-可在短信控制台中找到举个例子
        request.setSignName("");
        //必填:短信模板id-可在短信控制台中找到,是id不是名字,举个例子
        request.setTemplateCode("");
        //可选:模板中的变量替换JSON串,如模板内容	\为"亲爱的${name},您的验证码为${code}"时,此处的值为--必填,与模板相对应
        //request.setTemplateParam("{\"name\":\"Tom\", \"code\":\"123\"}");
        request.setTemplateParam("{\"code\":\""+code+"\"}");
        //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
        //request.setSmsUpExtendCode("90997");
        //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
        //request.setOutId("yourOutId");
        //hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse=acsClient.getAcsResponse(request);
        //System.out.println(sendSmsResponse.getCode());
        if (sendSmsResponse.getCode().equals("OK")) {
			return true;
		}
        return false;
    }
    
    /**
     * 发送通知类短信
     * 模板为通知类型
     * 
     */
    public static boolean sendSmg(String phoneNumber,String name) throws ClientException{
    	//可自助调整超时时间
    	System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
        System.setProperty("sun.net.client.defaultReadTimeout", "10000");
        //初始化acsClient,暂不支持region化
        IClientProfile profile=DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
        IAcsClient acsClient=new DefaultAcsClient(profile);
        //组装请求对象-具体描述见控制台-文档部分内容
        SendSmsRequest request=new SendSmsRequest();
        //必填:待发送手机号
        request.setPhoneNumbers(phoneNumber);
        //必填:短信签名-可在短信控制台中找到举个例子
        request.setSignName("");
        //必填:短信模板id-可在短信控制台中找到,是id不是名字,举个例子
        request.setTemplateCode("");
        //可选:模板中的变量替换JSON串,如模板内容	\为"亲爱的${name},您的验证码为${code}"时,此处的值为--必填,与模板相对应
        request.setTemplateParam("{\"name\":\""+name+"\"}");
        //request.setTemplateParam("{\"code\":\""+getRandomSMSCode(6,true)+"\"}");
        //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
        //request.setSmsUpExtendCode("90997");
        //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
        //request.setOutId("yourOutId");
        //hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse=acsClient.getAcsResponse(request);
        //System.out.println(sendSmsResponse.getCode());
        if (sendSmsResponse.getCode().equals("OK")) {
			return true;
		}
        return false;
    }

    /**
     * 随机生成验证码
     * 参数numberCode控制验证码类型,true为纯数字,false为数字和字母的混合
     * 
     */
    public static final String getRandomSMSCode(int length, boolean numberCode) {
    	String randomSMSCode="";
        String codeTable = numberCode ? "1234567890" : "1234567890abcdefghijkmnpqrstuvwxyz";
        boolean flag = true;
        do {
            int count = 0;
            for (int i = 0; i < length; i++) {
                double dblR = Math.random() * codeTable.length();
                int intR = (int) Math.floor(dblR);
                char c = codeTable.charAt(intR);
                if (('0' <= c) && (c <= '9')) {
                    count++;
                }
                randomSMSCode += codeTable.charAt(intR);
            }
            if (count >= 2) {
            	flag = false;
            }
        } while (flag);
        return randomSMSCode;
    }
}

 

6、发送短信

public class Test {
	public static void main(String[] args) throws ClientException {
		sendSms("138****0204");
		sendSmg("182****9810","张三");
	}
	@SuppressWarnings("resource")
	public static void sendSms(String phoneNumber) throws ClientException {
		String randomSMSCode = SmsUtil.getRandomSMSCode(5,true);
		if (SmsUtil.sendSms(phoneNumber,randomSMSCode)) {
			System.out.println("短信发送成功");
			Scanner scanner= new Scanner(System.in);
			System.out.println("请输入您收到的验证码:");
			String code=scanner.next();
			if (randomSMSCode.equals(code)) {
				System.out.println("验证成功");
			}
		}else {
			System.out.println("失败");
		}
	}
	public static void sendSmg(String phoneNumber,String name) throws ClientException {
		if (SmsUtil.sendSmg(phoneNumber, name)) {
			System.out.println("通知短信已经发送");
		}else {
			System.out.println("发送失败");
		}
	}
}

实现所需jar包:https://download.csdn.net/download/willy__qi/10684014

阿里云短信服务首次接入完整流程:https://help.aliyun.com/document_detail/59210.html?spm=5176.sms-account.108.5.f51e1cbejQpdYa

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值