Implement (SMS interface call) Alibaba communication

      Some time ago because of customer requirements, the platform needs to integrate out of SMS functionality, carefully read about it, but finally decided to use Ali cloud communication services, although simply call third-party interfaces, but there are some twists and turns in them, and now to share with you.

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------

      1. First use Ali cloud services, of course inevitably opened, registered accounts, and so on, you know, Alipay get a key, and then go through the official CAPE Ali cloud cloud communication services, which has a detailed process, not list them here.

      2. Introduction of library sdk, Download https://help.aliyun.com/document_detail/55359.html?spm=a2c4g.11186623.2.8.1d675777e3ClES ; course, there are ways to introduce maven, where I did not use because of the reasons the project management maven so not repeat them here.

     3. When the library sdk introduced, we can write a utility class, just a name.

/**
 * @ClassName:MessageSend
 * @Description:发送短信的工具类,阿里云第三方运用,需要申请账号,并申请模板
 * @author HuangXi
 * @date: 日期:2018年7月30日 时间:上午11:25:14
 */
public class MessageSend {
	static final String product = "Dysmsapi";
    //产品域名,开发者无需替换
    static final String domain = "dysmsapi.aliyuncs.com";

    // TODO 此处需要替换成开发者自己的AK(在阿里云访问控制台寻找)
    static final String accessKeyId = "***************";
    static final String accessKeySecret = "*******************";

    /**
     * 
     * @Description: 发短信
     *
     * @author HuangXi
     * @date: 日期:2018年7月30日 下午1:51:23
     * @return
     * @throws ClientException
     */
    public static SendSmsResponse sendSms(HSUumsBaseUser user,String content) 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();
        //必填:待发送手机号
        //因为本人把手机号存在了每个user对象中,固传入user对象来取
        String phone = user.getUserTel();
        request.setPhoneNumbers(phone);
        //必填:短信签名-可在短信控制台中找到
        request.setSignName("短信签名需要自己申请");
        //必填:短信模板-可在短信控制台中找到
        request.setTemplateCode("短信模板账号需要自己申请,如:SMS_8888888");
        //可选:模板中的变量替换JSON串,如模板内容为"尊敬的${name},您的任务为${content}"时,此处的值为
        request.setTemplateParam("{\"name\":\""+user.getUserName()+"\", \"content\":\""+content+"\"}");

        //选填-上行短信扩展码(无特殊需求用户请忽略此字段)
        //request.setSmsUpExtendCode("90997");

        //可选:outId为提供给业务方扩展字段,最终在短信回执消息中将此值带回给调用者
        //request.setOutId("yourOutId");

        //hint 此处可能会抛出异常,注意catch
        SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);

        return sendSmsResponse;
    }


    /**
     * 
     * @Description:查询短信发送详情
     *
     * @author HuangXi
     * @date: 日期:2018年7月30日 下午1:50:56
     * @param bizId
     * @return
     * @throws ClientException
     */
    public static QuerySendDetailsResponse querySendDetails(String bizId) 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();
        //必填-号码,有需要可以扩展为号码参数
        //一样可以扩展为号码,传入user对象等,可以在数据库建表把短信发送日志存储进去,本人因为
        //没有需求,固省略了该步骤
        request.setPhoneNumber("88888888888888");
        //可选-流水号
        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;
    }
    
  //查明细,可以根据发送的号码和id来添加日志,和上面方法一样,如无必要可以不使用
    /*if(response.getCode() != null && response.getCode().equals("OK")) {
        QuerySendDetailsResponse querySendDetailsResponse = MessageSend.querySendDetails(response.getBizId());
        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());
    }
    */
}

   4. When changing tools to write, you talk in business code can be invoked.

            try {
                    //发短信
                    SendSmsResponse response = MessageSend.sendSms(user,content);
                    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());
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

5. Of course, this is only one-way text messages sent by Ali cloud communication method also sent in bulk, the specific target is to change the method of text messaging, not go into details here, friends who are interested can go on their own to see Ali cloud api .

Published 27 original articles · won praise 1 · views 3657

Guess you like

Origin blog.csdn.net/qq_40111437/article/details/82685478