阿里云短信服务API服务调用SendSMSUtil
2017-12-15 16:09
656 查看
一、业务场景
通过调用阿里云短信API服务实现发送自定义短信功能。
二、Java实现代码
1、阿里云短信发送工具类SendSMSUtil.java(具体使用方法有详细注释说明)
2、另附
阿里云短信发送API(如图)
https://help.aliyun.com/document_detail/55284.html?spm=5176.10629532.106.1.16d629dfq9YMJO
DEMO下载地址(如图) https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55284.2.8.tfGUJd
涉及到net.sf.json.JSONObject类的话需要下载依赖相关架包(如图) http://download.csdn.net/download/justinqin/10158995
通过调用阿里云短信API服务实现发送自定义短信功能。
二、Java实现代码
1、阿里云短信发送工具类SendSMSUtil.java(具体使用方法有详细注释说明)
package com.fulture.sms.test; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map; 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.SendSmsRequest; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; /** * 阿里云短信发送工具类 * @author Justin * @date 2017年12月12日 * */ public class SendSMSUtil { //产品名称:云通信短信API产品,开发者无需替换 static final String product = "Dysmsapi"; //产品域名,开发者无需替换 static final String domain = "dysmsapi.aliyuncs.com"; // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找) static final String accessKeyId = "自己的AK,如LTAI7SUG4T******"; static final String accessKeySecret = "自己的AKS,如4Cp1CUnYVEkVlw3o********"; /** * * @param phones 发送的手机号(多个手机号用“,”号隔开,如String phones = "13877901111,13877902222";) * @param params 短信模板的参数,格式如String params = "{\"name\":\"李四\",\"code\":\"1234\"}"; * @return * @throws ClientException */ public static SendSmsResponse sendSms(String phones,String jsonObjectStringParams) 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("13877906666,13877907777,13877908888");*/ request.setPhoneNumbers(phones); //必填:短信签名-可在短信控制台中找到 request.setSignName("自己的短信签名,如测试"); //必填:短信模板-可在短信控制台中找到 request.setTemplateCode("自己的短信模板名称,如SMS_6666666"); //可选:模板中的变量替换JSON串,如模板内容为"亲爱的${name},您的验证码为${code}"时,此处的值为String param = "{\"name\":\"张三\",\"code\":\"1234\"}"; request.setTemplateParam(jsonObjectStringParams); //选填-上行短信扩展码(无特殊需求用户请忽略此字段) //request.setSmsUpExtendCode("90997"); //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者 request.setOutId("yourOutId"); //hint 此处可能会抛出异常,注意catch SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request); return sendSmsResponse; } public static QuerySendDetailsResponse querySendDetails(String bizId,String phones) 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(phones); //可选-流水号 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; } /** * 调用发送短信方法并返回相关数据 * @param phones * @param params * @throws ClientException * @throws InterruptedException */ public static void send(String phones,String jsonObjectStringParams) throws ClientException, InterruptedException{ //调用发短信的方法 SendSmsResponse response = sendSms(phones,jsonObjectStringParams); System.out.println("短信接口返回的数据----------------"); System.out.println("Code=" + response.getCode()); System.out.println("Message=" + response.getMessage()); System.out.println("RequestId=" + response.getRequestId()); System.out.println("BizId=" + response.getBizId()); Thread.sleep(3000L); //查明细 if(response.getCode() != null && response.getCode().equals("OK")) { QuerySendDetailsResponse querySendDetailsResponse = querySendDetails(response.getBizId(),phones); System.out.println("短信明细查询接口返回数据----------------"); System.out.println("Code=" + querySendDetailsResponse.getCode()); System.out.println("Message=" + querySendDetailsResponse.getMessage()); int i = 0; for(QuerySendDetailsResponse.SmsSendDetailDTO smsSendDetailDTO : querySendDetailsResponse.getSmsSendDetailDTOs()) { System.out.println("SmsSendDetailDTO["+i+"]:"); System.out.println("Content=" + smsSendDetailDTO.getContent()); System.out.println("ErrCode=" + smsSendDetailDTO.getErrCode()); System.out.println("OutId=" + smsSendDetailDTO.getOutId()); System.out.println("PhoneNum=" + smsSendDetailDTO.getPhoneNum()); System.out.println("ReceiveDate=" + smsSendDetailDTO.getReceiveDate()); System.out.println("SendDate=" + smsSendDetailDTO.getSendDate()); System.out.println("SendStatus=" + smsSendDetailDTO.getSendStatus()); System.out.println("Template=" + smsSendDetailDTO.getTemplateCode()); } System.out.println("TotalCount=" + querySendDetailsResponse.getTotalCount()); System.out.println("RequestId=" + querySendDetailsResponse.getRequestId()); } } public static void main(String[] args) throws ClientException, InterruptedException { //发送短信的手机号(多个号码用英文","号隔开) String phones = "13877906666,13877907777,13877908888"; String name = "张三"; String code = "1314"; Map<String,String> map = new HashMap<String,String>(); map.put("name",name); map.put("code", code); String jsonObjectStringParams = net.sf.json.JSONObject.fromObject(map).toString(); //短信模板参数(json格式的字符串) //传参数调用方法发送短信 send(phones,jsonObjectStringParams); } }
2、另附
阿里云短信发送API(如图)
https://help.aliyun.com/document_detail/55284.html?spm=5176.10629532.106.1.16d629dfq9YMJO
DEMO下载地址(如图) https://help.aliyun.com/document_detail/55359.html?spm=5176.doc55284.2.8.tfGUJd
涉及到net.sf.json.JSONObject类的话需要下载依赖相关架包(如图) http://download.csdn.net/download/justinqin/10158995
相关文章推荐
- 调用阿里云短信服务平台API实现ERP系统短信发送功能
- java 调用 短信API服务 (聚合数据平台)
- Java阿里云通信短信服务发送短信调用
- 调用阿里云api获取阿里云数据同步服务(DTS)并且作图发送邮件的整个流程
- 阿里云短信服务api
- 短信api调用文档 最优短信api服务
- Python3.x调用阿里云短信api
- eoLinker-API_Shop_短信服务接口-调用示例代码,支持PHP、Python、Java等语言
- python3调用阿里云短信服务
- 阿里云 短信消息api 示例 (附:阿里云控制台的消息服务,集成到codeigniter )
- 阿里云短信服务API中接口签名的测试
- 调用阿里云短信服务
- 通讯服务类API调用的代码示例合集:短信服务、手机号归属地查询、电信基站查询等
- Java调用阿里云短信通道服务【千锋出品】
- 离线谷歌卫星地图加载服务中间件调用示例For Google API
- Fiddler实验:使用Composer发起百度短网址服务API调用请求
- php 阿里云短信服务及阿里大鱼实现短信验证码的发送
- 【云服务月刊】2018年第2期:API Playbook 业界首发,教你玩 High 阿里云 API!
- 短信API服务
- Springboot实现阿里云通信短信服务有关短信验证码的发送