美文网首页技术方案
SpringBoot 集成阿里短信服务

SpringBoot 集成阿里短信服务

作者: s_j_x | 来源:发表于2018-08-16 10:16 被阅读498次

    项目背景

         最近做了一个车辆实时调度系统,要通过短信告知派车人派车信息,项目是使用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();

        }

    }

    结果

    相关文章

      网友评论

        本文标题:SpringBoot 集成阿里短信服务

        本文链接:https://www.haomeiwen.com/subject/poqnbftx.html