目录 (Table of Contents)
API调用说明
1. 接口调用方法
- 1.服务器访问ip白名单:商户告知小米移动服务器的ip地址
- 2.参数加密和签名:为了避免数据被窃听/篡改/恶意调用,采用数据加密和验参的方式。所有的业务数据加密,生成签名,然后把加密后的数据和签名信息都放到requestData中。附件三中有对reqeustData生成方法的介绍和实例,可以参考。
2. 接口命名规则
- 1.接口格式:http://域名/v1/接口名称,型如:http://a.com/v1/change_service
- 2.接口名称命名规则:字母小写,单词之间用下划线分割,型如:change_service
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格式,如下格式:
- 2.Content-Type为application-json格式,如下格式:
- 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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
merchant_id | string | 必选 | 商户id |
phone_number | string | 必选 | 要激活的号码 |
timestamp | long | 必选 | 当前时间,单位毫秒 |
log_id生成方法:
格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法
2. 实名资料重新提交页面
URL
http://preview.web.ext.10046.mi.com/v2/re_submit
请求参数
属性名 | 类型 | 是否可选 | 说明 |
---|---|---|---|
merchant_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
merchant_id | string | 必选 | 商户id |
phone_number | string | 必选 | 要提交的号码 |
timestamp | long | 必选 | 当前时间,单位毫秒 |
log_id生成方法:
格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法
3. 号码购买加油包页面
URL
https://product.10046.mi.com/boss/bop
请求参数
属性名 | 类型 | 是否可选 | 说明 |
---|---|---|---|
merchant_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
merchant_id | string | 必选 | 商户id |
phone_number | string | 必选 | 要提交的号码 |
timestamp | long | 必选 | 当前时间,单位毫秒 |
log_id生成方法:
格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法
4. 号码套餐续费页面
URL
https://product.10046.mi.com/boss/bbp
请求参数
属性名 | 类型 | 是否可选 | 说明 |
---|---|---|---|
merchant_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
merchant_id | string | 必选 | 商户id |
phone_number | string | 必选 | 要提交的号码 |
timestamp | long | 必选 | 当前时间,单位毫秒 |
log_id生成方法:
格式为merchant-yyyyMMddHHMMSS-9位数字,型如:100001-201512112011471064231501,生成方法参见jar包中的MerchantClientUtils.getLogId()方法
5. 号码流量页面
URL
https://product.10046.mi.com/boss/sj_detail
请求参数
属性名 | 类型 | 是否可选 | 说明 |
---|---|---|---|
merchant_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
merchant_id | string | 必选 | 商户id |
phone_number | string | 必选 | 要提交的号码 |
timestamp | long | 必选 | 当前时间,单位毫秒 |
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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
miid | string | 必选 | 小米帐号 |
real_name | string | 必选 | 真实姓名 |
cert_code | string | 必选 | 证件号码 |
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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
number | string | 必选 | 电话号码 |
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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
miid | string | 必选 | 小米帐号 |
phone_number | string | 必选 | 号码 |
type | int | 必选 | 文件类型:手持身份证照片:10身份证正面照片:11身份证反面照片:12 |
file_base64_str | string | 必选 | 要上传的文件的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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
miid | string | 必选 | 小米帐号 |
phone_number | string | 必选 | 号码 |
real_name | string | 必选 | 真实姓名 |
cert_code | string | 必选 | 证件号码 |
photo_urls_json | string | 必选 | 用户上传的照片地址,以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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
miid | string | 必选 | 小米帐号 |
phone_number | string | 必选 | 号码 |
device_sn | string | 有些厂商必选,有些可选 | 设备sn |
real_name | string | 有些厂商必选,有些可选 | 真实姓名 |
cert_code | string | 有些厂商必选,有些可选 | 证件号码 |
validate_timestamp | long | 有些厂商必选,有些可选 | 帐号生效时间 |
photo_urls_json | string | 有些厂商必选,有些可选 | 用户上传的照片地址,以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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
iccid | string | 必选 | sim卡iccid(sim卡的20位iccid) |
device_sn | string | 必选 | 设备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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
timestamp | long | 必选 | 时间戳,单位毫秒 |
phone_number | string | 必选 | 号码 |
msg | string | 必选 | 短信内容 |
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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
uuid | string | 必选 | 该条请求短信唯一标识码 |
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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
phone_number_type | int | 必选 | 类型。具体参见下表 |
phone_number | string | 必选 | 要查询的号码 |
int_value | int | 可选 | 当phone_number_type为0或2时有效,指定哪个月的,0表示当前月,1表示上个月,2表示上上月。只能支持0,1,2 |
string_value | string | 可选 | 对应的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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
type | int | 必选 | 0表示根据imsi查号码,1表示根据iccid查号码 |
input | string | 必选 | 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_id | string | 必选 | 商户id |
request_data | string | 必选 | 打开网页时带的request_data参数 |
request_data构造方法:
request_data=URLEncoder.encode(Base64(MerchantClientUtils.createRequestData(dataBody, merchantId, serverPublicKey, clientPrivateKey)))
request_data中dataBody参数:
属性名 | 类型 | 是否必选 | 说明 |
---|---|---|---|
log_id | string | 必选 | 日志ID |
phone_number_type | int | 必选 | 业务类型。具体参见下表 |
phone_number | string | 必选 | 要查询的号码 |
int_value | int | 必选 | 具体参见下表 |
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_id | string | 必选 | 商户id |
log_id | string | 必选 | 日志ID |
notification_type | int | 必选 | 请求的数据类型,十进制数字。具体参见下表 |
phone_number | string | 必选 | 号码 |
int_value | int | 可选 | 对应的int取值 |
string_value | string | 可选 | 对应的string取值 |
extra_data | string | 可选 | 附加其他信息,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,唯一标识短信编码
}
响应参数
参数名称 | 说明 |
---|---|
rtnCode | 0:成功接收通知,-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 = "";
附件四 批量导入号码文件格式
- utf-8编码格式的纯文本文件
- 文件中第一行固定内容为:1
- 文件中从第二行每行代表一个号码,每行格式为:iccid,imsi,phoneNumber。例如:898602B0011690000015,460090449803292,1064805464056
- 例如:以下是2个号码的相关数据
1 898602B0011690000015,460090449803292,1064805464056 898602B0011690000016,460090449803293,1064805464057
附件五 批量导入号码与设备sn关系文件格式
- utf-8编码格式的纯文本文件
- 文件中第一行固定内容为:2
- 文件中从第二行每行代表一个设备的数据,每行格式为:iccid,设备sn。例如:89860115842300001318,SW10215AC00024
- 例如:以下是3个设备的相关数据
2
89860115842300001318,SW10215AC00024
89860115842300001748,SW10215AC00023
89860115842300001193,SW10215AC00014
附件六 停开机,停开流量原因表
reason | reason_desc | 备注 | |
---|---|---|---|
-1 | 未知 | ||
100 | 停开机失败后状态回退 | ||
停机/停流量 | 101 | 实名失败48小时后停机 | |
102 | 实名审核3次失败停机 | ||
103 | 套餐使用完毕,超停 | ||
104 | 商户API调用 | ||
105 | 从物流联网管理平台停机 | ||
106 | 未提交实名超过48小时 | ||
开机/开流量 | 110 | 上月超停,月初重新开机 | |
111 | 超停后购买加油包开机 | ||
112 | 实名审核通过后开机 | ||
113 | 商户API调用 | ||
114 | 从物流联网管理平台开机 |