短信平台(电信)

通信方式

       采用http1.1通信方式,数据以post方式提交

       http 头设置:application/json

签名

       采用MD5加密方式, 源字符串采用字段拼接方式

       签名中appSecret是平台分配密码

       签名方法:

       如:String sign=md5(param1param2param3…paramN)

发送接口

地址: http://ip:port/api/sms/air/send

描述:   客户平台==>大业务平台

1. 请求方式post; http头设置application/json; 字符集UTF-8

       2. http响应数据为json格式

请求参数:

字段

名称

类型

说明

appKey

账户名

String(32)

统一分配

timestamp

时间戳

long

毫秒值

自UTC时间1970-1-1起的毫秒值

mobile

用户号码

String(11,11999)

多个提交逗号分隔;

一次最多1000个号码

content

内容长度

String(402)

短消息内容长度,67*6条

spNumber

扩展号码

String(10)

扩展长号码

sendTime

定时时间

String(0,14)

yyyyMMddHHmmss

定时发送时间,

默认为空值

reportUrl

报告回调地址

String(100)

状态报告回调的URL地址

默认为空

若使用查询接口(接口6)方式,为空值

moUrl

上行地址

String(100)

用户上行URL地址

默认空

attach

附加值字段

String(100)

附加数据,

客户根据自身业务逻辑添加

默认为空值

sign

数字签名

String(32)

sign=MD5(appKey+timestamp+mobile+content+spNumber+sendTime+appSecret)

顺序以此为准

其中appSecret为平台分配账户时提供

响应参数:

字段

名称

类型

说明

status

状态码

int(4)

 见附表

  1. 成功;

其他失败

message

消息描述

String(32)

taskId

任务ID

long(8)

数据样例:

请求json:

{

    "appKey": "10001",

    "timestamp": "1546589422955",

    "mobile": "13800138001",

    "content": "【签名测试】这是一条测试短信",

    "spNumber": "234",

    "sendTime": "",

"reportUrl": "",

“moUrl”:””,

    "attach": "",

    "sign": "4b38b34fb70fcc4c49e180fbd5a9854b"

}

响应Json:

{

    "message": "提交成功",

    "taskId": 6468846578735812608,

    "status": 1

}

或失败

{

    "message": "提交数据错误",

    "status": 2

}

  /**
     * 发送短信
     *
     * @param smsModule   模块名称
     * @param phone       手机号
     * @param receiveName 接收人姓名
     * @param message     发送内容
     * @return
     */
    public ActionResult sendSms(String smsModule, String phone, String receiveName, String message) {
        Request request = null;
        ActionResult actionResult = ActionResult.fail("发送短信失败");
        LogSmsMessageVo logSmsMessageVo = new LogSmsMessageVo();
        String status = "1";
        try {
                //平台提供的appKey 
             appKey = x.getDictValue();
            //平台提供的appSecret 
             appSecret = x.getDictValue();
               //平台提供的发送短信url
             sendUrl = x.getDictValue();
            
        } catch (Exception e) {
            log.error("查询发送短信参数异常,异常信息" + e);
        }
        
        Response resp = null;
        String taskId = "";
        String sendStat = "";
        try {
            request = Request.newHttpRequestBuilder().uri(sendUrl).timeout(5000).charset("utf-8").method(Request.POST)
                    .contentType(Request.ContentType.JSON).build();
            //1. 构建数据包对象
            SendSmsEntity sendEntity = this.buildSendEntity(phone, message);
            //2. 转化对象为json字符串数据
            String data = JSONObject.toJSONString(sendEntity);
            //3. 字符串url编码,防止特殊字符被客户端强行改变,譬如+会被浏览器或者其他客户端变更为空格
            String encodeData = URLEncoder.encode(data, "UTF-8");
            //4. 发送
            resp = request.send(sendUrl, encodeData);
            log.info("发送短信,手机号:" + phone + ",发送内容:" + message + ",返回结果:" + resp.content());
            JSONObject jsonObject = JSONObject.parseObject(resp.content());
            if (ObjectUtils.isNotEmpty(jsonObject)) {
                actionResult.setMsg(jsonObject.get("message") + "");
                actionResult.setData(jsonObject.get("message") + "");
            }
            //解析发送结果
            if (200 == resp.status()) {
                if ("1".equals(jsonObject.get("status") + "")) {
                    log.info("发送短信成功");
                    status = "0";
                    sendStat = "2";
                    taskId = jsonObject.get("taskId") + "";
                    actionResult.setCode(200);
                } else {
                    //数据提交失败,发送必然失败
                    sendStat = "0";
                    log.info("发送短信失败,失败原因" + jsonObject.get("message"));
                }
            } else {
                if (resp.content() != null) {
                    taskId = jsonObject.get("taskId") + "";
                    log.info("发送短信返回失败,返回内容" + resp.content());
                } else {
                    log.info("发送短信失败,返回响应内容为空");
                }
                sendStat = "0";
            }
        } catch (Exception e) {
            log.error("发送短信异常,异常信息" + e.getMessage());
        } finally {
            request.release();
        }
        
        return actionResult;
    }

