1.4 API文档

优质
小牛编辑
132浏览
2023-12-01

API调用说明

1. 接口调用方法

  • 1.服务器访问ip白名单:商户告知小米移动服务器的ip地址
  • 2.参数加密和签名:为了避免数据被窃听/篡改/恶意调用,采用数据加密和验参的方式。所有的业务数据加密,生成签名,然后把加密后的数据和签名信息都放到requestData中。附件三中有对reqeustData生成方法的介绍和实例,可以参考。

2. 接口命名规则

3. 对接相关参数

  • 1.接口BaseUrl:https://exapi.10046.mi.com
  • 2.MerchantClientUtils.createRequestData()函数几个参数介绍
    • (1) servicePublicKey
    • (2) clientPrivateKey为商户自己的rsa的私钥,RSA KeySize为1024,签名算法为SHA1WithRSA
    • (3) AES算法trandformation为AES/ECB/PKCS5Padding (128)
    • (4) CHARSET统一采用utf-8

4. httpPost使用

  • 1.Content-Type为x-www-form-urlencoded格式,如下格式: post-form
  • 2.Content-Type为application-json格式,如下格式: post-form
  • 3.代码实例
//Java事例:发送http请求
public static String httpPost(String url, NameValuePair[] postData) {
    org.apache.commons.httpclient.HttpClient httpClient = new HttpClient();
    PostMethod postMethod = new PostMethod(url);
    postMethod.setRequestBody(postData);
    postMethod.getParams().setParameter(HttpMethodParams.HTTP_CONTENT_CHARSET, "UTF-8");
    try {
        int statusCode = httpClient.executeMethod(postMethod);
        if(statusCode != HttpStatus.SC_OK) {
            logger.error("Method failed: " + postMethod.getStatusLine());
        }
        byte[] responseBody = postMethod.getResponseBody();
        return new String(responseBody);
    } catch(Exception e) {
        logger.error("{}", e);
    }
    return "";
}
//JavaScript事例:发送http请求
var opt = {
  headers: {
    "Content-Type": 'application/x-www-form-urlencoded',
  },
  data:requestdata2
};
rest.post(url,opt)
    .on('complete', function(data, response) {
  // handle response
  console.log('response data -- '+JSON.stringify(data));

});

H5页面类

1. 号码激活页面

URL

http://preview.web.ext.10046.mi.com/v2/index

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
merchant_idstring必选商户id
phone_numberstring必选要激活的号码
timestamplong必选当前时间,单位毫秒

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

2. 实名资料重新提交页面

URL

http://preview.web.ext.10046.mi.com/v2/re_submit

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
merchant_idstring必选商户id
phone_numberstring必选要提交的号码
timestamplong必选当前时间,单位毫秒

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

3. 号码购买加油包页面

URL

https://product.10046.mi.com/boss/bop

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
merchant_idstring必选商户id
phone_numberstring必选要提交的号码
timestamplong必选当前时间,单位毫秒

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

4. 号码套餐续费页面

URL

https://product.10046.mi.com/boss/bbp

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
merchant_idstring必选商户id
phone_numberstring必选要提交的号码
timestamplong必选当前时间,单位毫秒

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

5. 号码流量页面

URL

https://product.10046.mi.com/boss/sj_detail

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
merchant_idstring必选商户id
phone_numberstring必选要提交的号码
timestamplong必选当前时间,单位毫秒

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

6. 支付充值页面

  • 待完善

实名认证API

1. 实名信息鉴权接口

URL


https://exapi.10046.mi.com/v1/check_identity

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
miidstring必选小米帐号
real_namestring必选真实姓名
cert_codestring必选证件号码

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

返回结果json示例

{
    "rtnCode": 0, // 0: 验证成功 , 1: 验证失败; rtnCode参见附件一
    "rtnMsg": "成功",
}

2. 查询实名认证结果接口

URL

https://exapi.10046.mi.com/v1/query_confirm

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
numberstring必选电话号码

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

返回结果json示例

{
    "rtnCode": 0, // 0: 验证成功 , 1: 验证失败; rtnCode参见附件一
    "rtnMsg": "成功",
    “result”: {
        "confirmed": 0,不需要实名确认(网厅或者客服,实名成功)  1,实名失败  2,从未实名(部分实名,完全没有实名过)
    }
}

