JAVA 发送阿里云短信

 支持批量发送短信、单条发送短信。

查询短信发送状态等接口。

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>dysmsapi20170525</artifactId>
</dependency>

 

package com.dpxdata.backend.sms.aliyun;

import com.alibaba.fastjson.JSON;
import com.aliyun.dysmsapi20170525.Client;
import com.aliyun.dysmsapi20170525.models.*;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

/**
 * 阿里云短信发送
 * @author Lish
 *
 */
public class AliyunSmsSend {

    /**
     * 单条短信发送
     * @param phoneNumbers 接收短信的手机号码,多个用英文逗号隔开
     * @param signName 短信签名名称,eg: "阿里云"
     * @param templateCode 短信模板CODE
     * @param templateParam 短信模板变量对应的实际值,eg:{"code":"1234"}
     * @return sendResp.body.bizId可用于查询短信发送结果
     * @throws Exception
     */
    public static SendSmsResponse send(String phoneNumbers, String signName, String templateCode, String templateParam) throws Exception {
        com.aliyun.dysmsapi20170525.Client client = AliyunSmsBase.createClient("accessKeyId", "keySecret");

        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;
    }

    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 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(String phoneNumberJson, String signNameJson, String templateCode, String templateParamJson) throws Exception {
        com.aliyun.dysmsapi20170525.Client client = AliyunSmsBase.createClient("accessKeyId", "keySecret");
        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 phoneNumbers 接收短信的手机号码
     * @param bizId 发送回执ID,即发送流水号。调用发送接口SendSms或SendBatchSms发送短信时,返回值中的BizId字段。
     * @param pageSize 分页查看发送记录,指定每页显示的短信记录数量 取值范围为1~50
     * @param currentPage 分页查看发送记录,指定发送记录的当前页码。
     * @return Map集合 key:手机号value返回结果
     */
    public static Map<String, QuerySendDetailsResponse> sendResultMany(String phoneNumbers, String bizId, String date, Long pageSize, Long currentPage) throws Exception {
        com.aliyun.dysmsapi20170525.Client client = AliyunSmsBase.createClient("accessKeyId", "keySecret");
        Map<String, QuerySendDetailsResponse> map = new ConcurrentHashMap<>();
        java.util.List<String> phoneNums = Arrays.asList(phoneNumbers.split(","));
        for (String phoneNum : phoneNums) {
            QuerySendDetailsRequest queryReq = new QuerySendDetailsRequest()
                    .setPhoneNumber(com.aliyun.teautil.Common.assertAsString(phoneNum))
                    .setBizId(bizId)
                    .setSendDate(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 isGlobe 1:国内 2:2:国际/港澳台短信发送记录。
     * @param startDate 开始日期,格式为yyyyMMdd,例如20181225。
     * @param endDate 结束日期,格式为yyyyMMdd,例如20181225。
     * @param pageIndex 页码。默认取值为1。
     * @param pageSize 页数。取值范围:1~50。
     * @return
     */
    public static QuerySendStatisticsResponse getSendStatistics(Integer isGlobe, String startDate, String endDate, Integer pageIndex, Integer pageSize) {
        Client client = null;
        try {
            client = AliyunSmsBase.createClient("accessKeyId", "keySecret");
            QuerySendStatisticsRequest query = new QuerySendStatisticsRequest();
            query.setIsGlobe(isGlobe);
            query.setStartDate(startDate);
            query.setEndDate(endDate);
            query.setPageIndex(pageIndex);
            query.setPageSize(pageSize);
            QuerySendStatisticsResponse querySendStatisticsResponse = client.querySendStatistics(query);
            return querySendStatisticsResponse;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }
}
package com.dpxdata.backend.sms.aliyun;

import com.aliyun.teaopenapi.models.*;

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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Java调用阿里云短信接口的步骤: 1. 首先,你需要在阿里云官网注册并创建一个短信服务。你可以参考阿里云官网提供的文档来了解如何创建短信服务。 2. 在你的Java项目中,你需要引入阿里云短信SDK的依赖。你可以在Maven项目中的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>com.aliyun</groupId> <artifactId>dysmsapi20170525</artifactId> <version>2.0.6</version> </dependency> ``` 3. 在你的Java代码中,你需要导入阿里云短信SDK的相关类和方法。例如: ```java import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.exceptions.ServerException; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import com.aliyuncs.sms.model.v20170525.*; ``` 4. 创建一个DefaultAcsClient对象,并设置好AccessKey和SecretKey。例如: ```java String accessKeyId = "your_access_key_id"; String accessKeySecret = "your_access_key_secret"; IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret); DefaultAcsClient client = new DefaultAcsClient(profile); ``` 5. 构造一个SendSmsRequest对象,并设置好短信相关的参数,例如短信签名、模板ID、手机号码和模板参数。例如: ```java SendSmsRequest request = new SendSmsRequest(); request.setSignName("your_sign_name"); request.setTemplateCode("your_template_code"); request.setPhoneNumbers("your_phone_number"); request.setTemplateParam("{\"code\":\"123456\"}"); ``` 6. 调用client的sendSms方法发送短信,并处理发送结果。例如: ```java try { SendSmsResponse response = client.getAcsResponse(request); if (response.getCode() != null && response.getCode().equals("OK")) { System.out.println("短信发送成功"); } else { System.out.println("短信发送失败,错误码:" + response.getCode()); } } catch (ServerException e) { e.printStackTrace(); } catch (ClientException e) { e.printStackTrace(); } ``` 请注意,以上代码仅为示例,你需要根据你的实际情况进行相应的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值