查询报告接口

地址: http://ip:port/api/sms/air/report

描述:客户平台 ==> 大业务平台

  1. 查询当前账户套餐余量
  2. 客户通过接口调用主动查询方式,获取数据,
  3. 如实现【回调报告接口2】可不实现该接口。
  4. 请求数据 JSONObject
  5. 响应数据 JSONObject
  6. 每次接口调用都是获得最新的数据,旧数据不再缓存。
  7. 请求:

    字段

    名称

    类型

    说明

    appKey

    接入账户

    String(32)

    平台分配

    sign

    签名

    String(32)

    md5(appKey+ appSecret)

    appSecret为平台分配接入账户的密钥

    数据响应:

    字段

    名称

    类型

    说明

    status

    状态码

    int(4)

     1 – 提交成功;其他-失败

    message

    错误描述

    String(32)

     错误描述

    data

    数据字段

    JSONArray

     报告数据放入此字段中

    data内容描述:

    字段

    名称

    类型

    说明

    id

    数据包标识

    String(20)

    固定值:report

    taskId

    任务ID

    long(8)

    任务ID+用户号码=唯一性

    batchNo

    批次序号

    int

    默认1,

    当提交的为长短信时,该字段匹配内容序号;如一条短信分隔为3条,该字段范围1,2,3

    mobile

    用户号码

    String(20)

     用户号码

    stat

    状态码

    int(4)

     1 – 成功;其他-失败

    statMsg

    状态描述

    String(32)

     状态描述

    attach

    附加值字段

    数据样例:

    请求:

    {

        "appKey": "90001",

        "sign": "2cff25eaa14b0f5c54a4f56e26e7c517"

    }

    响应:

    {

        "data": [

        {

            "batchNo": 1,

            "stat": 1,

            "statMsg": "成功",

            "mobile": "13800138000",

            "id": "report",

            "attach": "",

            "taskId": 6479258452121862144

        },

        {

            "batchNo": 1,

            "stat": 1,

            "statMsg": "成功",

            "mobile": "13800138000",

            "id": "report",

            "attach": "",

            "taskId": 6479266612358397952

        }],

        "message": "提交成功",

        "status": 1

    }

回调报告接口

描述:大业务平台 ==> 客户平台

  1. 平台根据send接口reportUrl字段设定的URL地址,提交报告数据给客户
  2. 请求数据JSONArray
  3. 响应数据 JSONObject

请求接口:

字段

名称

类型

说明

id

数据包标识

String(20)

固定值:report

taskId

任务ID

long(8)

任务ID+用户号码=唯一性

batchNo

批次序号

int

默认1,

当提交的为长短信时,该字段匹配内容序号;如一条短信分隔为3条,该字段范围1,2,3

mobile

用户号码

String(20)

 用户号码

stat

状态码

int(4)

 1 – 成功;其他-失败

statMsg

状态描述

String(32)

 状态描述

attach

附加值字段

String(100)

 请求时携带客户数据字段

响应:

字段

名称

类型

说明

status

状态码

int(4)

 1 – 成功接收;其他-失败

失败尝试3次发送,超过3次放弃

数据样例:

请求:

[

    {

        "batchNo": 1,

        "stat": 1,

        "statMsg": "成功",

        "mobile": "13800138000",

        "id": "report",

        "attach": "",

        "taskId": 6479258452121862144

    },

    {

        "batchNo": 1,

        "stat": 1,

        "statMsg": "成功",

        "mobile": "13800138000",

        "id": "report",

        "attach": "",

        "taskId": 6479266612358397952

    }]

响应:

{

       "status": 1, //状态成功

}

你可能感兴趣的:(java,java,spring,网络,http,后端)