3. 实名照片上传接口

URL

https://exapi.10046.mi.com/v1/upload_file_str

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
miidstring必选小米帐号
phone_numberstring必选号码
typeint必选文件类型:手持身份证照片:10身份证正面照片:11身份证反面照片:12
file_base64_strstring必选要上传的文件的base64字符串

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

返回结果json示例

{
    "rtnCode": 0, // 0: success , 1: fail; rtnCode参见附件一
    "rtnMsg": "上传成功",
    "data": "{
        "bucket":"identity",
        "object":"48aa9881-18f6-46f9-9faf-fd73da41bbf3",
        "source":"BOSS",
        "type":10
    }" //存储到fds中的bucket和fileName
}

4. 实名资料重新提交接口

URL

https://exapi.10046.mi.com/v1/re_submit_identity

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
miidstring必选小米帐号
phone_numberstring必选号码
real_namestring必选真实姓名
cert_codestring必选证件号码
photo_urls_jsonstring必选用户上传的照片地址,以jsonArray的方式提供

photo_urls_json示例

[
    {
        "bucket":"在fds中的bucketName",
        "object":"具体文件的objectName"
                "source":"BOSS",
                "type":10 //手持身份证照片:10,   身份证正面照片:11,    身份证反面照片:12
        },
        {
        "bucket":"在fds中的bucketName",
        "object":"具体文件的objectName"
                "source":"BOSS",
                "type":11 //手持身份证照片:10,   身份证正面照片:11,   身份证反面照片:12
        },
        {
        "bucket":"在fds中的bucketName",
        "object":"具体文件的objectName"
                "source":"BOSS",
                "type":12 //手持身份证照片:10,   身份证正面照片:11,   身份证反面照片:12
        },
]

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

返回结果json示例

{
    "rtnCode": 0, // 0: success , 1: fail;  rtnCode参见附件一
    "rtnMsg": "激活请求成功",
}

号码激活绑定API

1. 号码激活接口

URL

https://exapi.10046.mi.com/v1/activate

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
miidstring必选小米帐号
phone_numberstring必选号码
device_snstring有些厂商必选,有些可选设备sn
real_namestring有些厂商必选,有些可选真实姓名
cert_codestring有些厂商必选,有些可选证件号码
validate_timestamplong有些厂商必选,有些可选帐号生效时间
photo_urls_jsonstring有些厂商必选,有些可选用户上传的照片地址,以jsonArray的方式提供

photo_urls_json示例

[
    {
        "bucket":"在fds中的bucketName",
        "object":"具体文件的objectName"
                "source":"BOSS",
                "type":10 //手持身份证照片:10,   身份证正面照片:11,    身份证反面照片:12
        },
        {
        "bucket":"在fds中的bucketName",
        "object":"具体文件的objectName"
                "source":"BOSS",
                "type":11 //手持身份证照片:10,   身份证正面照片:11,   身份证反面照片:12
        },
        {
        "bucket":"在fds中的bucketName",
        "object":"具体文件的objectName"
                "source":"BOSS",
                "type":12 //手持身份证照片:10,   身份证正面照片:11,   身份证反面照片:12
        },
]

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

返回结果json示例

{
    "rtnCode": 0, // 0: success , 1: fail;  rtnCode参见附件一
    "rtnMsg": "激活请求成功",
}

2. 号码与设备绑定接口

描述

商户告知虚商sim卡与设备的绑定关系

URL

https://exapi.10046.mi.com/v1/bind_card_device

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
iccidstring必选sim卡iccid(sim卡的20位iccid)
device_snstring必选设备sn(设备唯一编码)

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

请求request_data中dataBody示例

{
    "log_id":"100001-201512112011471064231501",
    "data":[
      {
         "phone_number":"17090319999",
         "sn":"45645613123456456456"
      },
      {
         "phone_number":"17090319998",
         "sn":"45645613123456456455"
      }
    ]
}

返回结果json示例

{
    "rtnMsg": "提交成功",
    "rtnCode": 0,  //rtnCode参见附件一
    "log_id":"100001-201512112011471064231501"
}

短信API

1. 发送短信

描述

