赞
踩
今天准备来对接阿里云短信接口
首先找到阿里云短信SDK:https://next.api.aliyun.com/api-tools/sdk/Dysmsapi?spm=a2c4g.11186623.0.0.7dd67218eyVDsB&version=2017-05-25&language=java-tea
目前使用:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>dysmsapi20170525</artifactId>
<version>2.0.6</version>
</dependency>
然后开始写代码了
阿里云短信提供5大服务:发送、记录、签名、模板、短链
首先我们要先建模板,然后签名、发送、记录,短链最后弄,好多人用不到短链
注意:模板和签名都需要审核的
首先来个基础类:
使用AK&SK初始化账号Client 这个是所有接口都需要的参数
package com.menzhen.common.utils.sms; import com.aliyun.teaopenapi.models.*; /** * 阿里云短信账号初始化 * @author WJ * */ public class AliyunSmsBase { /** * 使用AK&SK初始化账号Client * @param accessKeyId * @param accessKeySecret * @return Client * @throws Exception */ public static com.aliyun.dysmsapi20170525.Client createClient(String accessKeyId, String accessKeySecret) throws Exception { Config config = new Config() // 您的AccessKey ID .setAccessKeyId(accessKeyId) // 您的AccessKey Secret .setAccessKeySecret(accessKeySecret); // 访问的域名 config.endpoint = "dysmsapi.aliyuncs.com"; return new com.aliyun.dysmsapi20170525.Client(config); } }
1、模板
模板有4个接口:申请、删除、查询审核状态、修改未通过审核的短信模板
阿里云短信模板代码:
package com.menzhen.common.utils.sms; import com.aliyun.dysmsapi20170525.Client; import com.aliyun.dysmsapi20170525.models.*; import com.aliyun.tea.TeaConverter; import com.aliyun.tea.TeaException; import com.aliyun.tea.TeaPair; import com.aliyun.teaopenapi.models.*; /** * 阿里云短信模板 * @author WJ * */ public class AliyunSmsTemplate { /** * 添加短信模板 * @param client 调用createClient()创建 * @param templateType 0:验证码。1:短信通知。2:推广短信。3:国际/港澳台消息。 * @param templateName 模板名称,长度为1~30个字符。 * @param templateContent 模板内容,长度为1~500个字符。 * @param remark 短信模板申请说明。长度为1~100个字符。 * @return 记得把返回的值存起来 特别是TemplateCode(resp.getBody().templateCode) * 返回示例 { "TemplateCode": "SMS_16703****", "Message": "OK", "RequestId": "0A974B78-02BF-4C79-ADF3-90CFBA1B55B1", "TemplateContent": "亲爱的会员!阿里云短信服务祝您新年快乐!", "TemplateName": "阿里云短信测试模板", "TemplateType": "1", "CreateDate": "2019-06-04 11:42:17", "Code": "OK", "Reason": "无审批备注", "TemplateStatus": "1" } * @throws Exception */ public static AddSmsTemplateResponse addSmsTemplate(com.aliyun.dysmsapi20170525.Client client, Integer templateType, String templateName, String templateContent, String remark) throws Exception { AddSmsTemplateRequest req = new AddSmsTemplateRequest() .setTemplateType(templateType) .setTemplateName(templateName) .setTemplateContent(templateContent) .setRemark(remark); AddSmsTemplateResponse resp = client.addSmsTemplate(req); if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) { throw new TeaException(TeaConverter.buildMap( new TeaPair("code", resp.body.code), new TeaPair("message", resp.body.message) )); } System.err.println("添加短信模板:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); return resp; } /** * 删除短信模板 * @param client 调用createClient()创建 * @param templateCode 短信模板code 您可以在控制台模板管理页面或API接口addSmsTemplate()的返回参数中获取短信模板CODE。如果需要删除模板记得把添加短信模板中返回的值存起来 * 返回示例 { "TemplateCode": "SMS_20375****", "Message": "OK", "RequestId": "CCA2BCFF-2BA7-427C-90EE-AC6994748607", "Code": "OK" } * @throws Exception */ public static void deleteSmsTemplate(com.aliyun.dysmsapi20170525.Client client, String templateCode) throws Exception { DeleteSmsTemplateRequest req = new DeleteSmsTemplateRequest() .setTemplateCode(templateCode); DeleteSmsTemplateResponse resp = client.deleteSmsTemplate(req); System.err.println("删除短信模板:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); } /** * 修改短信模板 * @param client 调用createClient()创建 * @param templateType 0:验证码。1:短信通知。2:推广短信。3:国际/港澳台消息。 * @param templateName 模板名称,长度为1~30个字符。 * @param templateCode 您可以登录短信服务控制台,选择国内消息或国际/港澳台消息,在模板管理页签下查看模板CODE。也可以通过AddSmsTemplate接口获取短信模板CODE。 * @param templateContent 模板内容,长度为1~500个字符。 * @param remark 短信模板申请说明。长度为1~100个字符。 * 返回示例 { "TemplateCode": "SMS_15255****", "Message": "OK", "RequestId": "F655A8D5-B967-440B-8683-DAD6FF8DE990", "Code": "OK" } * @throws Exception */ public static void modifySmsTemplate(com.aliyun.dysmsapi20170525.Client client, Integer templateType, String templateName, String templateCode, String templateContent, String remark) throws Exception { ModifySmsTemplateRequest req = new ModifySmsTemplateRequest() .setTemplateType(templateType) .setTemplateName(templateName) .setTemplateCode(templateCode) .setTemplateContent(templateContent) .setRemark(remark); ModifySmsTemplateResponse resp = client.modifySmsTemplate(req); System.err.println("修改短信模板:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); } /** * 查询模板详情 * @param client 调用createClient()创建 * @param templateCode 您可以登录短信服务控制台,选择国内消息或国际/港澳台消息,在模板管理页签中查看模板CODE。也可以通过AddSmsTemplate接口获取模板CODE。 * 返回示例 { "TemplateCode": "SMS_16703****", "Message": "OK", "RequestId": "0A974B78-02BF-4C79-ADF3-90CFBA1B55B1", "TemplateContent": "亲爱的会员!阿里云短信服务祝您新年快乐!", "TemplateName": "阿里云短信测试模板", "TemplateType": "1", "CreateDate": "2019-06-04 11:42:17", "Code": "OK", "Reason": "无审批备注", "TemplateStatus": "1" } * @throws Exception */ public static void querySmsTemplate(com.aliyun.dysmsapi20170525.Client client, String templateCode) throws Exception { QuerySmsTemplateRequest req = new QuerySmsTemplateRequest() .setTemplateCode(templateCode); QuerySmsTemplateResponse resp = client.querySmsTemplate(req); System.err.println("查询模板详情:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); } public static void main(String[] args_) throws Exception { Client client = AliyunSmsBase.createClient("", ""); // 短信类型 Integer templateType = 1; // 模板名称 String templateName = "短信测试模板"; // 模板内容 String templateContent = "阿里云短信服务祝您新年快乐"; // 短信模板申请说明 String remark = "短信通知客户"; AddSmsTemplateResponse addSmsTemplateResp = addSmsTemplate(client, templateType, templateName, templateContent, remark); querySmsTemplate(client, addSmsTemplateResp.body.templateCode); } }
2、签名
签名也有4个接口:申请、删除、查询审核状态、修改短信签名证明文件
阿里云短信签名代码:
package com.menzhen.common.utils.sms; import com.aliyun.dysmsapi20170525.Client; import com.aliyun.dysmsapi20170525.models.*; import com.aliyun.tea.TeaConverter; import com.aliyun.tea.TeaException; import com.aliyun.tea.TeaPair; /** * 阿里云短信签名 * @author WJ * */ public class AliyunSmsSign { /** * 添加短信签名 * @param client 调用AliyunSmsBase.createClient()创建 * @param signName 签名名称。签名必须符合个人用户签名规范https://help.aliyun.com/document_detail/108076.html?spm=api-workbench.API%20Explorer.0.0.1f6b1e0fdiG0AW * @param signSource 签名来源。取值:0:企事业单位的全称或简称。1:工信部备案网站的全称或简称。2:App应用的全称或简称。3:公众号或小程序的全称或简称。4:电商平台店铺名的全称或简称。5:商标名的全称或简称。 * @param remark 短信签名申请说明。请在申请说明中详细描述您的业务使用场景,申请工信部备案网站的全称或简称请在此处填写域名,长度不超过200个字符。 * @param fileContents 签名的资质证明文件经base64编码后的字符串。图片不超过2 MB。 * @param fileSuffix 签名的证明文件格式,支持上传多张图片。当前支持JPG、PNG、GIF或JPEG格式的图片。 * 返回示例 { "SignName": "阿里云", "Message": "OK", "RequestId": "F655A8D5-B967-440B-8683-DAD6FF8DE990", "Code": "OK" } * @throws Exception */ public static void addSmsSign(com.aliyun.dysmsapi20170525.Client client, String signName, Integer signSource, String remark, String fileContents, String fileSuffix) throws Exception { AddSmsSignRequest.AddSmsSignRequestSignFileList signFileList = new AddSmsSignRequest.AddSmsSignRequestSignFileList(); signFileList.fileContents = fileContents; signFileList.fileSuffix = fileSuffix; AddSmsSignRequest req = new AddSmsSignRequest() .setSignName(signName) .setSignSource(signSource) .setRemark(remark) .setSignFileList(java.util.Arrays.asList( signFileList )); AddSmsSignResponse resp = client.addSmsSign(req); if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) { throw new TeaException(TeaConverter.buildMap( new TeaPair("code", resp.body.code), new TeaPair("message", resp.body.message) )); } System.err.println("添加短信签名:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); } /** * 删除短信签名 * @param client 调用AliyunSmsBase.createClient()创建 * @param signName 短信签名。必须是本账号已申请的短信签名。 * @throws Exception */ public static void deleteSmsSign(com.aliyun.dysmsapi20170525.Client client, String signName) throws Exception { DeleteSmsSignRequest req = new DeleteSmsSignRequest() .setSignName(signName); DeleteSmsSignResponse resp = client.deleteSmsSign(req); if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) { throw new TeaException(TeaConverter.buildMap( new TeaPair("code", resp.body.code), new TeaPair("message", resp.body.message) )); } System.err.println("删除短信签名:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); } /** * 修改短信签名 * @param client 调用AliyunSmsBase.createClient()创建 * @param signName 签名名称。签名必须符合个人用户签名规范https://help.aliyun.com/document_detail/108076.html?spm=api-workbench.API%20Explorer.0.0.1f6b1e0fdiG0AW * @param signSource 签名来源。取值:0:企事业单位的全称或简称。1:工信部备案网站的全称或简称。2:App应用的全称或简称。3:公众号或小程序的全称或简称。4:电商平台店铺名的全称或简称。5:商标名的全称或简称。 * @param remark 短信签名申请说明。请在申请说明中详细描述您的业务使用场景,申请工信部备案网站的全称或简称请在此处填写域名,长度不超过200个字符。 * @param fileContents 签名的资质证明文件经base64编码后的字符串。图片不超过2 MB。 * @param fileSuffix 签名的证明文件格式,支持上传多张图片。当前支持JPG、PNG、GIF或JPEG格式的图片。 * @throws Exception */ public static void modifySmsSign(com.aliyun.dysmsapi20170525.Client client, String signName, Integer signSource, String remark, String fileContents, String fileSuffix) throws Exception { ModifySmsSignRequest.ModifySmsSignRequestSignFileList signFileList = new ModifySmsSignRequest.ModifySmsSignRequestSignFileList(); signFileList.fileContents = fileContents; signFileList.fileSuffix = fileSuffix; ModifySmsSignRequest req = new ModifySmsSignRequest() .setSignName(signName) .setSignSource(signSource) .setRemark(remark) .setSignFileList(java.util.Arrays.asList( signFileList )); ModifySmsSignResponse resp = client.modifySmsSign(req); if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) { throw new TeaException(TeaConverter.buildMap( new TeaPair("code", resp.body.code), new TeaPair("message", resp.body.message) )); } System.err.println("修改短信签名:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); } /** * 查询短信签名申请状态 * @param client 调用createClient()创建 * @param signName 签名名称。 * 返回示例 { "Message": "OK", "RequestId": "CC89A90C-978F-46AC-B80D-54738371E7CA", "SignStatus": 1, "CreateDate": " 2019-01-08 16:44:13", "Code": "OK", "SignName": "阿里云", "Reason": "文件不能证明信息真实性,请重新上传" } * @throws Exception */ public static void querySmsSign(com.aliyun.dysmsapi20170525.Client client, String signName) throws Exception { QuerySmsSignRequest req = new QuerySmsSignRequest() .setSignName(signName); QuerySmsSignResponse resp = client.querySmsSign(req); if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) { throw new TeaException(TeaConverter.buildMap( new TeaPair("code", resp.body.code), new TeaPair("message", resp.body.message) )); } System.err.println("查询短信签名申请状态:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); } public static void main(String[] args_) throws Exception { Client client = AliyunSmsBase.createClient("", ""); //签名名称 String signName = "**"; //签名来源 Integer signSource = 0; //短信签名申请说明 String remark = "我想申请签名"; //签名的资质证明文件(不超过2M的图片转成base64编码) String fileContents = "R0lGODlhHAAmAKIHAKqqqsvLy0hISObm5vf394uLiwAA"; //签名的证明文件格式(图片后缀JPG、PNG、GIF或JPEG) String fileSuffix = "jpg"; addSmsSign(client, signName, signSource, remark, fileContents, fileSuffix); querySmsSign(client, signName); } }
3、发送
发送有2个接口:发送短信、批量发送短信
阿里云短信发送代码:
package com.menzhen.common.utils.sms; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.Map; import com.aliyun.dysmsapi20170525.Client; import com.aliyun.dysmsapi20170525.models.*; /** * 阿里云短信发送 * @author WJ * */ public class AliyunSmsSend { /** * 单条短信发送 * @param client 调用AliyunSmsBase.createClient()创建 * @param phoneNumbers 接收短信的手机号码,多个用英文逗号隔开 * @param signName 短信签名名称,eg: "阿里云" * @param TemplateCode 短信模板CODE * @param templateParam 短信模板变量对应的实际值,eg:{"code":"1234"} * @return sendResp.body.bizId可用于查询短信发送结果 * @throws Exception */ public static SendSmsResponse send(com.aliyun.dysmsapi20170525.Client client, String phoneNumbers, String signName, String templateCode, String templateParam) throws Exception { SendSmsRequest sendReq = new SendSmsRequest() .setPhoneNumbers(phoneNumbers) .setSignName(signName) .setTemplateCode(templateCode) .setTemplateParam(templateParam); SendSmsResponse sendResp = client.sendSms(sendReq); String code = sendResp.body.code; if (!com.aliyun.teautil.Common.equalString(code, "OK")) { throw new RuntimeException("错误信息: " + sendResp.body.message + ""); } return sendResp; } /** * 批量短信发送 * @param client 调用AliyunSmsBase.createClient()创建 * @param phoneNumberJson 接收短信的手机号码,JSON 数组格式,eg: ["1590***0000","13500***000"] * @param signNameJson 短信签名名称,JSON 数组格式,eg: ["阿里云","阿里巴巴"] * @param templateCode 短信模板CODE * @param templateParamJson 短信模板变量对应的实际值,JSON 数组格式,eg:[{"code":"1234"},{"code":"2345"}] * @return sendResp.body.bizId可用于查询短信发送结果 * @throws Exception */ public static SendBatchSmsResponse batchSend(com.aliyun.dysmsapi20170525.Client client, String phoneNumberJson, String signNameJson, String templateCode, String templateParamJson) throws Exception { SendBatchSmsRequest sendReq = new SendBatchSmsRequest() .setPhoneNumberJson(phoneNumberJson) .setSignNameJson(signNameJson) .setTemplateCode(templateCode) .setTemplateParamJson(templateParamJson); SendBatchSmsResponse sendResp = client.sendBatchSms(sendReq); String code = sendResp.body.code; if (!com.aliyun.teautil.Common.equalString(code, "OK")) { throw new RuntimeException("错误信息: " + sendResp.body.message + ""); } return sendResp; } /** * 单条短信发送 多个手机号发送结果查询 * @param client 调用AliyunSmsBase.createClient()创建 * @param phoneNumbers 接收短信的手机号码 * @param bizId 发送回执ID,即发送流水号。调用发送接口SendSms或SendBatchSms发送短信时,返回值中的BizId字段。 * @param pageSize 分页查看发送记录,指定每页显示的短信记录数量 取值范围为1~50 * @param currentPage 分页查看发送记录,指定发送记录的当前页码。 * @return Map集合 key:手机号value返回结果 * 返回示例 QuerySendDetails: { "TotalCount":1, "Message":"OK", "RequestId":"819BE656-D2E0-4858-8B21-B2E477085AAF", "SmsSendDetailDTOs":{ "SmsSendDetailDTO":{ "SendDate":"2019-01-08 16:44:10", "OutId":123, "SendStatus":3, "ReceiveDate":"2019-01-08 16:44:13", "ErrCode":"DELIVERED", "TemplateCode":"SMS_122310183", "Content":"【阿里云】验证码为:123,您正在登录,若非本人操作,请勿泄露", "PhoneNum":15298356881 } }, "Code":"OK" } * @throws Exception */ public static Map<String, QuerySendDetailsResponse> sendResultMany(com.aliyun.dysmsapi20170525.Client client, String phoneNumbers, String bizId, Long pageSize, Long currentPage) throws Exception { Map<String, QuerySendDetailsResponse> map = new HashMap<String, QuerySendDetailsResponse>(); java.util.List<String> phoneNums = Arrays.asList(phoneNumbers.split(",")); for (String phoneNum : phoneNums) { SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd"); QuerySendDetailsRequest queryReq = new QuerySendDetailsRequest() .setPhoneNumber(com.aliyun.teautil.Common.assertAsString(phoneNum)) .setBizId(bizId) .setSendDate(ft.format(new Date())) .setPageSize(pageSize) .setCurrentPage(currentPage); QuerySendDetailsResponse queryResp = client.querySendDetails(queryReq); java.util.List<QuerySendDetailsResponseBody.QuerySendDetailsResponseBodySmsSendDetailDTOsSmsSendDetailDTO> dtos = queryResp.body.smsSendDetailDTOs.smsSendDetailDTO; // 打印结果 for (QuerySendDetailsResponseBody.QuerySendDetailsResponseBodySmsSendDetailDTOsSmsSendDetailDTO dto : dtos) { if (com.aliyun.teautil.Common.equalString("" + dto.sendStatus + "", "3")) { System.out.println("" + dto.phoneNum + " 发送成功,接收时间: " + dto.receiveDate + ""); } else if (com.aliyun.teautil.Common.equalString("" + dto.sendStatus + "", "2")) { System.out.println("" + dto.phoneNum + " 发送失败"); } else { System.out.println("" + dto.phoneNum + " 正在发送中..."); } } map.put(phoneNum, queryResp); } return map; } /** * 单条短信发送 单个手机号发送结果查询 * @param client 调用AliyunSmsBase.createClient()创建 * @param phoneNumbers 接收短信的手机号码 * @param bizId 发送回执ID,即发送流水号。调用发送接口SendSms或SendBatchSms发送短信时,返回值中的BizId字段。 * @param pageSize 分页查看发送记录,指定每页显示的短信记录数量 取值范围为1~50 * @param currentPage 分页查看发送记录,指定发送记录的当前页码。 * @return 返回结果 返回示例 QuerySendDetails: { "TotalCount":1, "Message":"OK", "RequestId":"819BE656-D2E0-4858-8B21-B2E477085AAF", "SmsSendDetailDTOs":{ "SmsSendDetailDTO":{ "SendDate":"2019-01-08 16:44:10", "OutId":123, "SendStatus":3, "ReceiveDate":"2019-01-08 16:44:13", "ErrCode":"DELIVERED", "TemplateCode":"SMS_122310183", "Content":"【阿里云】验证码为:123,您正在登录,若非本人操作,请勿泄露", "PhoneNum":15298356881 } }, "Code":"OK" } * @throws Exception */ public static QuerySendDetailsResponse sendResultOne(com.aliyun.dysmsapi20170525.Client client, String phone, String bizId, Long pageSize, Long currentPage) throws Exception { SimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd"); QuerySendDetailsRequest queryReq = new QuerySendDetailsRequest() .setPhoneNumber(com.aliyun.teautil.Common.assertAsString(phone)) .setBizId(bizId) .setSendDate(ft.format(new Date())) .setPageSize(10L) .setCurrentPage(1L); QuerySendDetailsResponse queryResp = client.querySendDetails(queryReq); java.util.List<QuerySendDetailsResponseBody.QuerySendDetailsResponseBodySmsSendDetailDTOsSmsSendDetailDTO> dtos = queryResp.body.smsSendDetailDTOs.smsSendDetailDTO; // 打印结果 for (QuerySendDetailsResponseBody.QuerySendDetailsResponseBodySmsSendDetailDTOsSmsSendDetailDTO dto : dtos) { if (com.aliyun.teautil.Common.equalString("" + dto.sendStatus + "", "3")) { System.out.println("" + dto.phoneNum + " 发送成功,接收时间: " + dto.receiveDate + ""); } else if (com.aliyun.teautil.Common.equalString("" + dto.sendStatus + "", "2")) { System.out.println("" + dto.phoneNum + " 发送失败"); } else { System.out.println("" + dto.phoneNum + " 正在发送中..."); } } return queryResp; } /** * 批量短信发送 多个手机号发送结果查询 * @param client 调用AliyunSmsBase.createClient()创建 * @param phoneNumberJson 接收短信的手机号码 * @param bizId 发送回执ID,即发送流水号。调用发送接口SendSms或SendBatchSms发送短信时,返回值中的BizId字段。 * @param pageSize 分页查看发送记录,指定每页显示的短信记录数量 取值范围为1~50 * @param currentPage 分页查看发送记录,指定发送记录的当前页码。 * @return Map集合 key:手机号value返回结果 * 返回示例 QuerySendDetails: { "TotalCount":1, "Message":"OK", "RequestId":"819BE656-D2E0-4858-8B21-B2E477085AAF", "SmsSendDetailDTOs":{ "SmsSendDetailDTO":{ "SendDate":"2019-01-08 16:44:10", "OutId":123, "SendStatus":3, "ReceiveDate":"2019-01-08 16:44:13", "ErrCode":"DELIVERED", "TemplateCode":"SMS_122310183", "Content":"【阿里云】验证码为:123,您正在登录,若非本人操作,请勿泄露", "PhoneNum":15298356881 } }, "Code":"OK" } * @throws Exception */ public static Map<String, QuerySendDetailsResponse> batchSendResultMany(com.aliyun.dysmsapi20170525.Client client, String phoneNumberJson, String bizId, Long pageSize, Long currentPage) throws Exception { java.util.List<Object> phoneNums = com.aliyun.teautil.Common.assertAsArray(com.aliyun.teautil.Common.parseJSON(phoneNumberJson)); String phoneNumbers = ""; for (Object phoneNum : phoneNums) { phoneNumbers += com.aliyun.teautil.Common.assertAsString(phoneNum) + ","; } phoneNumbers = phoneNumbers.substring(0, phoneNumbers.length()-1); return sendResultMany(client, phoneNumbers, bizId, pageSize, currentPage); } /** * 批量短信发送 单个手机号发送结果查询 * @param client 调用AliyunSmsBase.createClient()创建 * @param phone 接收短信的手机号码 * @param bizId 发送回执ID,即发送流水号。调用发送接口SendSms或SendBatchSms发送短信时,返回值中的BizId字段。 * @param pageSize 分页查看发送记录,指定每页显示的短信记录数量 取值范围为1~50 * @param currentPage 分页查看发送记录,指定发送记录的当前页码。 * @return 返回结果 * 返回示例 QuerySendDetails: { "TotalCount":1, "Message":"OK", "RequestId":"819BE656-D2E0-4858-8B21-B2E477085AAF", "SmsSendDetailDTOs":{ "SmsSendDetailDTO":{ "SendDate":"2019-01-08 16:44:10", "OutId":123, "SendStatus":3, "ReceiveDate":"2019-01-08 16:44:13", "ErrCode":"DELIVERED", "TemplateCode":"SMS_122310183", "Content":"【阿里云】验证码为:123,您正在登录,若非本人操作,请勿泄露", "PhoneNum":15298356881 } }, "Code":"OK" } * @throws Exception */ public static QuerySendDetailsResponse batchSendResultOne(com.aliyun.dysmsapi20170525.Client client, String phone, String bizId, Long pageSize, Long currentPage) throws Exception { return sendResultOne(client, phone, bizId, pageSize, currentPage); } public static void main(String[] args_) throws Exception { Client client = AliyunSmsBase.createClient("", ""); //接收短信的手机 String phone = ""; //签名 String signName = ""; //模板 String templateCode = ""; //短信模板变量对应的实际值 String templateParam = ""; //发送短信 SendSmsResponse send = send(client, phone, signName, templateCode, templateParam); com.aliyun.teautil.Common.sleep(10000); //查询发送短信结果 QuerySendDetailsResponse sendResultOne = sendResultOne(client, phone, send.getBody().getBizId(), 10L, 1L); System.err.println(sendResultOne); } }
4、记录
获取短信发送结果 上面3、发送的代码已经写进去了
5、短链
短链有3个接口:创建短链、删除短链、短链状态查询
阿里云短信短链代码:
package com.menzhen.common.utils.sms; import com.aliyun.dysmsapi20170525.models.*; import com.aliyun.tea.TeaConverter; import com.aliyun.tea.TeaException; import com.aliyun.tea.TeaPair; /** * 阿里云短信短链 * @author WJ * */ public class AliyunSmsShortChain { /** * 创建短链 * @param client 调用AliyunSmsBase.createClient()创建 * @param sourceUrl 原始链接地址。不超过1000个字符。 * @param shortUrlName 短链服务名称。不超过12个字符。 * @param effectiveDays 短链服务使用有效期。单位为天,有效期最长为30天。 * @return 结果 * 返回示例 { "Message": "OK", "RequestId": "819BE656-D2E0-4858-8B21-B2E477085AAF", "Data": { "SourceUrl": "https://www.****.com/product/sms", "ShortUrl": "http://****.cn/6y8uy7", "ExpireDate": "2022-09-19 11:21:11" }, "Code": "OK" } * @throws Exception */ public static AddShortUrlResponse addShortUrl(com.aliyun.dysmsapi20170525.Client client, String sourceUrl, String shortUrlName, String effectiveDays) throws Exception { AddShortUrlRequest req = new AddShortUrlRequest() .setSourceUrl(sourceUrl) .setShortUrlName(shortUrlName) .setEffectiveDays(effectiveDays); AddShortUrlResponse resp = client.addShortUrl(req); if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) { throw new TeaException(TeaConverter.buildMap( new TeaPair("code", resp.body.code), new TeaPair("message", resp.body.message) )); } System.err.println("创建短链:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); return resp; } /** * 删除短链 * @param client 调用AliyunSmsBase.createClient()创建 * @param sourceUrl 原始链接地址。不超过1000个字符。 * @throws Exception */ public static void deleteShortUrl(com.aliyun.dysmsapi20170525.Client client, String sourceUrl) throws Exception { DeleteShortUrlRequest req = new DeleteShortUrlRequest() .setSourceUrl(sourceUrl); DeleteShortUrlResponse resp = client.deleteShortUrl(req); if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) { throw new TeaException(TeaConverter.buildMap( new TeaPair("code", resp.body.code), new TeaPair("message", resp.body.message) )); } System.err.println("删除短链:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); } /** * 短链查询 * @param client 调用AliyunSmsBase.createClient()创建 * @param shortUrl 生成的短链服务地址。可通过AddShortUrl接口获取。 * return 结果 * 返回示例 { "Message": "OK", "RequestId": "819BE656-D2E0-4858-8B21-B2E477085AAF", "Data": { "ShortUrlName": "阿里短链测试", "SourceUrl": "https://www.****.com/product/sms", "ShortUrl": "http://****.cn/6y8uy7", "ExpireDate": "2022-09-19 11:21:11", "PageViewCount": 300, "CreateDate": "2019-01-08 16:44:13", "ShortUrlStatus": "expired", "UniqueVisitorCount": 23 }, "Code": "OK" } * @throws Exception */ public static QueryShortUrlResponse queryShortUrl(com.aliyun.dysmsapi20170525.Client client, String shortUrl) throws Exception { QueryShortUrlRequest req = new QueryShortUrlRequest() .setShortUrl(shortUrl); QueryShortUrlResponse resp = client.queryShortUrl(req); if (!com.aliyun.teautil.Common.equalString(resp.body.code, "OK")) { throw new TeaException(TeaConverter.buildMap( new TeaPair("code", resp.body.code), new TeaPair("message", resp.body.message) )); } System.err.println("短链状态查询:"); System.err.println(com.aliyun.teautil.Common.toJSONString(com.aliyun.teautil.Common.toMap(resp))); return resp; } public static void main(String[] args_) throws Exception { String sourceUrl = ""; String shortUrlName = ""; String effectiveDays = ""; com.aliyun.dysmsapi20170525.Client client = AliyunSmsBase.createClient("", ""); addShortUrl(client, sourceUrl, shortUrlName, effectiveDays); } }
就这么多了 去测试了
更多资料请参考:
阿里云OpenAPI链接: https://next.api.aliyun.com/api/Dysmsapi/2017-05-25/SendSms?params={}
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。