@khan-lau
2017-04-11T15:42:19.000000Z
字数 11262
阅读 3089
未分类
--responseresult:{"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.1news,......]}}
获取广告列表
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.2banner,......]}}
分页获取赛事活动数据
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.5party,......]}}
获取车牌品牌数据
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.8brand,......]}}
查询某个品牌下对应车型
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.9model,......]}}
获取品牌车型树状结构数据
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.8brand,......]}}
获取品牌车型树状结构数据
URL:
https://host:port/get_group
参数
| Name | Description | |
|---|---|---|
search |
Optional | 检索关键字,检索name, english内容 |
response
请求成功:
{"code": 200,"message": "S_OK","data": {"array":[group, //brand 定义见协议 2.11group,......]}}
获取各种类型比赛排行榜信息
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},......]}}