给移动物联网某个号码发送短信

URL

https://exapi.10046.mi.com/v1/iot_send_sms

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
timestamplong必选时间戳,单位毫秒
phone_numberstring必选号码
msgstring必选短信内容

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

返回结果参数 属性名| 类型|说明 ---|---|---|--- rtnCode |int|结果返回码 rtnMsg | string|结果描述 result |string|标识短信的唯一id,用来查询短信发送状态

返回结果json示例

{
    "rtnCode": 0, // 0: 成功 , 1: 失败; rtnCode参见附件一
    "rtnMsg": "成功",
    "result":"8192389128391839819" //该条短信唯一标识码uuid,用来查询这条短信的状态
}

2. 查询某次发送短信请求的状态

描述

查询某个号码发送短信请求的状态

URL

https://exapi.10046.mi.com/v1/iot_query_send_sms_status

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
uuidstring必选该条请求短信唯一标识码

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

返回结果参数 属性名| 类型|说明 ---|---|---|--- rtnCode |int|结果返回码 rtnMsg | string|结果描述 result |string|json串包含uuid和status

返回结果json示例

{
    "rtnCode": 0, // 0: 成功 , 1: 失败; rtnCode参见附件一
    "rtnMsg": "成功",
    "result":{
        "uuid":"9120391023901",//string
        "status":0      //int    (0, "初始值"),   (1, "发送失败"),  (2, "发送成功"),  
        (3, "接收失败"),   (4, "接受成功")   (5,"发送中")
            }
}

3. 短信回执通知接口

描述

该接口封装在通知接口中 notification_type=0x3016

查询API

1. 查询某个号码信息接口(具体支持哪些跟号码来源有关)

描述

获取某个号码的相关数据:余额,当月账单,来电显示状态,开关机状态,激活状态,套餐消耗情况等

URL

https://exapi.10046.mi.com/v1/query

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
phone_number_typeint必选类型。具体参见下表
phone_numberstring必选要查询的号码
int_valueint可选当phone_number_type为0或2时有效,指定哪个月的,0表示当前月,1表示上个月,2表示上上月。只能支持0,1,2
string_valuestring可选对应的string取值,可能是json

phone_number_type枚举值

phone_number_type:0
说明:             all(不包括:实名照片审核,话单信息)
int_value:        无
string_value:     无

phone_number_type:1
说明:             余额
int_value:        无
string_value:     无

phone_number_type:2
说明:             当月消费账单
int_value:        0表示当前月,1表示上个月,2表示上上月;只能支持0,1,2
string_value:     无

phone_number_type:3
说明:             来电显示
int_value:        无
string_value:     无

phone_number_type:4
说明:             帐号
int_value:        无
string_value:     无

phone_number_type:5
说明:             实名审核状态
int_value:        无
string_value:     无

phone_number_type:6
说明:             号码绑定的设备sn
int_value:        无
string_value:     无

phone_number_type:7
说明:             当月套餐消费详情
int_value:        无
string_value:     无

phone_number_type:8
说明:             某个月份的通话详单
int_value:        无
string_value:     {
                        "start_time":1422453362000, //long,起始时间,毫秒
                        "end_time":1432310412042, //long,截止时间,毫秒
                        "page":1, //int, 页码,从1开始
                        "limit":50 //int, 每页的数量
                        }

phone_number_type:9
说明:             某个月份的短信详单
int_value:        无
string_value:     {
                        "start_time":1422453362000, //long,起始时间,毫秒
                        "end_time":1432310412042, //long,截止时间,毫秒
                        "page":1, //int, 页码,从1开始
                        "limit":50 //int, 每页的数量
                        }

phone_number_type:10
说明:             某个月份的流量详单
int_value:        无
string_value:     {
                        "start_time":1422453362000, //long,起始时间,毫秒
                        "end_time":1432310412042, //long,截止时间,毫秒
                        "page":1, //int, 页码,从1开始
                        "limit":50 //int, 每页的数量
                        }

phone_number_type:11
说明:             查询充值记录
int_value:        无
string_value:     {
                        "start_time":1422453362000, //long,起始时间,毫秒
                        "end_time":1432310412042, //long,截止时间,毫秒
                        "page":1, //int, 页码,从1开始
                        "limit":50 //int, 每页的数量
                        }

