使用java操作阿里大于的短信业务

点击量:74

简单通俗的疏通一下使用java操作阿里大于短信业务的简单流程

使用java操作阿里大于的短信业务

简介

通过短信业务,可以定期向用户推送推广消息,或者使用验证码对用户身份进行验证等操作.目前,很多云平台都提供此服务,阿里云,腾讯云...

大致流程

1. 在阿里短信平台获取 ID 和 secret

2. 创建一个签名 SignName
签名名称随意(不要冲突)

3. 创建一个模板 Template
模板名称随意.模板code是系统生成的,用于发送短信时调用
模板的内容自定义,插入值也是自定义

4. 在项目中导入SDK依赖

5. 在代码中调用短信服务,发送短信

6. 接收并分析短信发送结果(可选)

详细流程

1.获取AccessKey ID 和 Access Key Secret

在注册阿里云平台后都可以直接申请AccessKey ID 和 Access Key Secret

2.创建签名

在 [国内选项] 部分直接添加签名,名称随意,但是不能重复.申请签名用于在在短信信息最前方的中括号中展示,一般填写公司名称.

3.创建短信模板

直接点击添加模板.

模板名称随意

模板内容就是发送短息的内容,可以设置占位符, 使用${xxx} 格式. xxx的内容在发送短信的时候可以自动替换

添加后系统会生成模板CODE, 模板CODE用于发送短信时,选择使用哪个模板内容进行发送

4.在项目中添加官方SDK

作者此处选择是使用maven方式导入依赖

 <!--阿里云SDK-->
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-core</artifactId>
  <version>4.0.3</version>
</dependency>

<!--阿里大于api-->
<dependency>
  <groupId>com.aliyun</groupId>
  <artifactId>aliyun-java-sdk-dysmsapi</artifactId>
  <version>1.0.0-SNAPSHOT</version>
</dependency>

5.在代码中调用发送短信API

//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");

//初始化acsClient,设置region,设置自己的AccessKey ID和 Access Key Secret
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "xxx", "xxx");

//设置阿里大于的服务地址,此处为固定值,根据官方设定进行填写
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou","Dysmsapi", "dysmsapi.aliyuncs.com");

//将配置添加进HttoClient客户端
IAcsClient acsClient = new DefaultAcsClient(profile);

//组装请求对象-具体描述见控制台-文档部分内容
SendSmsRequest request = new SendSmsRequest();

//必填:待发送手机号
request.setPhoneNumbers(phoneNumbers);

//必填:设置自己的短信签名
request.setSignName("XXX");

//必填:设置选用的短信 模板CODE
request.setTemplateCode("xxx");

//可选:重要!如果没有占位符,可以不写.但是要写必须要使用json格式. json名称为自己填写的占位符,值自定义
request.setTemplateParam("{'code':"+code+"}"); //必须是json格式


//选填-上行短信扩展码(无特殊需求用户请忽略此字段)
//request.setSmsUpExtendCode("90997");
//可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
request.setOutId("yourOutId");

//发送短信 (可能会抛出异常,最好catch一下)
SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

//返回发送结果的response
return sendSmsResponse;

6.解析response

//获取发送状态 成功时为 "OK"   失败时为对应原因的错误代码(如果出错,可以到短信品台查看错误代码原因)
String code=response.getCode();
   
//如果发送成功,也是 "OK" ,不成功时就返回具体的文字说明
String message=response.getMessage();
   
//返回请求ID,无论成功还是失败,都会返回这次请求的ID值
String requestId=response.getRequestId();
   
//返回业务ID,可以根据此ID对和用户号码 对此次业务的详情进行查询
String bizId=response.getBizId();

7.根据BizId和用户号码对业务进行查询

public static QuerySendDetailsResponse querySendDetails(String bizId, String phoneNumber) throws ClientException {
   
//可自助调整超时时间
System.setProperty("sun.net.client.defaultConnectTimeout", "10000");
System.setProperty("sun.net.client.defaultReadTimeout", "10000");
   
//初始化acsClient,暂不支持region化
IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", "xxx", "xxx");
DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);
IAcsClient acsClient = new DefaultAcsClient(profile);
   
//组装请求对象
QuerySendDetailsRequest request = new QuerySendDetailsRequest();
//必填-号码
request.setPhoneNumber(phoneNumber);
//可选-流水号
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;
}


感谢您的阅读
文章由作者个人总结,欢迎指出文章错误



上一篇:Lucene全文检索

下一篇:SpringCloud