A1接口采用HTTP协议,发送响应的数据格式采用JSON格式。
根据业务消息的不同,AC作为服务器端,提供不同的业务地址和端口。
| 业务类型 | 端口地址 |
|---|---|
| 互联网BSS业务(acbss) | 具体待定 |
| 互联网SA业务(acsa) | 具体待定 |
消息由消息头和消息体组成,以JSON格式,包含在HTTP载荷中。
消息头包括如下字段:
| 消息结构 | 内容 | Json对象名称 | 说明 | 举例 | |||||
|---|---|---|---|---|---|---|---|---|---|
| 消息头 | 版本号 | ver | 消息请求方设定的接口协议的版本。消息响应方原值返回。 | “ver”: “1.0” | |||||
| 消息ID | msgid | 消息请求发送方设定的唯一消息标识。具体由发送方设定。重发的消息id必须保持不变。消息响应方原值返回。 | “msgid”: “4736219853” | ||||||
| 时间戳 | ts | 以YYYYMMDDhhmmssNNN的十进制格式表示,由消息请求发送方在发送消息时设定。其中,NNN表示3位毫秒数。消息响应方原值返回。 | “ts”: “20140402101356320” | ||||||
| 业务类型 | service | 对于AC系统的业务类型定义如下:
|
“service”: “acbss” | ||||||
| 消息类型 | msgtype | 消息类型与业务类型相关。见“消息类型与业务类型”。消息响应方返回对应请求的消息响应类型。 | “msgtype”: “subreq” | ||||||
| 签名 | sid | 对消息头和消息体的数字签名。参考后面算法 | “sid”:“0” | ||||||
| 保留字段 | rsvd | 扩展保留字段。消息响应方原值返回。 | “rsvd”: “0” | ||||||
| 应用标识 | appkey | 可选。第三方应用的AppKey。AXB业务时必须设置。 | “appkey”:“kuaidadi” | ||||||
| 消息体 | 业务消息内容 | 内容与业务消息类型相关。见后续业务交互中的消息定义。 | 采用扁平结构方式,取消嵌套结构。 |
| 序号 | 消息类型 | 消息说明 | 产品类别 | 交互实体 |
|---|---|---|---|---|
| 1 | Subreq | 订购请求 | AX | BSS |
| 2 | Subrsp | 订购响应 | AX | |
| 3 | Unsubreq | 退订请求 | AX | |
| 4 | Unsubrsp | 退订响应 | AX | |
| 5 | Subqryreq | 订购查询 | AX | |
| 6 | Subqryrsp | 订购响应 | AX | |
| 7 | Chgprtmsreq | 真实号码换号请求 | AX | |
| 8 | Chgprtmsrsp | 真实号码换号响应 | AX | |
| 9 | Axbsubreq | 订购请求 | AXB | |
| 10 | Axbsubrsp | 订购响应 | AXB | |
| 11 | Axbunsubreq | 退订请求 | AXB | |
| 12 | Axbunsubrsp | 退订响应 | AXB | |
| 13 | axbsubqryreq | 订购查询 | AXB | |
| 14 | axbsubqryrsp | 订购响应 | AXB | |
| 15 | axbsubupdreq | AXB订购更新请求 | AXB | |
| 16 | axbsubupdrsp | AXB订购更新请求 | AXB | |
| 17 | vcallreq | 在线语音主叫请求 | AX | SA |
| 18 | vcallrsp | 在线语音主叫响应 | AX | |
| 19 | smsreq | 在线短信主叫请求 | AX | |
| 20 | smsrsp | 在线短信主叫响应 | AX | |
| 21 | switchtimereq | 用户定时开关机设置请求 | AX | |
| 22 | switchtimersp | 用户定时开关机设置响应 | AX | |
| 23 | switchqryreq | 用户开关机查询请求 | AX | |
| 24 | switchqryrsp | 用户开关机查询响应 | AX |
互联网BSS主要处理的互联网业务请求和响应类型如下:
IP发送业务消息到AC A1接口。 AC BSS进行内部处理,将结果反馈给IP系统。
消息交互如下:
对于一个唯一的订购关系,AC平台采用如下字段来标识:
订购请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|---|
| 版本号 | Ver | |||
| 消息ID | Msgid | |||
| 时间戳 | Ts | |||
| 业务类型 | service | Acbss | ||
| 消息类型 | msgtype | subreq | ||
| 签名 | Sid | |||
| 应用标识 | appkey | 第三方应用的AppKey | ||
| 保留字段 | Rsvd | |||
| 消息体 | 被保护的真实号码 | Prtms | ||
| 隐私号码 | acms | AC动态分配或者指定 | ||
| 订购时间 | Subts | 格式为YYYYMMDDhhmmss。时间采用北京时间,24小时制。 | “subts”:“20140728145921” | |
| 订购类型 | producttype | 现阶段支持的类型:
|
“producttype”:“0” | |
| 姓名 | name | 必选 | “name”:“张三” | |
| 证件类型 | cardtype | 必选 | “cardtype”:“” | |
| 身份证号码 | cardno | 必选 | “cardno”:“” |
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|---|
| 版本号 | ver | |||
| 消息ID | msgid | |||
| 时间戳 | ts | |||
| 业务类型 | service | acbss | ||
| 消息类型 | msgtype | subrsp | ||
| 签名 | sid | |||
| 应用标识 | appkey | 第三方应用的AppKey。 | ||
| 保留字段 | rsvd | |||
| 消息体 | 返回码 | result | 采用类似http的状态码风格。
|
|
| 订购关系标识 | subid | |||
| 隐私号码 | acms |
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|---|
| 版本号 | ver | |||
| 消息ID | msgid | |||
| 时间戳 | ts | |||
| 业务类型 | service acbss | |||
| 消息类型 | msgtype unsubreq | |||
| 签名 | sid | |||
| 应用标识 | appkey | 第三方应用的AppKey。 | ||
| 保留字段 | rsvd | |||
| 消息体 | 被保护的真实号码 | prtms | ||
| 隐私号码 | acms | |||
| 退订时间 | unsubts | 格式为YYYYMMDDhhmmss。时间采用北京时间,24小时制。 |
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acbss | |
| 消息类型 | msgtype | unsubrsp | |
| 签名 | sid | ||
| 应用标识 | appkey | 第三方应用的AppKey。 | |
| 保留字段 | rsvd | ||
| 消息体 | 返回码 | result | 参见“返回码定义” |
| 订购关系标识 | subid |
订购查询请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acbss | |
| 消息类型 | msgtype | subqryreq | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 消息体 | 订购关系标识 | subid | 方式一 |
| 被保护的真实号码 | prtms | 方式二 | |
| 隐私号码 | acms |
订购查询响应
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acbss | |
| 消息类型 | msgtype | subqryrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 消息体 | 返回码 | result | 参见“返回码定义” |
| 订购关系标识 | subid | ||
| 被保护的真实号码 | prtms | ||
| 隐私号码 | acms | ||
| 订购时间 | subts | ||
| 订购产品类型 | producttype | ||
| 姓名 | name | ||
| 证件类型 | cardtype | ||
| 身份证号码 | cardno | “cardno”:“” |
真实号码换号请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|---|
| 版本号 | ver | |||
| 消息ID | msgid | |||
| 时间戳 | ts | |||
| 业务类型 | service | acbss | ||
| 消息类型 | msgtype | chgprtmsreq | ||
| 签名 | sid | |||
| 保留字段 | rsvd | |||
| 消息体 | 订购关系标识 | subid | 与订购请求的subid一致,AC返回的sub_id | |
| 隐私号码 | acms | |||
| 当前真实号码 | oldprtms | |||
| 新的真实号码 | newprtms | |||
| 换号时间 | chgts | 格式为YYYYMMDDhhmmss。时间采用北京时间,24小时制。 |
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acbss | |
| 消息类型 | msgtype | chgprtmsrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 消息体 | 返回码 | result | 参见“返回码定义” |
| 订购关系标识 | subid |
互联网SA主要处理的互联网业务请求和响应类型如下:
在线语音主叫
IP业务系统发起请求,AC接收后,进行内部处理,响应处理结果,后续启动业务流程。
在线语音主叫请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acsa | |
| 消息类型 | msgtype | vcallreq | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 消息体 | 隐私号码 | acms | |
| 被叫号码 | calledms | 被叫号码 |
在线语音主叫响应
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acsa | |
| 消息类型 | msgtype | vcallrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 消息体 | 返回码 | result | 参见“返回码定义” |
用户定时开关机设置请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|---|
| 版本号 | ver | |||
| 消息ID | msgid | |||
| 时间戳 | ts | |||
| 业务类型 | service | acsa | ||
| 消息类型 | msgtype | switchtimerreq | ||
| 签名 | sid | |||
| 保留字段 | rsvd | |||
| 消息体 | 隐私号码 | acms | ||
| 定时关机时间点 | closetime | 可选。24小时格式表示hhmm如果closetime出现,但是值为空,则表示取消相应设置。即“closetime”:“”表示取消设置。 | “closetime”:“14:30” | |
| 定时开机时间点 | opentime | 可选。24小时格式表示hhmm如果opentime出现,但是值为空,则表示取消相应设置。即“opentime”:“”表示取消设置。 | “opentime”:“17:30” |
用户定时开关机设置响应:
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acsa | |
| 消息类型 | msgtype | switchtimerrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 消息体 | 返回码 | result | 参见“返回码定义” |
用户开关机查询请求:
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acsa | |
| 消息类型 | msgtype | switchqryreq | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 消息体 | 隐私号码 | acms |
用户开关机查询响应
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|---|
| 版本号 | ver | |||
| 消息ID | msgid | |||
| 时间戳 | ts | |||
| 业务类型 | service | acsa | ||
| 消息类型 | msgtype | switchqryreq | ||
| 签名 | sid | |||
| 保留字段 | rsvd | |||
| 消息体 | 返回码 | result | 参见“返回码定义” | |
| 当前开关机状态 | switch | 0:开机 1:关机 | “switch”: “1” | |
| 定时关机时间点 | closetime | 24小时格式表示hhmm如果closetime出现,但是值为空,则表示无相应设置。即“closetime”:“”表示无定时关机设置。 | “closetime”:“14:30” | |
| 定时开机时间点 | opentime | 24小时格式表示hhmm如果opentime出现,但是值为空,则表示无相应设置。即“opentime”:“”表示无定时开机设置。 | “opentime”:“17:30” |
推送机制
采用json over http协议
协议:
| #协议参数 | 参数 | 注释 |
| 'v': '1.0', | #版本号 | |
| 'method' : 'add_call_release', | #方法 | |
| 'app_key': 'ac', | #调用方appkey | |
| 'sign': '0BE1A00DD73A0A3D6037657B7C3C9DF3', | #签名 | |
| 'timestamp': '2016-06-22 14:03:21', | #时间戳 | |
| #业务参数 | ||
| 'phone_no': '13333300000', | #手机号码 | |
| 'secret_no': '8618788006777', | #隐私号码 | |
| 'call_type':'0', | #呼叫类型 | |
| 'peer_no': '13344400000', | #对端号码 | |
| 'call_id': '0d01000000080000000000000000', | #通话唯一标识 | |
| 'call_time' : '2016-06-22 14:03:20', | #通话开始时间 | |
| 'release_time' : '2016-06-22 14:03:20', | #通话结束时间 | |
| 'release_dir' : '1', | #释放方向 | |
| 'release_cause' : '16', | #释放原因 | |
| 'ringing_time' : '2016-06-22 14:03:20', | #振铃开始时间 |
推送请求:
| API名称 | method = add_call_release | 接入方标识 | app_key | 标识接入方 | ||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 呼叫类型 | call_type | AC业务: 0:DTMF方式通话主叫 1:通话被叫 2:短信发送 3:短信接收 128:PS方式通话主叫 | ||||||||||||||||||||||||||||||||||||||||||||||||||
| 真实号码 | phone_no | 真实号码为A | ||||||||||||||||||||||||||||||||||||||||||||||||||
| 隐私号码 | secret_no | 隐私号码为X | ||||||||||||||||||||||||||||||||||||||||||||||||||
| 对端号码 | peer_no | 对端号码为B或者其它填充0 | ||||||||||||||||||||||||||||||||||||||||||||||||||
| 振铃开始时间 | ringing_time | 格式: yyyy-MM-dd HH:mm:ss | ||||||||||||||||||||||||||||||||||||||||||||||||||
| 通话开始时间 | call_time | 格式: yyyy-MM-dd HH:mm:ss | ||||||||||||||||||||||||||||||||||||||||||||||||||
| 通话结束时间 | release_time | 格式: yyyy-MM-dd HH:mm:ss | ||||||||||||||||||||||||||||||||||||||||||||||||||
| 通话标识 | call_id | 业务参考号 | ||||||||||||||||||||||||||||||||||||||||||||||||||
| 释放方向 | release_dir | 1表示主叫, 2表示被叫, 0表示平台释放 | ||||||||||||||||||||||||||||||||||||||||||||||||||
| 释放原因 | release_cause |
|
推送响应:
| 接收状态 | is_success | ture:成功, false:失败 |
|---|
错误码:
| 错误码 | 错误信息 | 建议 |
|---|---|---|
| 400 | UnSupport Method: | method参数有误 |
| 403 | Erro AppKey | appkey错误 |
| 403 | Error Sign | 签名错误 |
| 202 | 具体的Exception | 请求接收,处理错误 |
请求示例:
http://172.27.111.69/msg?v=1.0&method=add_call_release×tamp=2014-08-18 %2016:59:11&app_key=abc&sign=BA9854BED1A2986B061E2713F403C752&phone_no=1860 0000000&secret_no=17000000000&call_type=1&peer_no=13900000000&call_id=1919& ringing_time=2014-08-18%2016:59:10&call_time=2014-08-18%2016:59:11&release_ time=2014-08-18%2016:59:21&release_dir=1&release_cause=17
需要说明一下,接口调用中的appkey和secret都由服务端来分配。
响应示例:
| 成功:{"response":{"is_success":true}} | 失败:{"response":{"is_success":false,"err_code":"400","err_msg":"呼叫类型不 能为空!"}} |
|---|
ACBSS主要处理的AXB业务请求和响应类型如下:
对于一个唯一的订购关系,AXB业务场景下BSS采用如下字段来标识:
AC系统需要确保“订购关系标识”是唯一的。
AXB中的A,X,B形成唯一三元组。
订购请求:
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | Ver | ||
| 消息ID | Msgid | ||
| 时间戳 | Ts | ||
| 业务类型 | service | acbss | |
| 消息类型 | msgtype | axbsubreq | |
| 签名 | Sid | ||
| 保留字段 | Rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。 AXB业务时必须设置,不能为空。 | “appkey”:“GZAXB” |
| 消息体 | 真实号码 | prtms | 对应“产品类别”定义的AXB业务(简称AXB业务,以下同)中的号码A 注:以真实号码为主叫,AXB业务中的 A为主叫,X为隐私号码,B为对端号码。以下同。 |
| 隐私号码 | acms | 对应AXB业务中的号码X,动态分配 | |
| 其他号码 | otherms | AXB业务时可设置。对应AXB业务中的号码B。AC小号场景不支持设置。 | “otherms”:“8613005711234” |
| 订购时间 | subts | 格式为YYYYMMDDhhmmss。时间采用北京时间,24小时制。 | “subts” :“20140728145921” |
| 退订时间 | unsubts | 格式为YYYYMMDDhhmmss。时间采用北京时间,24小时制 .这个时间大于订购时间,如果时间到达则执行退订。可选 | “unsubts” :“20140728145921” |
| 自动退订方式 | unsubmethod | 可选 0:振铃退订 1:挂机退订 如果退订时间不为空,则根据退订时间退订的优先级最高。 | “unsubmethod”:“1” |
| 订购类型 | producttype | 现阶段支持的类型: 0:包年 1:包季 2:包月 3:按次 4:体验 | “producttype”:“0” |
| 产品类别 | productcat | 本字段在AXB业务中必须设置。 0: 保留。实际分配给AX(AC小号) 11:AXB 12: 语音验证业务 13:AXYB业务的XYB | “productcat”:“11” |
| 录音控制 | callrecording | 可选。是否开通录音功能。在本字段不出现的情况下,默认0(不开通录音功能)。 0:不开通录音功能 1:开通录音功能 | “callrecording”:“0” |
| 姓名 | Name | 必选 | “name”:“张三” |
| 证件类型 | cardtype | 必选 | “cardtype”:“” |
| 身份证号码 | cardno | 必选 | “cardno”:“” |
订购响应:
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acbss | |
| 消息类型 | msgtype | axbsubrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。可以为空,或者不出现。 | |
| 消息体 | 返回码 | result | 采用类似http的状态码风格。 参考3.2 |
| 订购关系标识 | subid | ||
| 隐私号码 | acms |
退订请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | Acbss | |
| 消息类型 | msgtype | Axbunsubreq | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。可以为空,或者不出现。 | |
| 消息体 | 订购关系标识 | subid | |
| 真实号码 | prtms | 对应AXB业务中的号码A | |
| 隐私号码 | acms | 对应AXB业务中的号码X | |
| 其他号码 | otherms | AXB业务时必须设置。对应AXB业务中的号码B | |
| 产品类别 | productcat | AXB业务时必须设置。11:AXB12: 语音验证业务13:AXYB业务的XYB | 退订时间 | unsubts | 格式为YYYYMMDDhhmmss。时间采用北京时间,24小时制。 |
退订响应:
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acbss | |
| 消息类型 | msgtype | axbunsubrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的appKey。可以为空,或者不出现。 | |
| 消息体 | 返回码 | result | 参见3.2“返回码定义” |
| 订购关系标识 | subid |
订购查询请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acbss | |
| 消息类型 | msgtype | axbsubqryreq | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。可以为空,或者不出现。 | |
| 消息体 | 订购关系标识 | subid | 方式一 |
| 被保护的真实号码 | prtms | 方式二 注:otherms在AXB业务时可设置。对应AXB业务中的号码B。 | |
| 隐私号码 | acms | ||
| 其他号码 | otherms |
订购查询响应
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | acbss | |
| 消息类型 | msgtype | axbsubqryrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。可以为空,或者不出现。 | |
| 消息体 | 返回码 | result | 参见.3.2“返回码定义” |
| 订购关系标识 | subid | ||
| 被保护的真实号码 | prtms | ||
| 隐私号码 | acms | ||
| 其他号码 | otherms | ||
| 订购时间 | subts | ||
| 订购产品类型 | producttype | ||
| 产品类别 | productcat | ||
| 录音控制 | callrecording | 可选。是否开通录音功能。在本字段不出现的情况下,
默认0(不开通录音功能)。 0:不开通录音功能 1:开通录音功能 |
“callrecording”:“0” |
| 姓名 | name | ||
| 证件类型 | cardtype | ||
| 身份证号码 | cardno | “cardno”:“” |
订购更新请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | Acbss | |
| 消息类型 | msgtype | Axbsubupdreq | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。AXB业务时必须设置,不能为空。 | “appkey”:“kuaidadi” |
| 消息体 | 订购关系标识 | subid | 订购更新针对的现有订购关系的标识。必须与现有订购关系的内容一致。 |
| 真实号码 | prtms | 订购更新针对的现有订购关系的A号码。必须与现有订购关系的内容一致。 | |
| 隐私号码 | acms | 订购更新针对的现有订购关系的X号码。必须与现有订购关系的内容一致。 | |
| 其他号码 | otherms | 变更后的新号码B。 | “otherms”:“8613005711234” |
| 更新时间 | subts | 格式为YYYYMMDDhhmmss。时间采用北京时间,24小时制。 | “subts”:“20140728145921” |
| 产品类别 | productcat | 本字段在AXB业务中必须设置为11。AX业务不支持。0:保留。实际分配给AX(AC小号)11:AXB | “productcat” :“11” |
订购更新响应
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | Acbss | |
| 消息类型 | msgtype | Axbsubupdreq | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。可以为空,或者不出现。 | |
| 消息体 | 返回码 | result | 采用类似http的状态码风格。参考返回码定义。 |
| 订购关系标识 | subid |
外呼AXB转接配置设置请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | Acbss | |
| 消息类型 | msgtype | Axbsubupdreq | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。可以为空,或者不出现。 | |
| 消息体 | 隐私号码 | acms | X号码 |
| 转接号码 | transferms | 转接号码 | |
| 转接号码设置放音编码 | transfervoicecode | 设置转接号码的放音编码 |
外呼AXB转接配置设置响应
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | Acbss | |
| 消息类型 | msgtype | outaxbtransfersetrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。可以为空,或者不出现。 | |
| 消息体 | 返回码 | result | 参见3.2“返回码定义” |
外呼AXB转接配置删除请求
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | Acbss | |
| 消息类型 | msgtype | outaxbtransfersetrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。可以为空,或者不出现。 | |
| 消息体 | 隐私号码 | acms | X号码 |
外呼AXB转接配置删除响应
| 消息头 | 内容 | JSON对象名称 | 说明 | 举例 |
|---|---|---|---|
| 版本号 | ver | ||
| 消息ID | msgid | ||
| 时间戳 | ts | ||
| 业务类型 | service | Acbss | |
| 消息类型 | msgtype | outaxbtransfersetrsp | |
| 签名 | sid | ||
| 保留字段 | rsvd | ||
| 应用标识 | appkey | 第三方应用的AppKey。可以为空,或者不出现。 | |
| 消息体 | 返回码 | result | 参见3.2“返回码定义” |
IP系统应该检查响应消息中的“返回码”。如果结果不是成功,则IP系统需要针对不同返回码进行处理。
2XX 成功类返回码
| 返回码 | 描述 | 定义 |
|---|---|---|
| 200 | 成功 | 请求报文成功被处理 |
| 其他 | 待定义 |
4XX 客户端错误类返回码
| 返回码 | 描述 | 定义 |
|---|---|---|
| 400 | 请求报文语法错误 | 请求报文所携带的字段,不符合接口定义。比如producttype的值不在定义范围内。AC系统需要检查字段的有效取值。 |
| 401 | 认证未通过 | 请求的来源或者请求的签名未通过校验。 |
| 402 | 隐私号码已经使用 | 请求中要求绑定的隐私号码已经被分配给其他用户。 |
| 403 | 订购关系不存在 | 系统提交的请求中提供的“订购关系标识”,在互联网系统中不存在。 |
| 404 | 绑定数据不一致 | 请求中提供的“订购关系标识”在AC系统中查询获得的“真实号码”和“隐私号码”绑定关系,与请求中提供的“真实号码”与“隐私号码”不一致。 |
| 429 | 请求过多 | AC系统在一定时间内提交了过多的请求。AC系统在访问某些特定服务接口时,可能会出现该错误。 |
| 其他 | 待定义 |
5XX 服务端错误类返回码
| 返回码 | 描述 | 定义 |
|---|---|---|
| 501 | 业务处理超时 | 互联网系统内部处理引起的超时。AC系统可以尝试重新提交请求。 |
| 502 | 服务暂时不可用 | 互联网系统当前不可用,可能是因为系统负载过重,或者暂时停机。 |
| 503 | 服务接口被禁止 | 互联网系统已经关闭相关服务。后续对于该服务的请求是被禁止的。 |
| 其他 | 待定义 |
public static function sign($params)
{
unset($params['sid']);
unset($params['sign']);
//按照key进行排序
ksort($params);
$signParams = [];
foreach ($params as $key => $val) {
$signParams[] = $key . $val;
}
$signParams = self::APP_SECRET . implode('', $signParams);
$sign = strtoupper(md5($signParams));
return $sign;
}
本文档提供了USSD(彩印)平台业务相关的API,提供接口的相关说明,以指导相关人员进行业务接入。
号外号USSD平台我们简称HUP(Haowaihao USSD Platform)平台,前端客户我们简称CP(Customer Platform)
接口采用HTTP协议,发送响应的数据格式采用JSON格式。
采用数字签名模式进行报文传输
生成数字签名算法如下:
说明:
实例:
msg =
{ 'appkey': 'appkey',
'ts': '1471857427',
'ms': '13810326774',
'tid': '1',
'nonce': '?c3^4#5UT~s_HQ>eCzpU',
'sign':'',
'argv': ['号外号','中秋节']
}
参与数字签名的字符串为,(appkey=appkey, appsecret=appid):data:appkey=appkey,argv=['号外号','中秋节'],ms=13810326774,nonce=C>}I#_^TraMabWX%_8Nt,tid=1,ts=1471857427appid
生成包含签名的最终报文如下:
{'nonce': 'C>}I#_^TraMabWX%_8Nt',
'ts': 1471857427,
'ms': '13810326774',
'appkey': 'appkey',
'argv': ['号外号', '中秋节'],
'tid': '1',
'sign': 'ZMd3hXIG+DBV0siBqHE9VGDyShyGFeyY6bWCVlmCbbg='
}
注:appkey 和appsecret 是由号外号USSD平台统一分配的。
post方式
Accept :application/json;charset=UTF-8
Content-Type:application/json;charset=UTF-8
| 响应码 | 描述 | 说明 |
|---|---|---|
| 00000000 | Success | 成功 |
| 10000001 | System Error | 系统错误 |
| 20000001 | URI is Unknown | URI错误 |
| 20000002 | There is no appkey | 无APPKEY |
| 20000003 | APP not allow to use this api | APP无权调用此API |
| 20000004 | API resource not enough | API资源不足 |
| 20000005 | apiname is nil | APINAME为空 |
| 30001001 | Argument Error: invalid src | src参数不合法 |
| 30001002 | Argument Error: invalid dst | dst参数不合法 |
| 30001003 | Argument Error: invalid template | template参数不合法 |
| 30001004 | Argument Error: invalid argv | argv参数不合法 |
| 30001005 | Argument Error: include sensitiveword | 存在敏感词 |
| 30001006 | Argument Error: invalid batchmsg | batchmsg参数不合法 |
| 30001007 | Argument Error: batchmsg exceed the limit | batchmsg消息个数超过限制 |
| 30002001 | Server Error: cy server timeout | 彩印服务器响应超时 |
| 30002002 | Server Error: cy server return err | 彩印服务器返回错误 |
| 30002003 | Server Error: cy server response body is nil | 彩印服务器响应体为空 |
| 30002004 | Server Error: cy server response body is not json | 彩印服务器响应体不合法 |
| 30002005 | Server Error: cy server response status error | 彩印服务器响应体状态错误 |
https://host:port/ussd/single
host和port由HUP平台提供
| 字段值 | 字段类型 | 说明 |
|---|---|---|
| appkey | string | 第三方应用ID |
| ts | string | 时间戳(从格林威治时间1970年01月01日00时00分00秒起至现在的总秒数,精确到秒,与标准时间偏差5分钟之内) |
| sign | string | 服务器签名(详见安全认证) |
| ms | string | 手机号码,目前支持中国移动和中国联通的手机号码 |
| tid | string | 模板编号,用户在服务端设置的模板,需要审核通过以后才能使用 |
| argv | array [string] | 模板中需要填充的参数 |
举例:
msg =
{ 'appkey': 'appkey',
'ts': '1471857427',
'ms': '13810326774',
'tid': '1',
'nonce': '?c3^4#5UT~s_HQ>eCzpU',
'sign':'',
'argv': ['号外号','中秋节']
}
| 字段值 | 字段类型 | 说明 |
|---|---|---|
| code | string | 返回码(详见响应码) |
| ds | string | 描述信息(详见响应码) |
| msgid | string | 为消息生成的唯一ID |
| ms | string | 目标号码,与请求中的ms一致 |
举例:
{
"code": "00000000",
"ds": "Success",
"msgid": "1458540307123456",
"ms": "13810326774"
}
模板:
模板中必须携带公司名称,其在模板中的位置不限。
| 编号 | 内容(#*#部分为参数替换处) | 可变参数个数 |
|---|---|---|
| 1 | 【支付宝】你的支付宝发生#*#元的交易,校验码:#*#打死都不能告诉别人哦!唯一热线95188 | 2 |
https://userhost:userport/ussd/status
注:userhost和userport由客户提供,如果未提供,不触发本过程
| 字段值 | 字段类型 | 说明 |
|---|---|---|
| appkey | string | 第三方应用ID |
| ts | string | 时间戳(2.2) |
| sign | string | 服务器签名(安全认证) |
| msgid | string | 为消息生成的唯一任务ID |
| code | string | 投递状态码(详见1.6) |
| ds | string | 描述信息(详见1.6) |
{
"appkey": "appkey",
"ts": "1408103878424" ,
"sign":"7eba379599053ee5" ,
"msgid": "1458540307123456",
"code": "00000000",
"ds: "Success"
}
| 字段值 | 字段类型 | 说明 |
|---|---|---|
| code | string | 返回码(详见响应码),总返回码 |
| ds | string | 描述信息(详见响应码) |
举例
{
"code": "00000000",
"ds": "Success"
}
本文档提供了USSD平台群发业务相关的API,提供接口的相关说明,以指导相关人员进行业务接入。
号外号USSD平台我们简称HUP(Haowaihao USSD Platform)平台,前端客户我们简称CP(Customer Platform)
接口采用HTTP协议,发送响应的数据格式采用JSON格式。
说明:
“查询已完成子批次”、“查询批量群发任务”、“查询子批次投递结果”查询接口在任务开始至任务完成后一定期限内有效。
https://host:port/ussd/batch_task
host和port由HUP平台提供
POST
Accept :application/json;charset=UTF-8 Content-Type:application/json;charset=UTF-8 Authorization: USSDAUTH appkey="350000100020003", timestamp="1408103878424", signature="7eba379599053ee5"appkey第三方应用ID(批量请求消息发起方);timestamp时间戳(详见请求签名);signature服务器签名(详见授权说明)
| 字段值 | 字段类型 | 必选 | 说明 |
|---|---|---|---|
| appkey | string | M | 第三方应用ID |
| cid | string | M | 回填企业开户分配的企业标识 |
| cappkey | string | M | 回填企业开户分配的appkey |
| tid | string | M | 模板编号,模板必须为群发专用模板,审核通过之后,才能使用 |
| argv | array [string] | M | 模板中需要填充的参数,参数内容为UTF-8编码 |
| tn | string | M | 投递号码总数 |
举例:
{
"appkey": "350000100020003",
"cid": "2222ca5f003645a4af9517fd098b23191",
"tid": "1",
"argv": [
"号外号",
"中秋节"
]
"tn":"2000000"
}
| 字段值 | 字段类型 | 必选 | 说明 |
|---|---|---|---|
| code | string | M | 返回码(详见响应码), |
| ds | string | M | 描述信息(详见响应码) |
| taskid | string | M | 服务端为此次任务生成的唯一任务ID |
举例:
{
"code": "00000000",
"ds": "Success",
"taskid": "1458540307123456"
}
https://host:port/ussd/batch_number?taskid=XXX
host和port由HUP平台提供
POST
Accept :application/json;charset=UTF-8
Content-Type:application/json;charset=UTF-8
Content-Encoding:gzip
Authorization: USSDAUTH appkey="350000100020003",
timestamp="1408103878424", signature="7eba379599053ee5"
appkey第三方应用ID(批量请求消息发起方);timestamp时间戳(详见请求签名);signature服务器签名(详见授权说明)
| 字段值 | 字段类型 | 说明 |
|---|---|---|
| appkey | string | 第三方应用ID |
| ts | string | 时间戳(2.2) |
| sign | string | 服务器签名(安全认证) |
| msgid | string | 为消息生成的唯一任务ID |
| code | string | 投递状态码(详见1.6) |
| ds | string | 描述信息(详见1.6) |
{
"appkey": "appkey",
"ts": "1408103878424" ,
"sign":"7eba379599053ee5" ,
"msgid": "1458540307123456",
"code": "00000000",
"ds: "Success"
}
| 字段值 | 字段类型 | 说明 |
|---|---|---|
| code | string | 返回码(详见响应码),总返回码 |
| ds | string | 描述信息(详见响应码) |
举例:
{
"code": "00000000",
"ds": "Success"
}
本文档提供了短信平台业务相关的API,提供接口的相关说明,以指导相关人员进行业务接入。
号外号短信平台我们简称SMP(Short Message Platform)平台,前端客户我们简称CP(Customer Platform)。
接口采用HTTP协议,发送响应的数据格式采用JSON格式。
采用数字签名模式进行报文传输
生成数字签名算法如下:
说明:
实例:
msg = {
'ms': '8613000110022',
'appkey': 'appkey',
'nonce': '?c3^4#5UT~s_HQ>eCzpU',
'vp': '900',
'ts': '2016-07-15T02:09:00.164515+00:00'
}
参与数字签名的字符串为, (appkey=appkey,appsecret=appid):appkey=appkey,ms=8613000110022,nonce=?c3^4#5UT~s_HQeCzpU, ts=2016-07-15T02:09:00.164515+00:00,vp=900appid
生成包含签名的最终报文如下:
{
'sign': 'XFVI/aLjuWrFNxEENdPdoFeWipwgFBnz7TAu29yNEsA=',
'ms': '8613000110022',
'appkey': 'appkey',
'nonce': '?c3^4#5UT~s_HQ>eCzpU',
'vp': '900',
'ts': '2016-07-15T02:09:00.164515+00:00'
}
注:appkey 和appsecret 是由号外号短信平台统一分配的。
POST 方法
当CP平台用户发送验证请求时,SMSP后台会向CP平台请求指定的手机号发送一个短信验证码,同时返回给CP平台一个短信验证码的id。
请设置成”POST”
http://{serverroot}/gsms
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
表1-1请求消息体参数说明
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey”:”jsyh” |
| tid | 模板id | 16 | 必须 | 模板id ”tid”:”1073001” |
| ms | 手机号 | 15 | 必须 | 接收用户号码,号码格式遵循国际电信联盟定义的E.164 标准。即含国家码的手机号,例如:”ms”:”8613000110022” |
| ts | 发送消息的时间戳 | 32 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| vp | 短信验证码有效周期 | 32 | 验证码有效期,在有效期内验证码有效,否则无效,用户重新发送请求验证码,单位秒。”vp”:”900”,默认60 | |
| sign | 签名 | 64 | 必须 | 参考1.3 |
注意:ms手机号目前只支持86中国手机号码
请求消息示例如下:
{
"appkey":"jsyh",
"tid":"1073001",
"ms":"8613000110022",
"ts":"20160713101356320",
"vp":"900",
"sign":"1D731A07A180EC56C66451706FBE4AFF"
}
表1-2响应消息参数说明
| json键名 | 内容 | 最大长度 | 说明 |
|---|---|---|---|
| vid | 验证码ID,可选 | 16 | 短信验证码id,用于校验 |
| msg | String | 128 | 返回结果的详细描述信息 |
| msgid | string | 26 | 消息id |
响应消息示例:
{
"vid": "1",
"msg": "success",
"msgid":"16080512365800001521667374"
}
当CP平台用户发送验证请求时,SMSP后台会向CP平台请求指定的手机号发送一个短信验证码,同时返回给CP平台一个短信验证码的id。CP平台使用此id校验CP平台用户的校验码是否正确。
请设置成“POST”。
http://{serverroot}/vsms
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey”:”jsyh” |
| ms | 手机号 | 15 | 必须 | 接收用户号码,号码格式遵循国际电信联盟定义的E.164标准。即含国家码的手机号,例如:”ms”:”8613000110022” |
| ts | 发送消息的时间戳 | 20 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| vid | smsp平台生成的短信验证码id | 16 | 必须 | 和2.3.2中的保持一致 |
| vcode | 短信校验码 | 6 | 必须 | 用户输入的短信校验码 |
| sign | 签名 | 32 | 必须 | 参考1.3 |
| nonce | 随机字符串 | 64 |
例子:
{
"appkey": "jsyh",
"vid": "91",
"vcode": "123456",
"ms": "8613000110022",
"sign": "C614B63D1B85FBC7C2A235183FD1D4C0",
"ts": "20160713101356320"
}
| json键名 | 内容 | 最大长度 | 说明 |
|---|---|---|---|
| msg | String | 128 | 返回结果的详细描述信息 |
例子:
{
"msg": "success"
}
CP平台通过SMSP平台给用户发送短信。
请设置成“POST”。
http://{serverroot}/csms
请求消息体中的参数(约定全部为小写字母)说明如下表所示
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey”:”jsyh” |
| tid | 模板id | 16 | 必须 | 模板id ”tid”:”1073001” |
| ms | 手机号 | 15 | 必须 | 接收用户号码,号码格式遵循国际电信联盟定义的E.164标准。即含国家码的手机号,例如:”ms”:”8613000110022” |
| ts | 发送消息的时间戳 | 20 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| ct | 短信内容 | 1024 | 必须 | 用户短信内容 |
| sign | 签名 | 32 | 必须 | 参考1.3 |
例子:
{
"appkey": "jsyh",
”tid”:”1073001”,
"ct": "91",
"ms": "8613000110022",
"sign": "7F33603C22C6DE56BF671C925918DCE8",
"ts": "20160713101356320"
}
| json键名 | 内容 | 最大长度 | 说明 |
|---|---|---|---|
| msg | String | 128 | 返回结果的详细描述信息 |
| msgid | string | 26 | 消息id |
例子:
{
"msg": "success",
"msgid": "16080512365800001521667374"
}
CP平台用户查询余额,返回给CP平台一个剩余可用的短信条数。
请设置成”GET”
http://{serverroot}/qsms
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey”:”jsyh” |
| nonce | 随机字符串 | 无限制 | 可选 | |
| ts | 发送消息的时间戳 | 32 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| sign | 签名 | 64 | 必须 | 参考1.3 |
注意:ms手机号目前只支持86中国手机号码
请求消息示例如下:
{
"appkey":"jsyh",
"ts":"20160713101356320",
"nonce":"900",
"sign":"1D731A07A180EC56C66451706FBE4AFF"
}
| json键名 | 内容 | 最大长度 | 说明 |
|---|---|---|
| balance | int | 剩余可用的短信条数 |
| msg String | 128 | 返回结果的详细描述信息 |
响应消息示例:
{
"balance": 198989,
"msg": "success"
}
状态报告推送需要第三方客户提供一个HTTP的接收地址,短信平台为发送方,客户为接收方。
请设置成”POST”
第三方url:http://ip:port/接口名
推送消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| msgid | 消息id | 26 | 必须 | |
| ms | 接收短信的手机号码 | 13 | 必须 | 加86 |
| status | 短消息的执行状态 | 1 | 必须 | 字符串 0:发送成功 1:等待发送 2:发送失败 |
推送响应参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| msgid | 消息id | 26 | 必须 | |
| status | 短消息的执行状态 | 1 | 必须 | 字符串 0:接收成功 1:接收失败 |
通过手机号码(ms)和消息ID(msgid),可以查询短信的发送结果(status).
请设置成”get”.
http ://{serverroot}/qsms
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey”:”jsyh” |
| nonce | 随机字符串 | 无限制 | 可选 | |
| msgid | 消息id | 26 | 必须 | |
| ms | 接收短信的手机号码 | 13 | 必须 | 加86 |
| ts | 发送消息的时间戳 | 32 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| sign | 签名 | 64 | 必须 | 参考1.3 |
请求消息示例:
{
'ms': '13810326774',
'appkey': 'hwh',
'nonce': 'Ck?VPQUA6S2OK*1B<>@(',
'ts': '2016-08-09T07:14:16.325566+00:00',
'msgid': '16080914251200001557305643',
'sign': 'gxpbsBh0SoYIn/8ju9lm+3srO13iBg7Sodg6bg0/CbU='
}
| json键名 | 内容 | 最大长度 | 说明 | status | 短信发送状态 | 1 | "1":成功 "2":失败 "3":无效请求 |
|---|
响应消息示例:
{
"status":"1"
}
此接口用于向代理商通道号发送一条用户的上行请求。
请设置成“post”
http ://ip:port/deliver 需要代理商提供
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| ms | 发送短消息的手机号 | 15 | 必须 | 接收用户号码,号码格式遵循国际电信联盟定义的E.164标准。即含国家码的手机号,例如:”ms”:”8613000110022” |
| spnum | sp接入号 | 20 | “Spnum”:”10690001073” | |
| ct | 短信内容 | 6 | 必须 | 用户短信内容 |
注意:ms手机号目前只支持86中国手机号码
推送息示例如下:
{
"ms":"8613194072190",
"spnum":"10073",
"ct":"测试测试"
}
推送响应参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| msgid | 消息id | 26 | 必须 | 代理商自己生成 |
| status | 短消息的执行状态 | 1 | 必须 | 字符串0:接收成功 1:接收失败 |
响应消息实例如下:
{
"msgid":"10006112161802260016888276",
"status":"0"
}
private String getPostData(String mobile, String content, String tid) {
StringBuffer sb = new StringBuffer();
sb.append("appkey").append("=").append(appkey).append(",");
sb.append("ct").append("=").append(content).append(",");// 短信内容
sb.append("ms").append("=").append(mobile).append(",");// 手机号,含国家码
sb.append("tid").append("=").append(tid);
// sb.append("ts").append("=").append(System.currentTimeMillis()).append(",");
sb.append(appsecret);
byte[] byteArray = Base64.encodeBase64(DigestUtils.sha256(sb.toString()));
String sign = new String(byteArray, Charsets.UTF_8);
JSONObject jo = new JSONObject();
jo.put("appkey", appkey);
jo.put("ct", content);
jo.put("tid", tid);
jo.put("ms", mobile);
jo.put("sign", sign);
return jo.toJSONString();
}
本文档提供了短信平台业务相关的API,提供接口的相关说明,以指导相关人员进行业务接入。
号外号短信平台我们简称SMP(Short Message Platform)平台,前端客户我们简称CP(Customer Platform)。
接口采用HTTP协议,发送响应的数据格式采用JSON格式。
采用数字签名模式进行报文传输
生成数字签名算法如下:
说明:
实例:
msg = {
'ms': '8613000110022',
'appkey': 'appkey',
'nonce': '?c3^4#5UT~s_HQ>eCzpU',
'vp': '900',
'ts': '2016-07-15T02:09:00.164515+00:00'
}
参与数字签名的字符串为, (appkey=appkey, appsecret=appid):appkey=appkey,ms=8613000110022, nonce=?c3^4#5UT~s_HQeCzpU,ts=2016-07-15T02:09:00.164515+00:00,vp=900appid
生成包含签名的最终报文如下:
{
'sign': 'XFVI/aLjuWrFNxEENdPdoFeWipwgFBnz7TAu29yNEsA=',
'ms': '8613000110022',
'appkey': 'appkey',
'nonce': '?c3^4#5UT~s_HQ>eCzpU',
'vp': '900',
'ts': '2016-07-15T02:09:00.164515+00:00'
}
注:appkey 和appsecret 是由号外号短信平台统一分配的。
POST 方法
当CP平台用户发送验证请求时,SMSP后台会向CP平台请求指定的手机号发送一个短信验证码,同时返回给CP平台一个短信验证码的id。
请设置成”POST”
http://{serverroot}/gsms
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
表1-1请求消息体参数说明
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey”:”jsyh” |
| tid | 模板id | 16 | 必须 | 模板id ”tid”:”1073001” |
| ms | 手机号 | 15 | 必须 | 接收用户号码,号码格式遵循国际电信联盟定义的E.164标准。即含国家码的手机号,例如:”ms”:”8613000110022” |
| ts | 发送消息的时间戳 | 32 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| vp | 短信验证码有效周期 | 32 | 验证码有效期,在有效期内验证码有效,否则无效,用户重新发送请求验证码,单位秒。”vp”:”900”,默认60 | |
| sign | 签名 | 64 | 必须 | 参考1.3 |
注意:ms手机号目前只支持86中国手机号码
请求消息示例如下:
{
"appkey":"jsyh",
"tid": "1073001",
"ms":"8613000110022",
"ts":"20160713101356320",
"vp":"900",
"sign":"1D731A07A180EC56C66451706FBE4AFF"
}
表1-2响应消息参数说明
| json键名 | 内容 | 最大长度 | 说明 |
|---|---|---|---|
| vid | 验证码ID,可选 | 16 | 短信验证码id,用于校验 |
| msg | String | 128 | 返回结果的详细描述信息 |
| msgid | string | 26 | 消息id |
响应消息示例:
{
"vid": "1",
"msg": "success",
"msgid":"16080512365800001521667374"
}
当CP平台用户发送验证请求时,SMSP后台会向CP平台请求指定的手机号发送一个短信验证码,同时返回给CP平台一个短信验证码的id。CP平台使用此id校验CP平台用户的校验码是否正确。
请设置成“POST”。
http://{serverroot}/vsms
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey”:”jsyh” |
| ms | 手机号 | 15 | 必须 | 接收用户号码,号码格式遵循国际电信联盟定义的E.164 标准。即含国家码的手机号,例如:”ms”:”8613000110022” |
| ts | 发送消息的时间戳 | 20 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| vid | smsp平台生成的短信验证码id | 16 | 必须 | 和2.3.2中的保持一致 |
| vcode | 短信校验码 | 6 | 必须 | 用户输入的短信校验码 |
| sign | 签名 | 32 | 必须 | 参考1.3 |
| nonce | 随机字符串 | 64 |
例子:
{
"appkey": "jsyh",
"vid": "91",
"vcode": "123456",
"ms": "8613000110022",
"sign": "C614B63D1B85FBC7C2A235183FD1D4C0",
"ts": "20160713101356320"
}
| json键名 | 内容 | 最大长度 | 说明 |
|---|---|---|---|
| msg | String | 128 | 返回结果的详细描述信息 |
例子:
{
"msg": "success"
}
CP平台通过SMSP平台给用户发送短信。
请设置成“POST”。
http: //{serverroot}/csms
请求消息体中的参数(约定全部为小写字母)说明如下表所示
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey” :”jsyh” |
| tid | 模板id | 16 | 必须 | 模板id ”tid”:”1073001” |
| ms | 手机号 | 15 | 必须 | 接收用户号码,号码格式遵循国际电信联盟定义的E.164标准。即含国家码的手机号,例如:”ms”:”8613000110022” |
| ts | 发送消息的时间戳 | 20 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| ct | 短信内容 | 1024 | 必须 | 用户短信内容 |
| sign | 签名 | 32 | 必须参考1.3 |
例子:
{
"appkey": "jsyh",
”tid”:”1073001”,
"ct": "91",
"ms": "8613000110022",
"sign": "7F33603C22C6DE56BF671C925918DCE8",
"ts": "20160713101356320"
}
| json键名 | 内容 | 最大长度 | 说明 |
|---|---|---|---|
| msg | String | 128 | 返回结果的详细描述信息 |
| msgid | string | 26 | 消息id |
例子:
{
"msg": "success",
"msgid": "16080512365800001521667374"
}
CP平台用户查询余额,返回给CP平台一个剩余可用的短信条数。
请设置成”GET”
http://{serverroot}/qsms
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey”:”jsyh” |
| nonce | 随机字符串 | 无限制 | 可选 | |
| ts | 发送消息的时间戳 | 32 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| sign | 签名 | 64 | 必须 | 参考1.3 |
注意:ms手机号目前只支持86中国手机号码
请求消息示例如下:
{
"appkey":"jsyh",
"ts":"20160713101356320",
"nonce":"900",
"sign":"1D731A07A180EC56C66451706FBE4AFF"
}
| json键名 | 内容 | 最大长度 | 说明 |
|---|---|---|---|
| balance | int | 剩余可用的短信条数 | |
| msg | String | 128 | 返回结果的详细描述信息 |
响应消息示例:
{
"balance": 198989,
"msg": "success"
}
状态报告推送需要第三方客户提供一个HTTP的接收地址,短信平台为发送方,客户为接收方。
请设置成”POST”
第三方url:http://ip:port/接口名
推送消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| msgid | 消息id | 26 | 必须 | |
| ms | 接收短信的手机号码 | 13 | 必须 | 加86 |
| status | 短消息的执行状态 | 1 | 必须 | 字符串0:发送成功 1:等待发送 2:发送失败 |
推送响应参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| msgid | 消息id | 26 | 必须 | |
| status | 短消息的执行状态 | 1 | 必须 | 字符串 0:接收成功 1:接收失败 |
通过手机号码(ms)和消息ID(msgid),可以查询短信的发送结果(status).
请设置成”get”.
http://{serverroot}/qsms
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| appkey | 应用标识 | 8 | 必须 | 应用商户的接入”appkey”:”jsyh” |
| nonce | 随机字符串 | 无限制 | 可选 | |
| msgid | 消息id | 26 | 必须 | |
| ms | 接收短信的手机号码 | 13 | 必须 | 加86 |
| ts | 发送消息的时间戳 | 32 | 短信验证码发送事件发生的时间戳,“ts”:“ 20160713114223039684” | |
| sign | 签名 | 64 | 必须 | 参考1.3 |
请求消息示例:
{
'ms': '13810326774',
'appkey': 'hwh',
'nonce': 'Ck?VPQUA6S2OK*1B<>@(',
'ts': '2016-08-09T07:14:16.325566+00:00',
'msgid': '16080914251200001557305643',
'sign': 'gxpbsBh0SoYIn/8ju9lm+3srO13iBg7Sodg6bg0/CbU='
}
| json键名 | 内容 | 最大长度 | 说明 |
|---|---|---|---|
| status | 短信发送状态 | 1 | "1": 成功 "2":失败 "3":无效请求 |
响应消息示例:
{
"status":"1"
}
此接口用于向代理商通道号发送一条用户的上行请求。
请设置成“post”
http://ip:port/deliver 需要代理商提供
请求消息体中的参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
|---|---|---|---|---|
| ms | 发送短消息的手机号 | 15 | 必须 | |
| spnum | sp接入号 | 20 | “Spnum”:”10690001073” | |
| ct | 短信内容 | 6 | 必须 | 用户短信内容 |
注意:ms手机号目前只支持86中国手机号码
推送息示例如下:
{
"ms":"8613194072190",
"spnum":"10073",
"ct":"测试测试"
}
推送响应参数(约定全部为小写字母)说明如下表所示。
| json键名 | 内容 | 最大长度 | 可选 | 说明 |
| msgid | 消息id | 26 | 必须 | 代理商自己生成 |
| status | 短消息的执行状态 | 1 | 必须 | 字符串 0:接收成功 1:接收失败 |
响应消息实例如下:
{
"msgid":"10006112161802260016888276",
"status":"0"
}
private String getPostData(String mobile, String content, String tid) {
StringBuffer sb = new StringBuffer();
sb.append("appkey").append("=").append(appkey).append(",");
sb.append("ct").append("=").append(content).append(",");// 短信内容
sb.append("ms").append("=").append(mobile).append(",");// 手机号,含国家码
sb.append("tid").append("=").append(tid);
// sb.append("ts").append("=").append(System.currentTimeMillis()).append(",");
sb.append(appsecret);
byte[] byteArray = Base64.encodeBase64(DigestUtils.sha256(sb.toString()));
String sign = new String(byteArray, Charsets.UTF_8);
JSONObject jo = new JSONObject();
jo.put("appkey", appkey);
jo.put("ct", content);
jo.put("tid", tid);
jo.put("ms", mobile);
jo.put("sign", sign);
return jo.toJSONString();
}