phone_number_type:12
说明:             当月流量消耗
int_value:        无
string_value:     无

phone_number_type:13
说明:             查询生效的套餐订购信息
int_value:        无
string_value:     无

phone_number_type:14
说明:             查询号码gprs开关状态
int_value:        无
string_value:     无

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

请求request_data中dataBody示例

{
    "log_id":"100001-201512112011471064231501",
    "phone_number_type":1,
    "phone_number":"17090319999"
}

返回结果json示例

{ 
    "rtnMsg": "获取成功", 
    "rtnCode": 0,   //rtnCode参见附件一
    "log_id":"100001-201512112011471064231501",
    "result": {  //json格式
        "phone_number":"17090319999",
         "balance":5999000; //单位1000*分
    }
}

==不同的phone_number_type对应不同的result==

接口名称:         所有
phone_number_type:0    
result:           {    
    "phone_number":"17090319999",
    "balance":5999000; //单位1000*分
    "month":201511, // string, 月份yyyyMM
    "consumption_total":1000000,//long, 当月总费用,单位1000*分
    "consumption_calls":100000,//long,当月通话费用,单位1000*分
    "consumption_traffic":100000,//long,当月流量费用,单位1000*分
    "consumption_sms":100000,//long,当月流量费用,单位1000*分
    "consumption_callerid":100000,//long,来电显示费用,单位1000*分
    "consumption_other":100000,//long,其他
    "callerid":0; //0表示已开启,1表示已关闭
    "account_status":0; //0表示未激活,10表示已开机,20表示已停机,25表示已半停机,30表示已销户,11表示开户请求中
}

接口名称:         余额
phone_number_type:1    
result:           {    
    "phone_number":"17090319999",
    "balance":5999000; //单位1000*分
    "total_charge":110000   //总充值金额,不包括预充的,单位1000*分
} 

接口名称:         指定月份消费账单
phone_number_type:2    
result:           {
   "phone_number":"17090319999",
   "month":201511, // string, 月份yyyyMM
   "consumption_total":1000000,//long, 当月总费用,单位1000*分
   "consumption_calls":100000,//long,当月通话费用
   "consumption_traffic":100000,//long,当月流量费用
   "consumption_sms":100000,//long,当月流量费用
   "consumption_callerid":100000,//long,来电显示费用
   "consumption_other":100000,//long,其他
}

接口名称:         来电显示状态
phone_number_type:3    
result:           {    
    "phone_number":"17090319999",
    "callerid":0; //0表示已开启,1表示已关闭
}

接口名称:         号码状态
phone_number_type:4    
result:           {    
    "phone_number":"17090319999",
    "account_status":0; //0表示未激活,10表示已开机,20表示已停机,25表示已半停机,30表示已销户,11表示开户请求中
}
其他帐号状态见附件二

接口名称:         实名审核状态
phone_number_type:5    
result:           {    
    "phone_number":"17090319999",
    "identity_status":0; //0表示审核通过,1表示审核失败,10表示审核中,-1表示还未提交资料,-2表示解绑用户,需要重新实名审核
    "msg":"审核结果描述";  //如果是审核失败,表示审核结果描述
}

接口名称:         号码绑定的设备sn
phone_number_type:6    
result:           {    
    "phone_number":"17090319999",
    "device_sn":"12203/00004567"; //已经绑定的设备sn, 如果sn为空则没有该字段
}

