阿里云短信服务实现

it2024-03-31  50

文章目录

一、引入maven二、注入短信服务依赖三、具体实现1.发送消息2.校验信息

一、引入maven

<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.1.0</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.0.6</version> </dependency>

二、注入短信服务依赖

<bean id="iSmsService" class="com.xunwei.sbms.service.impl.SmsService" scope="request"> <property name="accessKeyId" value=""></property> <property name="accessKeySecret" value=""></property> <property name="signName" value=""></property> <property name="templateCode" value=""></property> <property name="product" value=""></property> <property name="domain" value="dysmsapi.aliyuncs.com"></property> </bean>

三、具体实现

1.发送消息

/*发送短信服务请求*/ public static SendSmsResponse sendSmsInfo(String phone) 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(phone); //必填:短信签名-可在短信控制台中找到 request.setSignName(signName); //必填:短信模板-可在短信控制台中找到 request.setTemplateCode(templateCode); //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为 String code = getCode(); // VerifyCodeMap.clear(); // VerifyCodeMapDate.remove(phone+"_"+code); VerifyCodeMapDate.put(phone,new Date().getTime()); JSONObject codeJson = new JSONObject(); codeJson.put("code",code); // request.setTemplateParam("\"code\":\"'"+code+"'\""); request.setTemplateParam(codeJson.toJSONString()); //选填-上行短信扩展码(无特殊需求用户请忽略此字段) //request.setSmsUpExtendCode("90997"); //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 request.setOutId("yourOutId"); //hint 此处可能会抛出异常,注意catch SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); return sendSmsResponse; }

2.校验信息

if(VerifyCodeMapDate.size() !=0 && VerifyCodeMapDate.containsKey(phone+"_"+code)){ Long time = new Date().getTime(); Long date = VerifyCodeMapDate.get(phone); if (time-date <= 2*60*1000 ){ result.setCode(0); result.setData("验证码正确"); }else { result.setCode(-3); result.setData("验证码已过期"); } }else{ result.setCode(-1); result.setData("验证码错误"); } /*查询手机号发送情况*/ public static QuerySendDetailsResponse querySendDetails(String bizId,String phone) 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); //组装请求对象 QuerySendDetailsRequest request = new QuerySendDetailsRequest(); //必填-号码 request.setPhoneNumber(phone); //可选-流水号 request.setBizId(bizId); //必填-发送日期 支持30天内记录查询,格式yyyyMMdd SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd"); request.setSendDate(ft.format(new Date())); //必填-页大小 request.setPageSize(10L); //必填-当前页码从1开始计数 request.setCurrentPage(1L); //hint 此处可能会抛出异常,注意catch QuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request); return querySendDetailsResponse; }
最新回复(0)