阿里云短信验证服务

阿里云短信验证服务

阿里云短信验证是一个安全可靠易使用的第三方API,很多人在做项目时都会选择使用阿里云短信验证来做验证码模块的功能,今天我们就来学习如何使用阿里云短信验证。

 


 

  • 登录阿里云官网添加短信验证服务

登录阿里云官网后进入如下页面。

阿里云短信验证服务_第1张图片

阿里云短信验证服务_第2张图片

阿里云的短信验证服务是收费的,不办套餐的话每条是0.045元,月底扣费,详情可以自己去官网上查看。

添加完服务后从个人控制台进入。

阿里云短信验证服务_第3张图片

点击短信服务就能进入短信服务控制台。

阿里云短信验证服务_第4张图片

 

  • 添加AccessKey

鼠标放在头像上出现如下页面。

阿里云短信验证服务_第5张图片

点击AccessKeys进入AccessKey控制台。

进入这个控制台会有弹出框提示你AccessKeys的安全使用,这里再提醒一下不要外泄自己的AccessKey。

点击获取后进行校验,会生成一个AccessKey,记住你创建的AccessKey的id和secret后面会用到。

 

 

  • 添加模板和签名

回到短信服务控制台。

我们可以在快速学习中使用一下短信验证。

阿里云短信验证服务_第6张图片

通过试用我们知道了短信验证需要用到签名,模板,接受手机号三个重要参数,签名和模板有官方的示例可以使用,但是我们还是需要自己添加新的模板个签名。

点击国内消息就看到如下页面。

 

一般审核最长两个小时。

审核完之后记住以下数据,后面有使用到。

在创建模板时验证码是一个变量,用el表达式来表达验证码,统一用${code}。

 

 

 

  • 编写静态类

package cn.edu.fjut.util;

public class StaticPeram {

	final static String defaultConnectTimeout  = "sun.net.client.defaultConnectTimeout";
	final static String defaultReadTimeout = "sun.net.client.defaultReadTimeout";
	final static String Timeout = "超时时间,直接填数字就好了(比如200000)";  
	final static String product = "Dysmsapi";   //短信验证服务名不需要更改
	final static String domain = "dysmsapi.aliyuncs.com";  //短信验证的固定API不需要更改
	final static String accessKeyId = "自己创建的accessKeyID";   
	final static String accessKeySecret = "自己创建的accessKeySecret";
	final static String SignName = "自己创建的签名的名字";
	final static String TemplateCode = "自己创建的模板的CODE"; 


}

 

  • 编写方法类

package cn.edu.fjut.util;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;
import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.http.MethodType;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;


public class PhoneCode {

	/**
	 * 生成4位数字验证码
	 * @return 验证码
	 */
	public String vcode(){
		String vcode = "";
		for (int i = 0; i < 4; i++) {
			vcode = vcode + (int)(Math.random() * 9);
		}
		return vcode;
	}


	/**
	 * 将相关的参数发送给阿里云进行短信发送,同时将验证码返回
	 * @param mobile 发送的手机号
	 * @return 返回验证码
	 */
	public String getPhonemsg(String mobile) {

		//手机号码校验
		System.out.println(mobile);
		if (mobile == null || mobile == "") {
			System.out.println("手机号为空");
			return "";
		}

		// 设置超时时间-可自行调整
		System.setProperty(StaticPeram.defaultConnectTimeout, StaticPeram.Timeout);
		System.setProperty(StaticPeram.defaultReadTimeout, StaticPeram.Timeout);
		// 初始化ascClient需要的几个参数
		final String product = StaticPeram.product;// 短信API产品名称(短信产品名固定,无需修改)
		final String domain = StaticPeram.domain;// 短信API产品域名(接口地址固定,无需修改)
		// 替换成你的AK
		final String accessKeyId = StaticPeram.accessKeyId;// 你的accessKeyId

		final String accessKeySecret = StaticPeram.accessKeySecret;// 你的accessKeySecret,
		// 初始化ascClient,暂时不支持多region
		IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou",
				accessKeyId, accessKeySecret);
		try {
			DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product,
					domain);
		} catch (ClientException e1) {
			e1.printStackTrace();
		}

		//获取验证码
		String code = vcode();

		IAcsClient acsClient = new DefaultAcsClient(profile);
		// 组装请求对象
		SendSmsRequest request = new SendSmsRequest();
		// 使用post提交
		request.setMethod(MethodType.POST);
		// 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为1000个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式
		request.setPhoneNumbers(mobile);
		// 必填:短信签名-可在短信控制台中找到
		request.setSignName(StaticPeram.SignName);
		// 必填:短信模板-可在短信控制台中找到
		request.setTemplateCode(StaticPeram.TemplateCode);
		

        // 可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为
		// 友情提示:如果JSON中需要带换行符,请参照标准的JSON协议对换行符的要求,比如短信内容中包含\r\n的情况在JSON中需要表示成\\r\\n,否则会导致JSON在服务端解析失败
		request.setTemplateParam("{ \"code\":\""+code+"\"}");
		

        // 可选-上行短信扩展码(无特殊需求用户请忽略此字段)
		// request.setSmsUpExtendCode("90997");
		// 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
		request.setOutId("yourOutId");
		// 请求失败这里会抛ClientException异常
		SendSmsResponse sendSmsResponse;
		try {
			sendSmsResponse = acsClient.getAcsResponse(request);
			if (sendSmsResponse.getCode() != null
					&& sendSmsResponse.getCode().equals("OK")) {
				// 请求成功
				System.out.println("获取验证码成功!!!");
			} else {
				//如果验证码出错,会输出错误码告诉你具体原因
				System.out.println(sendSmsResponse.getCode());
				System.out.println("获取验证码失败...");
			}
		} catch (ServerException e) {
			e.printStackTrace();
			return "由于系统维护,暂时无法注册!!!";
		} catch (ClientException e) {
			e.printStackTrace();
			return "由于系统维护,暂时无法注册!!!";
		}
		return code;
	}




}

 

  • 测试

package cn.edu.fjut.controller;

import cn.edu.fjut.util.PhoneCode;

public class Test {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		PhoneCode phoneCode = new PhoneCode();
		
		System.out.println("Test:"+phoneCode.getPhonemsg("152*******"));
	}

}

 

测试结果

阿里云短信验证服务_第7张图片

 

 

你可能感兴趣的:(笔记,java,第三方API)