接口名称:         当月套餐消费详情
phone_number_type:7    
result:           {    
    "phone_number":"17090319999",
    "data": {  //激活后才有该字段
        "mno_code":CMCC_GD //string 该号码所属运营商编码(CU 中国联通;CT 中国电信;CMCC 中国移动;CMCC_GD 广东移动;)
        "miid" : "123456",  // string, 用户小米帐号;
        "banlance":1000000, // long, 当前余额, 分*1000; 当banlance当前余额为负, consumption_rate设定为1;
        "current_month_consumption":1000000, // long, 当月消费, 单位:分*1000
        "current_calls_consumption":5000, // int, 当月通话时间,单位:分钟
        "current_calls_consumption_exclude_package":2, // int, 当月已用包外通话时间,单位:分钟
        "current_sms_consumption":12, // int, 当月已用短信数量
        "current_sms_consumption_exclude_package":2, // int, 当月已用包外短信数量
        "current_traffic_consumption":1000000, // long, 当月已用流量(包括包内的), 单位:Byte
        "current_traffic_consumption_exclude_package":10000, // long, 当月已消耗包外流量, 单位:Byte
        "packages":[{
              "package_code":"P202",  //string   流量包代码
              "package_name":"4G流量包",   //string  流量包名称
              "type":1,  //int  类型:1表示通话;2表示短信;3表示流量
              "package_total":1000000,    //long   type对应的该类型套餐总量  单位,如果是流量:Byte,通话:分钟;短信:个数
              "package_consumption":600000   //long   type对应的该类型套餐消耗量    单位,如果是流量:Byte,通话:分钟;短信:个数
            }
        ]
    }
}

接口名称:         某个月份的通话详单
phone_number_type:8    
result:           {    
     "cols" [
         "number", // string, 对方号码
         "date", // string, 格式为 YYYYMMDDHHMMSS
         "duration", // string, 通话时长, 单位为秒,精确到秒
         "type", // string, 通话类型, "00"|"03"呼出, "01"呼入, "02"呼叫转移
         "fees", // int, 通话费用, 分*1000
     ],

     "phone_number" : "17001088888",  // string, 用户手机号码;
     "total" : 20545,   // long, 此次查询所包含的全部的记录数;
     "page" : 5,  // int 此次的页签索引;从1开始;
     "limit" : 50, // int, 每页显示的数量
     "data": [
         ["13520145265", "2015-04-30 10:30:20", "90", "00", 300000],
         ......
     ]
}

接口名称:         某个月份的短信详单
phone_number_type:9    
result:           {    
     "cols" [
         "number", // string, 对方号码
         "date", // string, 时间, 格式为 YYYYMMDDHHMMSS
         "type", // string, 类型, "10"发送的短信, "11"接收的短信
         "fees", // int, 费用, 分*1000
     ],

     "phone_number" : "17001088888",  // string, 用户手机号码;
     "total" : 20545,   // long, 此次查询所包含的全部的记录数;
     "page" : 5,  // int 此次的页签索引;从1开始;
     "limit" : 50, // int, 每页显示的数量
     "data": [
         ["13520145265", "2015-04-30 10:30:20", "10", 300000],
         ......
     ]
}

接口名称:         某个月份的流量详单
phone_number_type:10    
result:           {    
     "cols" [
         "start_time", // string, 时间 格式 YYYYmmddHHMMSS
         "end_time", // string, 时间 格式 YYYYmmddHHMMSS
         "flow", // int, 流量, byte
         "fees", // int, 费用, 分*1000
     ],

     "phone_number" : "17001088888",  // string, 用户手机号码;
     "total" : 20545,   // long, 此次查询所包含的全部的记录数;
     "page" : 5,  // int 此次的页签索引;从1开始;
     "limit" : 50, // int, 每页显示的数量
     "data": [
         ["2015-04-30 10:30:20", "2015-04-30 10:40:10", 11000, 10000],
         ......
     ]
}

接口名称:         查询充值记录
phone_number_type:11    
result:           {    
        "cols" [
            "date", // long, 充值日期
            "amount",  // long, 充值金额, 分*1000
            "balance",  // long, 充值前余额
            "channel",  // int, 充值渠道, 1小米黄页, 2来自电商预付, 3差额赔付, 4销户退款,6物联网号码回收余额置为0,7物联网设备退货退款,8物联网设备以旧换新余额转移, 9预付款-虚卡, 10虚卡充值, 11优惠券-小米网, 12优惠券-运营后台, 13优惠券-虚商活动, 21小米黄页-代扣
            "deputy", // int, 1代表副帐户充值, 0代表主账号充值
        ],  // 充值历史,要显示的列

        "phone_number" : "17001088888",  // string, 用户手机号码;
        "total" : 15,   // long, 此次查询所包含的全部的记录数;
        "page" : 5,  // int 此次的页签索引;从1开始;
        "limit" : 50, // int, 每页显示的数量
        "data": [
            [1432246938874, 1000000, 500000, 1, 0],
            [1432246938874, 1000000, 500000, 2, 1],
            [1432246938874, 1000000, 500000, 1, 0],
            ......
        ]  // 符合limit个数的数据;
}

