阿里云短信接口对接(java版)

今天准备来对接阿里云短信接口
首先找到阿里云短信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={}


版权声明:本文为qq_30835639原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。