技术方案

SpringBoot 集成阿里短信服务

2018-08-16  本文已影响498人  s_j_x

项目背景

     最近做了一个车辆实时调度系统,要通过短信告知派车人派车信息,项目是使用SpringBoot开发所以借此文章分享一下集成过程。

    阿里云短信服务地址: https://dysms.console.aliyun.com/dysms.htm?spm=5176.2020520115.aliyun_sidebar.aliyun_sidebar_dysms.730579d6Df2AFX#/overview

阿里短信官方api(java版) https://help.aliyun.com/document_detail/55284.html?spm=a2c4g.11174283.4.4.ynz4a6

关于如何开通短信服务,如何申请短信模板比较简单这里就不做介绍了。

开发之前先要获取一下信息比如下图的accessKeyId,accessKeySecret,endpoint 

添加Maven依赖

<dependency>                                 

<groupId>com.aliyun.mns</groupId>

<artifactId>aliyun-sdk-mns</artifactId>

<version>1.1.8.4</version>

</dependency>

<dependency>

<groupId>com.aliyun</groupId>

<artifactId>liyun-java-sdk-core</artifactId>

<version>2.4.2</version>

</dependency>

yml 配置

短信内容对应的实体类

import lombok.Data;

/**

* 短信消息内容

*

* @author sjx

*/

@Data

public class AlIMsgModelVo {

Stringname;

    Stringdetail;

    Stringcar;

    Stringdriver;

}

不知道 @Data 的请百度  lombok 的使用

新建测试类

@RunWith(SpringRunner.class)

@SpringBootTest

@Slf4j

@Data

public class AlYunMsgTest {

    @Value("${alMsg.product}")

    private String product;

    @Value("${alMsg.domain}")

    private String domain;      //dyalMsgapi.aliyuncs.com

    @Value("${alMsg.accessKeySecret}")

    private String accessKeySecret;

    @Value("${alMsg.accessKeyId}")

    private String accessKeyId;

    @Value("${alMsg.endpoint}")

    private String endpoint;    //短信API产品名称(短信产品名固定,无需修改)

    @Test

    public void sendMsg() {

        System.out.println(endpoint);

        AlIMsgModelVo alIMsgModelVo = new AlIMsgModelVo();

        alIMsgModelVo.setName("张凯");

        alIMsgModelVo.setCar("豫ND5475");

        alIMsgModelVo.setDetail("已经派车成功");

        alIMsgModelVo.setDriver("李帅");

        sendMsgByAliYun("接收者的手机号",alIMsgModelVo,"你的模板id");

    }

    public  void sendMsgByAliYun(String phone, AlIMsgModelVo alIMsg, String template) {

        /**

        * Step 1. 获取主题引用

        */

        CloudAccount account = new CloudAccount(accessKeyId, accessKeySecret, endpoint);

        MNSClient client = account.getMNSClient();

        CloudTopic topic = client.getTopicRef("sms.topic-cn-beijing");

        /**

        * Step 2. 设置SMS消息体(必须)

        *

        * 注:目前暂时不支持消息内容为空,需要指定消息内容,不为空即可。

        */

        RawTopicMessage msg = new RawTopicMessage();

        msg.setMessageBody("sms-message");

        /**

        * Step 3. 生成SMS消息属性

        */

        MessageAttributes messageAttributes = new MessageAttributes();

        BatchSmsAttributes batchSmsAttributes = new BatchSmsAttributes();

        // 3.1 设置发送短信的签名(SMSSignName)

        batchSmsAttributes.setFreeSignName("你的模板签名");

        // 3.2 设置发送短信使用的模板(SMSTempateCode)

        batchSmsAttributes.setTemplateCode(template);

        // 3.3 设置发送短信所使用的模板中参数对应的值(在短信模板中定义的,没有可以不用设置)

        BatchSmsAttributes.SmsReceiverParams smsReceiverParams = new BatchSmsAttributes.SmsReceiverParams();

        smsReceiverParams.setParam("name", alIMsg.getName());

        smsReceiverParams.setParam("detail", alIMsg.getDetail());

        smsReceiverParams.setParam("car", alIMsg.getCar());

        smsReceiverParams.setParam("driver", alIMsg.getDriver());

        // 3.4 增加接收短信的号码

        batchSmsAttributes.addSmsReceiver(phone, smsReceiverParams);

        messageAttributes.setBatchSmsAttributes(batchSmsAttributes);

        try {

            /**

            * Step 4. 发布SMS消息

            */

            TopicMessage ret = topic.publishMessage(msg, messageAttributes);

            System.out.println("MessageId: " + ret.getMessageId());

            System.out.println("MessageMD5: " + ret.getMessageBodyMD5());

        } catch (ServiceException se) {

            System.out.println(se.getErrorCode() + se.getRequestId());

            System.out.println(se.getMessage());

            se.printStackTrace();

        } catch (Exception e) {

            e.printStackTrace();

        }

        client.close();

    }

}

结果

上一篇下一篇

猜你喜欢

热点阅读