接口名称:         当月流量消耗
phone_number_type:12    
result:           {    
        "phone_number" : "1064838947530",  // string, 用户号码;
        "cdr_last_time", //long, 话单截止时间,单位毫秒
        "current_traffic_consumption",  //long 当月流量消耗,单位byte
        "current_traffic_package_total", //long 当月套餐总流量,单位byte
}

接口名称:         查询当前生效的套餐信息
phone_number_type:13    
result:           {    
        "cols" [
            "package_code", // string, 套餐编码
            "package_name",  // string, 套餐名称
            "package_start_time",  // long, 套餐生效开始时间,单位毫秒
            "package_end_time",  // long, 套餐失效时间,单位毫秒
            "package_type", // string, 套餐类型,"base"表示是基础包,"optional"表示加油包
        ], 

        "phone_number" : "17001088888",  // string, 用户手机号码;
        "total" : 15,   // long, 此次查询所包含的全部的记录数;
        "data": [
            ["PS102", "4G流量包", 1459419601412, 1922284800000, "base"],
            ["PS202", "1G加油包", 1459419601412, 1922284800000, "optional"],
             ......
         ]  // 符合limit个数的数据;
}

接口名称:         查询号码gprs开关状态
phone_number_type:14    
result:           {    
        "phone_number" : "1064838947530",  // string, 用户号码;
        "gprs_status":0// int gprs状态 1-关闭,0-开启
}

2. 根据iccid或imsi查询对应的号码接口

描述

根据iccid或imsi查询隶属对应商户的对应的号码

URL

https://exapi.10046.mi.com/v1/get_phone_number

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
typeint必选0表示根据imsi查号码,1表示根据iccid查号码
inputstring必选imsi或iccid

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

请求示例

{
    "log_id":"100001-201512112011471064231501",
    "type":1,
    "input":"1111111111111111"
}

返回结果json示例

{ 
    "rtnMsg": "获取成功", 
    "rtnCode": 0,   //rtnCode参见附件一
    "log_id":"100001-201512112011471064231501",
    "result": {  //json格式
        "phone_number":"17090319999"
    }
}

变更API

1. 提交业务变更请求接口(具体支持哪些跟号码来源有关)

描述

提交业务变更请求

URL

https://exapi.10046.mi.com/v1/change_service

http请求方式

POST

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
request_datastring必选打开网页时带的request_data参数

request_data构造方法:

request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))

request_data中dataBody参数:

属性名类型是否必选说明
log_idstring必选日志ID
phone_number_typeint必选业务类型。具体参见下表
phone_numberstring必选要查询的号码
int_valueint必选具体参见下表

phone_number_type, int_value枚举值

操作:             停开机              
phone_number_type:1                  
int_value:        0表示开机,1表示停机               
备注:   无          

操作:             开流量/关闭流量     
phone_number_type:2                 
int_value:        0表示开启流量,1表示关闭流量            
备注:    无         

操作:             来电显示            
phone_number_type:3                  
int_value:        0表示开启来电显示,1表示关闭来电显示   
备注:     无        

操作:             销户                
phone_number_type:4                  
int_value:     无                                      
备注:      无

log_id生成方法:

格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法

请求request_data中dataBody示例

{
    "log_id":"100001-201512112011471064231501",
    "phone_number_type":3,  //来电显示
    "phone_number":"17090319999",
    "int_value":0   //0表示开启;1表示关闭
}

返回结果json示例

{
    "rtnMsg": "提交成功",
    "rtnCode": 0,  //rtnCode参见附件一
    "log_id":"100001-201512112011471064231501"
}

通知API

消息通知接口

描述

当小米移动中分配给商户的号码发生一些预先定义的事件时,小米调用该接口通知商户服务器端。事件包括:充值成功通知;欠费通知;号码状态变更通知;业务变更通知等

商户提供的接口命名规则

  • 1.商户提供的接口由两部分组成:merchant_base_url + 接口名称,不同商户有不同的merchant_base_url,同一个商户的merchant_base_url是相同的。
  • 2.接口名称由虚商统一定义,为notify

