简介该项目主要利用Spring boot2.x 集成阿里大鱼短信接口,发送短信验证码及短信接口详解,使用前需要在阿里大于管理中心添加短信签名与短信模板。
小工具一枚,欢迎使用和Star支持,如使用过程中碰到问题,可以提出Issue,我会尽力完善该Starter 版本基础
操作步骤 第一步:添加maven依赖 <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-dysmsapi</artifactId> <version>1.1.0</version> <scope>compile</scope> </dependency> 第二步:增加SMSService 服务SMSService.java import com.aliyuncs.DefaultAcsClient;import com.aliyuncs.IAcsClient;import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest;import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse;import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse.SmsSendDetailDTO;import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest;import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse;import com.aliyuncs.profile.DefaultProfile;import com.aliyuncs.profile.IClientProfile;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;/** * * @desc : 阿里云短信大鱼服务 * @author : IT实战联盟Lin * * @date : 2019年03月18日16:53:01 */@Servicepublic class SMSService { /** * 获取IAcsClient对象 * * @return * @throws Exception */ private static IAcsClient initClient() throws Exception { System.setProperty('sun.net.client.defaultConnectTimeout', '10000'); System.setProperty('sun.net.client.defaultReadTimeout', '10000'); // 初始化ascClient需要的几个参数 final String product = 'Dysmsapi';// 短信API产品名称 final String domain = 'dysmsapi.aliyuncs.com';// 短信API产品域名 //阿里云测试 final String appkey = 'LTAIdY0gZtSfmI9I'; final String appSecret = 'ogofxIPdDicESfuuN6NoVqbNP3SSrF'; // 初始化ascClient,暂时不支持多region IClientProfile profile = DefaultProfile.getProfile('cn-hangzhou', appkey, appSecret); DefaultProfile.addEndpoint('cn-hangzhou', 'cn-hangzhou', product, domain); IAcsClient acsClient = new DefaultAcsClient(profile); return acsClient; }/** * @param templateCode * 短信模板code * @throws Exception * */ public static void sendMessage(String templateCode,String phones,String code) throws Exception { // 初始化client对象 IAcsClient client = initClient(); // 短信模板请求对象 SendSmsRequest request = null; // 根据短信模板code来获取不同的短信模板请求对象 switch (templateCode) { case 'SMS_100960098': request = getSMS_SMS_100960098Message(phones,code); break; } // 发送短信 SendSmsResponse response = client.getAcsResponse(request); // 打印短信的消息 System.out.println('_____________发送SMS_100960098短信收到的响应信息_______________'); System.out.println('请求的ID:' + response.getRequestId()); System.out.println('请求的状态码:' + response.getCode()); System.out.println('请求的状态码描述:' + response.getMessage()); System.out.println('请求的回执ID:' + response.getBizId()); }/** * 获取SMS_72780019短信模板对应的请求 * * @return */ private static SendSmsRequest getSMS_SMS_100960098Message(String phones,String code) { // 组装请求对象 SendSmsRequest request = new SendSmsRequest(); // 必填:待发送手机号。支持以逗号分隔的形式进行批量调用,批量上限为20个手机号码,批量调用相对于单条调用及时性稍有延迟,验证码类型的短信推荐使用单条调用的方式// request.setPhoneNumbers('1515288****'); request.setPhoneNumbers(phones); // 必填:短信签名 request.setSignName('阿里云短信测试专用'); // 必填:短信模板 request.setTemplateCode('SMS_100960098'); // 可选:模板中的变量替换JSON串,如模板内容为'亲爱的${name},您的验证码为${code}'时,此处的值为 request.setTemplateParam('{\'customer\':'+code+',\'time\':\'5201314\'}'); // 可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 // request.setOutId('yourOutId'); return request; }} 备注:SMS_100960098 模板为阿里大鱼测试模板,生产上需要修改为自己公司申请阿里大鱼的模板; 第三步:编写Main测试SMSService.java public static void main(String[] args) throws Exception { sendMessage('SMS_100960098','186****3762','1234'); } 备注:填写正确的手机号码,验证码生产时要动态生成。 第四步:发送短信结果控制台 如上图所示控制台和手机都收到了成功信息,用大鱼测试模板好像是1小时内只能手机号码发送5条,做测试用已经够了。 第五步:查询发送短信历史记录SMSService.java /** * @desc 短信发送记录查询 * @throws Exception */ public static void querySendDetails() throws Exception { // 初始化client对象 IAcsClient client = initClient(); QuerySendDetailsResponse response = client.getAcsResponse(getQueryRequest()); // 打印短信的消息 System.out.println('_____________querySendDetails()_______________'); System.out.println('请求的ID:' + response.getRequestId()); System.out.println('请求的状态码:' + response.getCode()); System.out.println('请求的状态码描述:' + response.getMessage()); System.out.println('发送总条数:' + response.getTotalCount()); List<SmsSendDetailDTO> smsSendDetailDTOs = response.getSmsSendDetailDTOs(); if (smsSendDetailDTOs != null && smsSendDetailDTOs.size() > 0) { for (SmsSendDetailDTO smsSendDetailDTO : smsSendDetailDTOs) { System.out.println('发送的详细信息 -- 内容: ' + smsSendDetailDTO.getContent() + ' ,手机号: ' + smsSendDetailDTO.getPhoneNum() + ' ,接收时间: ' + smsSendDetailDTO.getReceiveDate() + ' ,状态:' + smsSendDetailDTO.getSendStatus()); } } }/** * 获取短信发送记录查询的请求 * * @return */ public static QuerySendDetailsRequest getQueryRequest() { // 组装请求对象 QuerySendDetailsRequest request = new QuerySendDetailsRequest(); // 必填-号码 request.setPhoneNumber('186****3762'); // 必填-短信发送的日期 支持30天内记录查询(可查其中一天的发送数据),格式yyyyMMdd request.setSendDate('20190318'); // 必填-页大小 (一页一条记录) request.setPageSize(3L); // 必填-当前页码从1开始计数 request.setCurrentPage(1L); return request; } 备注:只支持30天内的记录查询,日期格式为yyyyMMdd不要填写错误。 第六步:编写Main测试SMSService.java public static void main(String[] args) throws Exception { querySendDetails(); } 第七步:发送短信结果控制台 _____________querySendDetails()_______________请求的ID:7D6C4B1B-2929-451A-B8C2-FB9DD95F7E1E请求的状态码:OK请求的状态码描述:OK发送总条数:1发送的详细信息 -- 内容: 【阿里云短信测试专用】尊敬的1234,欢迎您使用阿里云通信服务! ,手机号: 186****3762 ,接收时间: 2019-03-18 16:51:11 ,状态:3 结果没问题,和实际收到的一样。 第八步:参数详情公共请求参数:
请求参数:
响应参数:
贡献者
|
|
来自: Bladexu的文库 > 《技术文摘》