@khan-lau
2017-04-11T23:42:19.000000Z
字数 11262
阅读 2808
未分类
--response
result:{
"code":200
"message": "S_OK",
"data": {
"array":[] //此处,根据需求返回不同类型数据.
}
}
--response
{
"code":500,
"message": "FA_UNAUTHORIZED" //见1.5 错误代码定义
}
https://host:port/interface
其他协议字段使用 form 提交
通过https 协议保证安全性.
建议使用 Go Daddy Secure Certificate Authority - G2证书
禁止缓存的页面, 请求需携带If-Modified-Since:"GMT时间戳"
连接使用 tls 1.0+ 进行加密, 避开 ssl 的漏洞
token 有时效限制, 过期后返回对应err_code.(参考协议1.5)
login成功, header 中返回 cookie, 后续请求都需携带对应 cookie
协议中约定所有请求必须使用 utf8编码. 涉及 url-encode, 也需使用 utf8.
涉及分页的接口 暂定每页20条记录.
Message字段
S_OK - 表示操作成功,同时返回对应的Session ID和用于cookie校验的值
FA_UNAUTHORIZED - 表示用户名或者密码不匹配,或者用户不存在
FA_INVALID_VERIFY_CODE - 校验码不正确 (备用)
FA_VERIFY_CODE_ERROR - 获取校验码失败
FA_INVALID_VERIFY_COOKIE - cookie不正确
FA_INVALID_TOKEN - TOKEN不合法,通常是校验码已过期
FA_NEED_VERIFY_CODE - 需要校验码 (备用)
FA_USER_LOCKED - 用户处于锁定状态 (备用)
FA_USER_SUSPENDED - 用户被禁用 (备用)
FA_USER_WRONG_STATUS - 用户状态错误 (备用)
FA_DB_ERROR - 数据库异常
FA_PARAM_ERROR - 参数异常
FA_DATA_NOT_FOUND - 未找到结果
FA_USER_EXISTS - 用户名或手机号重复
FA_ORDER_EXISTS - 用户重复报名
FA_ORDER_FULL - 票已售完
FA_FEE_ZERO - 票价为0
FA_SIGN_ERROR - 签名错误
"news":{
"id":51ul, //ul代表unsigned long
"title":"新闻标题",
"memo":"简介",
"type":1, //0为未知, 1为视频, 2为文本, 3为富文本
"date_time":1302455112, //发布时间, UTC时间戳
"res":"aaa.html" //
"img":"http://fast4ward.cn/api/res/51.png",
"img_w":480,
"img_h":320,
.... //其他字段,可自行扩展
}
"banner":{
"id":123ul, //id
"img":"http://fast4ward.cn/res/banner/1.png",
"img_w":480, //图片宽度
"img_h":320, //图片高度
"operation":1, //操作类型, 1为app内跳转, 2为应用外跳转, 3待扩展
"schema":"fw://main?aa=value&bb=value1"
... //其他字段, 可自行扩展.
}
"user":{
"id":33ul, //id
"user":"john117", //登录用户名
"passwd":"qwer1234", //登录密码
"true_name":"张三", //姓名
"nick":"skywalker", //nickname
"no":"001", //车手编号, 普通用户为null
"phone":"13801030311", //电话号码
"email":"a@b.com", //邮箱
"gender":0, //0:女, 1:男
"birthday":142132532234L //生日, unix时间戳类型
"id_type":0, //0:身份证, 1:驾驶证, 2:护照, 3:军官证, 4:港澳, 5:台湾, 6:学生证
"id_card":"123524187455771234", //证件编号
"icon":"http://fast4ward.cn/res/adf.png", //自定义头像
"detail":{
"id" : 1234,
"uid": 33ul,
"id_card" : "/upload/user/id_124325.png",
"driver_card":"/upload/user/driver_43251245.png",
"address":"湖南省长沙市xx区xx路xx号xxx",
"sns": "aabbcc" //社交账号,暂时只支持微信
}
.... //其他字段, 可自行扩展.
}
"schedule" : {
"title":"培训",
"start":1468080000000, //unix毫秒时间戳 2016/07/10 00:00
"end":1468166399999 // 2016/07/10 23:59
}
"party":{
"id" : 123, --id
"name" "平谷04加速赛", //活动名称
"memo":"合法专业赛事", //活动介绍
"area" "北京", //比赛地点
"race_begin": 1468080000000, //开始时间 2016/07/10 00:00
"race_end": 1468166399999, //结束时间
"sign_begin": 1468010000000, //报名开始时间
"sign_end": 1468010099999, //报名截至时间
"watchers": 400, //可容纳观众数量,
"drivers": 100, //可允许车手数量
"ticker":3000, //门票价格, 单位为分
"fee": 30000, //车手报名费用, 单位为分
"status": 0, //是否有效, 0:无效, 1:有效
"contacts": "联系方式",
"address": "平谷县航空中心", //活动地点
"schedule":[ //活动日程表
schedule, //见2.4
....
]
}
"car":{
"id" : 3ul, //id
"user" : user, //见协议2.3
"car_sn" : "321341", //车架号
"brand" : "ford", //品牌
"model" : "fiesta", //型号
"is_turbo" : false, //是否涡轮增压
"displacement": 150, //排量, 1.5*100
"driver_type" : 0, //驱动形式, 0"前驱", 1"后驱", 2"后置后驱", 3"四驱"
"group" : 1, //比赛分组信息, 分组id, 详见2.11
"hp" : 120, //马力
"icon":"http://fast4ward.cn/res/adf.png", //自定义照片
... //自行扩展
}
"record":{
"id":1231ul, // 记录id
"user":user, // 车手, 见2.3
"car":car, // 车辆, 见2.6
"party":party, // 记录产生的活动赛事, 见2.5
"date_time": 1304xxxx, // UTC时间戳
"reaction_time" : 1.82f // reaction time 反应时间(绿灯亮 到离开起点的时间)
"FT60": 1.2f, // 到60英尺时间
"FT330": 2.2f, // 到330英尺时间
"FT660": 3.3f, // 到660英尺时间
"Speed660":200.00f, // 到660FT的冲线速度
"vehicle_speed": 220.00f, // 400米终点的冲线速度
"elapsed_time": 9.82f, // 400时间
"photo": "/res/record/1231.png" //成绩单
.... // 自行扩展
}
"brand":{
"id" : 123,
"brand": "Alfa Romeo", //品牌
"chinese": "阿尔法罗密欧", //品牌中文名
"index": "A", //中文拼音首字母
"flag": "1", //是否有效
"models":[ model, ...], //见2.9
"icon": "/upload/car/logo213415.png" //logo
}
"model":{
"id" : 4235,
"brand_id": 123, //品牌id
"model": "ALFA 147", //型号名称
"flag": "1", //是否有效
"icon": "/upload/car/photo213415.png" //车型照片
}
"order" : {
"id": 1,
"order_id" : "2f2341321b342523", //uuid1编码
"produce_type":0, //产品id, 0:门票; 1:报名费
"pay_type":0, //支付渠道id, 0:微信, 1:支付宝, 2:快钱, 3:银联
"fee":300, //支付金额 单位(分)
"join_type": "", //用户身份, null或""为个人, 否则为所属机构名称
"descript": "无改动" //改装描述
}
"group": {
"id": 1, //编号
"name": "A1组-前驱钢炮组",//分组中文名
"english": "A1", //分组英文名
"index": 0, //排序索引
"flag": true //是否有效的标记
}
初始化接口
注意事项: 该接口 response 时需要 set-cookie,并在 http header 中返回对应的 cookie, 鉴权成功后, 后续接口提交请求时, 必须在 header 中携带该cookie.
参数
Name | Description | |
---|---|---|
limit |
Optional | 首页获取的资讯记录数量, 默认为18 |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"page":0,
"pages":1,
"BannerArray":[],
"NewsArray":[]
}
}
请求失败
{
"code":500
"message": "FA_INVALID_VERIFY_COOKIE" //见1.5 错误代码定义
}
鉴权接口.
参数
Name | Description | |
---|---|---|
user |
用户id | |
passwd |
md5(user:passwd:timestamp) | |
timestamp |
1970至今的秒数*1000 |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"token" : <string>
}
}
请求失败
{
"code":500
"message": "FA_UNAUTHORIZED" //见1.5 错误代码定义
}
init接口会提供在header中提供名为fast4ward.sid的cookie, 后续接口调用请求需携带该cookie.
取消鉴权
URL:
https://host:port/unlogin
数参
Name | Description | |
---|---|---|
user |
用户id | |
token |
token |
response
请求成功:
{
"code": 200,
"message": "S_OK"
}
请求失败
{
"code":500,
"message": "FA_UNAUTHORIZED",
}
新增用户
参数
Name | Description | |
---|---|---|
user_name |
用户名, 此处参数名 并非user |
|
passwd |
密码 | |
true_name |
Optional | 真名 |
nick |
Optional | 昵称 |
phone |
国内手机号 | |
verify_code |
短信校码验 | |
email |
Optional | 邮箱 |
gender |
Optional | 性别 |
id_type |
Optional | 身份证件类别 0:身份证, 1:驾驶证, 2:护照, 3:军官证, 4:港澳, 5:台湾, 6:学生证 |
id_card |
Optional | 身份证件号码 |
file |
Optional | 照片信息, 文件类型 |
* 注意: 该接口必须以multipart/form-data
方式提交
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"user" : user --见协议2.3
}
}
修改用户信息
URL:
https://host:port/update_driver
参数
Name | Description | |
---|---|---|
user |
user account | |
token |
token | |
id |
user id | |
passwd |
Optional | 密码 |
true_name |
Optional | 真名 |
nick |
Optional | 昵称 |
email |
Optional | 邮箱 |
gender |
Optional | 性别 |
id_type |
Optional | 身份证件类别 0:身份证, 1:驾驶证, 2:护照, 3:军官证, 4:港澳, 5:台湾, 6:学生证 |
id_card |
Optional | 身份证件号码 |
file |
Optional | 照片信息, 文件类型 |
* 注意: 该接口必须以multipart/form-data
方式提交
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"user" : user --见协议2.3
}
}
修改密码
URL:
https://host:port/reset_passwd
参数
Name | Description | |
---|---|---|
phone |
国内手机号 | |
passwd |
密码 | |
verify_code |
短信校码验 |
* 注意: 该接口必须以multipart/form-data
方式提交
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {}
}
查询指定用户信息
URL:
https://host:port/user_info
参数
Name | Description | |
---|---|---|
user |
用户名 | |
token |
token | |
id |
需获取的user id |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"user" : user --见协议2.3
}
}
查询指定用户名下所有车辆信息
URL:
https://host:port/get_cars
参数
Name | Description | |
---|---|---|
uid |
需获取的user id |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"array" : [
car,
....
]
}
}
分页获取资讯列表
URL:
https://host:port/get_news
参数
Name | Description | |
---|---|---|
sid |
Optional | http header auth_cookie |
offset |
Optional | 分页偏移量, 与limit组合使用 |
limit |
Optional | 当页记录数 |
order |
Optional | 按新闻录入时间排序, desc, asc, 默认asc |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"offset" : 0, //分页偏移量, 透传
"total" : 5, //共5条记录.
"array":[
news, --news定义见协议 2.1
news,
......
]
}
}
获取广告列表
URL:
https://host:port/get_banner
参数
Name | Description | |
---|---|---|
sid |
Optional | http header auth_cookie |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"array":[
banner, --banner定义见协议 2.2
banner,
......
]
}
}
分页获取赛事活动数据
URL:
https://host:port/get_party
参数
Name | Description | |
---|---|---|
sid |
Optional | http header auth_cookie |
offset |
Optional | 分页偏移量, 与limit组合使用, 如offset limit都为空, 则不分页 |
limit |
Optional | 当页记录数 |
order |
Optional | 按活动开始时间排序, desc, asc, 默认asc |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"offset" : 0, //分页偏移量, 透传
"total" : 5, //共5条记录.
"array":[
party, //party 定义见协议 2.5
party,
......
]
}
}
获取车牌品牌数据
URL:
https://host:port/get_brand
参数
Name | Description | |
---|---|---|
sid |
Optional | http header auth_cookie |
offset |
Optional | 分页偏移量, 与limit组合使用, 如offset limit都为空, 则不分页 |
limit |
Optional | 当页记录数 |
order |
Optional | 按活动开始时间排序, desc, asc, 默认asc |
search |
Optional | 搜索条件, 根据条件从品牌, 中文名, 索引中检索 |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"offset" : 0, //分页偏移量, 透传
"total" : 5, //共5条记录.
"array":[
brand, //party 定义见协议 2.8
brand,
......
]
}
}
查询某个品牌下对应车型
URL:
https://host:port/get_model
参数
Name | Description | |
---|---|---|
sid |
Optional | http header auth_cookie |
brand_id |
车辆品牌id | |
offset |
Optional | 分页偏移量, 与limit组合使用, 如offset limit都为空, 则不分页 |
limit |
Optional | 当页记录数 |
order |
Optional | 按活动开始时间排序, desc, asc, 默认asc |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"offset" : 0, //分页偏移量, 透传
"total" : 5, //共5条记录.
"array":[
model, //model 定义见协议 2.9
model,
......
]
}
}
获取品牌车型树状结构数据
URL:
https://host:port/get_brand_tree
参数
Name | Description | |
---|---|---|
sid |
Optional | http header auth_cookie |
offset |
Optional | 分页偏移量, 与limit组合使用, 如offset limit都为空, 则不分页 |
limit |
Optional | 当页记录数 |
order |
Optional | 按活动开始时间排序, desc, asc, 默认asc |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"offset" : 0, //分页偏移量, 透传
"total" : 5, //共5条记录.
"array":[
brand, //brand 定义见协议 2.8
brand,
......
]
}
}
获取品牌车型树状结构数据
URL:
https://host:port/get_group
参数
Name | Description | |
---|---|---|
search |
Optional | 检索关键字,检索name, english内容 |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"array":[
group, //brand 定义见协议 2.11
group,
......
]
}
}
获取各种类型比赛排行榜信息
URL:
https://host:port/get_board
参数
Name | Description | |
---|---|---|
sid |
Optional | http header auth_cookie |
mode |
Optional | 默认为总榜, brand : 品牌榜, party : 单场比赛排行 |
pid |
Optional | 赛事活动id, 与mode =party 选项组合使用 |
brand |
Optional | 车辆品牌中文, 与mode =brand 选项组合使用 |
model |
Optional | 车辆型号, 与mode =brand 选项 ,brand 参数组合使用 |
offset |
Optional | 分页偏移量, 与limit组合使用, 如offset limit都为空, 则不分页 |
limit |
Optional | 当页记录数 |
order |
Optional | 按活动开始时间排序, desc, asc, 默认asc |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"offset" : 0, //分页偏移量, 透传
"total" : 5, //共5条记录.
"array":[
{
"no": 1, //名次
"driver":{
"id" : 5,
"user": "khan", //用户名
"true_name": "khan.lau", //姓名
"nick": "khan.lau", //昵称
},
"car" :{
"id":1,
"brand": "保时捷", //车辆品牌
"model": "Panamera", //车辆型号
},
"record": {
"id":1,
"reaction_time": 500, //启动反应时间
"elapsed_time": 12500, //04比赛完成时间
"vehicle_speed": 230000 //尾速
}
},
......
]
}
}
活动报名接口
参数
Name | Description | |
---|---|---|
sid |
http header auth_cookie | |
user |
用户名 | |
token |
token | |
pid |
活动场次id | |
true_name |
真实姓名 | |
phone |
联系电话 | |
produce_type |
watch :门票, join :车手报名费 |
|
pay_type |
wepay :微信支付, alipay :支付宝, quickplay :快钱, uniplay :银联 |
|
id_type |
Optional | 身份证件类别, join 类型时必填, 0:身份证, 1:驾驶证, 2:护照, 3:军官证, 4:港澳, 5:台湾, 6:学生证 |
id_card |
Optional | 身份证件号码, join 类型时必填 |
email |
Optional | 邮箱, join 类型时必填 |
address |
Optional | 联系地址, join 类型时必填 |
sns |
Optional | 微信号, join 类型时必填 |
join_type |
Optional | 车手身份, null或""为个人, 否则为所属机构名称, join 类型时必填 |
cid |
Optional | 参赛车辆id, watch 类型时, 必须为空, join 类型时, cid为空或为空字符串, 则新增车辆, 忽略brand , model , 否则为参赛车辆id |
brand |
Optional | 报名车辆, join 类型并且cid 为空时必填 |
model |
Optional | 报名车辆型号, join 类型并且cid 为空时必填 |
car_sn |
Optional | 报名车辆车架号, join 类型并且cid 为空时必填 |
hp |
Optional | 报名车辆功率, 单位为马力, join 类型并且cid 为空时必填 |
is_turbo |
Optional | 是否为涡轮增压, boolean型, join 类型并且cid 为空时必填 |
displacement |
Optional | 排量, 单位为L*100, join 类型并且cid 为空时必填 |
driver_type |
Optional | 驱动形式, 0"前驱", 1"后驱", 2"后置后驱", 3"四驱", join 类型并且cid 为空时必填 |
group |
Optional | 比赛分组id, 见2.11, join 类型必填 |
descript |
Optional | 改装描述 |
file |
Optional | 身份证照片与驾驶证照片, 文件类型, join 类型必填, 身份证文件名必须固定为:id_card , 驾驶证文件名必须固定为:driver_card |
* 注意: 该接口必须以multipart/form-data
方式提交
* 如果使用已存在车辆cid报名, 同时又提供了brand
model
car_sn
hp
is_turbo
displacement
driver_type
则修改车辆信息, 如果未使用已存在车辆cid, 则brand
model
car_sn
hp
is_turbo
displacement
driver_type
为必填字段.
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"order" : order
}
}
微信支付接口
参数
Name | Description | |
---|---|---|
sid |
http header auth_cookie | |
user |
用户名 | |
token |
token | |
oid |
订单表id |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"pay" : {
"prepay_id" : "3f234axxxxx"
}
}
}
支付宝支付接口
参数
Name | Description | |
---|---|---|
sid |
http header auth_cookie | |
user |
用户名 | |
token |
token | |
oid |
订单表id |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"res" : "签名字符串"
}
}
比赛场次检索接口
URL:
https://host:port/daemon/filtered_party
参数
Name | Description | |
---|---|---|
search |
Optional | 活动截止时间戳 |
order |
Optional | 按活动开始时间排序, desc, asc, 默认asc |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"array":[
Party, //party 定义见协议 2.5
......
]
}
}
指定比赛参与车手检索接口
URL:
https://host:port/daemon/filtered_driver
参数
Name | Description | |
---|---|---|
search |
活动场次id | |
order |
Optional | 按活动开始时间排序, desc, asc, 默认asc |
response
请求成功:
{
"code": 200,
"message": "S_OK",
"data": {
"array":[
{
"id": 123ul, //order id
"pid": 12ul, //party id
"cid": 1ul, //car id
"user" : Driver //Driver 定义见协议 2.3
},
......
]
}
}