提供方

商户服务器

调用方

小米

请求参数

属性名类型是否可选说明
merchant_idstring必选商户id
log_idstring必选日志ID
notification_typeint必选请求的数据类型,十进制数字。具体参见下表
phone_numberstring必选号码
int_valueint可选对应的int取值
string_valuestring可选对应的string取值
extra_datastring可选附加其他信息,value为json格式,具体根据不同notification_type而不同

枚举说明

实名照片审核通知
notification_type:  0x0001
int_value含义:  0表示审核通过,1表示审核失败
string_value含义:   审核失败的文字描述
extra_data:
{
    "action": //int 失败后的操作:0不做任何事情,1停机成功;2停机失败
}

号码状态变更通知
notification_type:0x0004
int_value含义:    变更后的状态,具体状态参见号码状态表
string_value含义: 无
extra_data:
 //记录号码状态变更的原因,比如停机原因
 {
    "reason":1, //reason取值含义具体参见附件2表
    "reason_desc":"审核失败停机"
 }

来电显示通知
notification_type:0x0008
int_value含义:    0表示开启来电显示;1表示关闭来电显示
string_value含义: 无
extra_data:       无

充值成功通知
notification_type:    0x0010
int_value含义:        具体的充值金额,单位为1000*分
string_value含义: 无
extra_data:           
{
    "balance":100323
}

余额通知
notification_type:0x0020
int_value含义:    当前余额,单位为1000*分
string_value含义: 无
extra_data:       无

退货号码回收通知
notification_type:0x1001
int_value含义:    无
string_value含义: 无
extra_data:           
{
    "phone_number":1709xxxx
}

以旧换新通知
notification_type:0x1004
int_value含义:    无
string_value含义: 无
extra_data:           
{
    "old_phone_number":1709xxxx,
    "new_phone_number":1709xxxx
}

停开流量通知
notification_type:0x2004
int_value含义:    0表示开启流量;1表示关闭流量
string_value含义: 无
extra_data:           
//记录停开流量的原因
{
    "reason":1,//reason取值含义具体参见附件6表
    "reason_desc":"审核失败停流量"
}

基础包订购通知
notification_type:0x3001
int_value含义:    无
string_value含义: 无
extra_data:           
{
    "phone_number":1709xxxx,
    "order_date":1479699732000 //long, 订购时间,单位毫秒
    "package_code":"P201", //套餐编码
    "traffic_package":4294967296, //套餐包流量大小
    "package_start_time":1445657752786, //套餐生效开始时间
    "package_end_time":1509465600000, //套餐截止时间
}

加油包购买通知
notification_type:0x3004
int_value含义:    无
string_value含义: 无
extra_data:           
{
    "phone_number":1709xxxx,
    "order_date":1479699732000 //long, 订购时间,单位毫秒
    "package_code":"P201", //套餐编码
    "traffic_package":4294967296, //套餐包流量大小
    "package_start_time":1445657752786, //套餐生效开始时间
    "package_end_time":1509465600000, //套餐截止时间
}

设备IMEI变更通知
notification_type:0x3008
int_value含义:    无
string_value含义: 无
extra_data:           
{
    "phone_number":1709xxxx,
    "old_imei":“8934234234234234” //String, 老的设备IMEI,如果为“”代表从0到1的情况
    "new_imei":"8934234234234235", //String,新的设备IMEI
    "timestamp":1509465600000, //long,推送时间,单位毫秒
}

流量实时提醒通知
notification_type:0x3010
int_value含义:    无
string_value含义: 无
extra_data:           
{
    "phone_number":1709xxxx,
    "amount":“30” //String, 量级 如30M
    "date":"1488334320000", //long,移动侧传过来的日期,单位毫秒
    "timestamp":1509465600000, //long,小米侧推送时间,单位毫秒
}

设备IMEI查询通知
notification_type:0x3012
int_value含义:    无
string_value含义: 无
extra_data:           
{
    "phone_number":1709xxxx,
    "imei_change":{"day_cycle":"20170309","imeis":"86408903000608,86408903000673"}, //json,变更时间和 imei记录
    "timestamp":1509465600000, //long,小米侧推送时间,单位毫秒
}

