消息之短信(云梦网)

Posted 好奇新

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了消息之短信(云梦网)相关的知识,希望对你有一定的参考价值。

@

简介

短信通道是由中国移动、联通、电信等运营商直接提供的短信发送接口,实现与客户指定号码进行短信批量发送和自定义发送的目的

需要申请云梦网的测试账号 官方地址-新手指引:

[SDK接口文档:http://console.sms.monyun.cn:9963/developer_Center/index.html?htmlURL1=SDK&htmlURL2=SDKone)

依赖引入

梦网并没有提供线上的版本jar,需要下载下来引入

线上的版本有可能不是最新的,需要跟运营商获取最新版本的jar

        <dependency>
            <groupId>com.sms</groupId>
            <artifactId>SmsSdk</artifactId>
            <version>5.7</version>
        </dependency>

        <dependency>
            <groupId>com.sms</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>

        <dependency>
            <groupId>com.sms</groupId>
            <artifactId>gson</artifactId>
            <version>2.7</version>
        </dependency>

yml属性配置

#短信发送参数设定
#WBS接入版  生产账号
sms:
  userid: 
  password: 
  #营销账号
  shoppingUserid: 
  shoppingPassword: 
  # 运营商会给的 不同的确的通道不一样
  ipAddress1: 175.25.21.202:8901
  ipAddress2: 120.133.237.118:8901
  #短信开关
  enable: true 

配置类

@Component
@ConfigurationProperties(prefix="sms")
public class SmsConfig {

    /**
     * 用户名
     */
    public static String userid;
    /**
     * 账号
     */
    public static String password;
    /**
     *  主IP地址
     */
    public static String ipAddress1;
    /**
     *  备用IP地址
     */
    public static String ipAddress2;

    /**
     * 失败重试次数
     */
    public static int retryNum = 1;

    /**
     *  是否开启短信发送
     */
    public static Boolean enable;

    public void setUserid(String userid) {
        SmsConfig.userid = userid;
    }

    public void setPassword(String password) {
        SmsConfig.password = password;
    }

    public void setIpAddress1(String ipAddress1) {
        SmsConfig.ipAddress1 = ipAddress1;
    }

    public void setIpAddress2(String ipAddress2) {
        SmsConfig.ipAddress2 = ipAddress2;
    }

    public void setEnable(Boolean enable) {
        SmsConfig.enable = enable;
    }
}

工具类

@Component
public class SmsUtil {

    private static final Logger log = LoggerFactory.getLogger(SmsUtil.class);

    /**
     * 设置全局变量
     */
    static {
        // 获取全局参数单例对象 启用默认值
        GlobalParams globalParams = GlobalParams.getInstance();
        //设置下行内容的编码类型
        globalParams.setMsgMtEncode(ContentEncodeEnum.GBK);
    }

    /**
     * @description 个性化群发
     * @param message
     */
    public static int mixedSend(Message message) {
        //设置账号
        setAccountInfo();
        // 单操作 短链接
        SmsSendConn smsSendConn = new SmsSendConn(false);
        // 返回值
        int result = -310099;
        try {
            // 返回的流水号
            StringBuffer returnValue = new StringBuffer();

            // 发送短信
            result = smsSendConn.mixedSend(message, returnValue);
            // result为0:成功
            if (result == 0) {
                log.info("个性化群发提交成功!");
            }
            // result为非0:失败
            else {
                log.info("个性化群发提交失败,错误码:{}",result);
            }

        } catch (Exception e) {
            // 异常处理
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 个性化群发
     *
     * @param mobile  手机号多个用,隔开
     * @param content 短信内容
     * @return int
     */
    public static int mixedSend(String mobile, String content) {
        Message message = buildMessage(mobile, content);
        return mixedSend(message);
    }

    /**
     * @description 相同内容群发
     * @param message
     * @return
     */
    public static int batchSend(Message message) {
        //设置账号
        setAccountInfo();
        // 单操作 短链接
        SmsSendConn smsSendConn = new SmsSendConn(true);
        // 返回值
        int result = -310099;
        try {
            // 返回的流水号
            StringBuffer returnValue = new StringBuffer();
            // 发送短信
            if(SmsConfig.enable){
                result = smsSendConn.batchSend(message, returnValue);
            }
            // result为0:成功
            if (result == 0) {
                log.info("相同内容群发提交成功!");
                System.out.println(returnValue);
            }
            // result为非0:失败
            else {
                log.info("相同内容群发提交失败,错误码:{}",result);
            }

        } catch (Exception e) {
            // 异常处理
            e.printStackTrace();
        }
        return result;
    }

    /**
     * 相同内容群发
     *
     * @param mobile  手机号多个用,隔开
     * @param content 短信内容
     * @return int
     */
    public static int batchSend(String mobile, String content) {
        Message message = buildMessage(mobile, content);
        return batchSend(message);
    }

    /**
     * @description 单条信息的发送
     * @param message
     */
    public static int singleSend(Message message){
        setAccountInfo();
        // 单操作 短链接
        SmsSendConn smsSendConn = new SmsSendConn(false);

        // 返回的流水号
        StringBuffer returnValue = new StringBuffer();
        // 返回值
        int result = -310099;
        // 发送短信
        if(SmsConfig.enable){
            result = smsSendConn.singleSend(message, returnValue);
        }
        // result为0:成功
        if (result == 0) {
            log.info("单条发送提交成功!");
        }
        // result为非0:失败
        else {
            log.info("单条发送提交失败,错误码:{}", result);
        }
        return result;
    }

    /**
     * 单条信息的发送
     *
     * @param mobile  手机号多个用,隔开
     * @param content 短信内容
     * @return int
     */
    public static int singleSend(String mobile, String content) {
        Message message = buildMessage(mobile, content);
        return singleSend(message);
    }

    /**
     * @description 设置用户账号信息
     */
    public static void setAccountInfo() {
        // 返回值
        int result = -310007;
        try {
            // 设置用户账号信息
            result = ConfigManager.setAccountInfo(SmsConfig.userid, SmsConfig.password, 1,
                    SmsConfig.ipAddress1, SmsConfig.ipAddress2, null, null);
            // 判断返回结果,0设置成功,否则失败
            if (result == 0) {
                log.info("--->, 设置用户账号信息成功!");
            } else {
                log.info("设置用户账号信息失败,错误码:{}", result);
            }
        } catch (Exception e) {
            // 异常处理
            e.printStackTrace();
            log.info("设置用户账号信息异常!" );
        }
    }

    /**
     * 构建消息体
     *
     * @param mobile  手机号码
     * @param content 短信内容
     * @return {@link Message}
     */
    public static Message buildMessage(String mobile, String content) {
        // 参数类
        Message message = new Message();
        // 设置用户账号 指定用户账号发送,需要填写用户账号,不指定用户账号发送,无需填写用户账号
        message.setUserid(SmsConfig.userid);
        // 设置手机号码
        message.setMobile(mobile);
        // 设置内容
        message.setContent(content);
        // 设置扩展号
        message.setExno("");
        // 用户自定义流水编号
        message.setCustid("");
        // 自定义扩展数据
        message.setExdata("");
        // 业务类型
        message.setSvrtype("");
        return message;
    }

以上是关于消息之短信(云梦网)的主要内容,如果未能解决你的问题,请参考以下文章

android小知识点代码片段

无法在片段内查看接收短信

高并发之消息队列

并发之消息队列----基于AMQP实现的golang消息队列MaxQ

firebase 的短信代码不匹配

阿里大于发送短信(用户微服务--消息微服务)