设备FirstImei查询通知
notification_type:0x3014
int_value含义:
string_value含义: 无
extra_data:           
{
    "phone_number":1709xxxx,
    "first_imei":“8640890300015978” //String,首次使用的imei
    "first_imei_date":"20160101"}, //String,first_imei时间
    "timestamp":1509465600000, //long,小米侧推送时间,单位毫秒
}

短信回执通知    
notification_type:0x3016
int_value含义:0表示发送到短信中心回执,1表示设备接收短信情况回执,2表示上行短信回执
string_value含义: 无
extra_data:  
{
 "msisdn":"18918198191989",//string,电话号码
"iccid":"898989898989898",//string,sim卡卡号
"content": "hahahahahha",//string,int_value=2时是短信内容,int_value=0时是DELIVRD
"timestamp": 15646454600000,//long,短信回执时间戳 毫秒
"transactionId":"",//string,唯一标识短信编码
}

响应参数

参数名称说明
rtnCode0:成功接收通知,-1:失败
rtnMsg通知说明

响应示例

{
    "rtnMsg": "成功接收通知",
    "rtnCode": 0
}

附件

附件一 响应参数rtnCode介绍

编码(rtnCode)描述(rtnMsg)
-1内部其他错误
0成功
1失败
2参数错误
10未知号码
11未知请求类型
12不支持
13时间戳无效
100未知商户ID
1000验参错误

附件二 号码状态表

号码状态状态取值
未激活,未开户0
已开机10
已停机20
已半停机25
已销户30
未激活 -> 开机11
开机-> 停机21
停机 -> 开机22
半停机->停机23
开机->半停机26
半停机->开机27
开机->销户31
停机->销户32
半停机->销户33
2/3G转4G业务在途12
号码回收状态400

附件三 请求小米移动接口事例代码及reqeustData生成方法(java版,javascript版)

需要引入的jar包:boss-common-utils-0.0.1-SNAPSHOT.jar(单独线下给)

String logId = UUID.randomUUID().toString();
JSONObject body = new JSONObject();
body.put("log_id", logId);
body.put("phone_number_type", 0);
body.put("phone_number", "17090310650");
System.out.println(body.toString());
String merchantId = "100000";
String requestData = MerchantClientUtils.createRequestData(body.toString(), merchantId, serverPublicKey, clientPrivateKey);
HashMap<String, String> paramsMap = new HashMap<String, String>();
paramsMap.put("merchant_id", merchantId);
paramsMap.put("requestData", requestData);
System.out.println("requestJson: " + paramsMap.toString());
String resultJson = NormalHttpUtils.httpPost("http://a.com/v1/query", NormalHttpUtils.getNameValuePairArray(paramsMap));
System.out.println("resultJson: " + resultJson);

ServerPublicKey = "";

附件四 批量导入号码文件格式

  1. utf-8编码格式的纯文本文件
  2. 文件中第一行固定内容为:1
  3. 文件中从第二行每行代表一个号码,每行格式为:iccid,imsi,phoneNumber。例如:898602B0011690000015,460090449803292,1064805464056
  4. 例如:以下是2个号码的相关数据
    1
    898602B0011690000015,460090449803292,1064805464056
    898602B0011690000016,460090449803293,1064805464057
    

附件五 批量导入号码与设备sn关系文件格式

  1. utf-8编码格式的纯文本文件
  2. 文件中第一行固定内容为:2
  3. 文件中从第二行每行代表一个设备的数据,每行格式为:iccid,设备sn。例如:89860115842300001318,SW10215AC00024
  4. 例如:以下是3个设备的相关数据
2
89860115842300001318,SW10215AC00024
89860115842300001748,SW10215AC00023
89860115842300001193,SW10215AC00014

附件六 停开机,停开流量原因表

reasonreason_desc备注
-1未知
100停开机失败后状态回退
停机/停流量101实名失败48小时后停机
102实名审核3次失败停机
103套餐使用完毕,超停
104商户API调用
105从物流联网管理平台停机
106未提交实名超过48小时
开机/开流量110上月超停,月初重新开机
111超停后购买加油包开机
112实名审核通过后开机
113商户API调用
114从物流联网管理平台开机