[关闭]
@Jazka 2018-06-29T22:36:55.000000Z 字数 8699 阅读 1525

客户端通信协议0.1

签名方法

每个接口有指定的签名串,签名规则如下
params_str = 按 k 的自然排序,按如下格式拼接 a=xxx&b=xxx&c=xxx
sign = md5(app_key + params_str + app_secret)
如果请求参数中有空字符串的参数,该参数不参与签名计算
Android app_key: 单独发放
secret_key: 单独发放
签名过期时间: 60s

状态码

0 成功
101 未知错误
102 DB保存错误
103 逻辑错误
104 验证码输入错误
105 登录次数超限
106 签名错误
107 参数无效
108 验证码发送失败

202 用户不存在
204 认证错误
205 封禁的用户

请求方式

json post
pver、ver、time 全局必传
pver: 协议版本 0.1 String
ver: Android传 a-渠道-版本号 例 a-yingyongbao-0.3


获取验证码

Request: POST /api/v1/getcode
Params:
* mobile, String, 手机号码
* pver, String, 协议版本
* ver, String, 客户端版本,a1.0
* time, String, Unix时间戳
* sign, String, sign(mobile + time)

Response:
{
    code: 0:正常, >0:
    msg: "", //具体错误原因
    data: {}
}

用户登录接口

Request: POST /api/v1/signin
Params:
* mobile
* code, String, 验证码
* pver
* ver
* time
* sign, String, sign(mobile + code + time)

Response:
{
    code: 0:正常, >0 按error信息提示错误
    msg: "",
    data: {
        uid: "123456" //String, 用户ID
        token: xxxxxx //String, 通信的token, 本地保存
    }
}

设备信息同步接口, 注册或登录后调用一次

Request: POST /api/v1/syncdevice
Params:
* token, String, 客户端登录凭证
* pver
* ver
* time
* osType, String, 0:iOS, 1:Android
* udid, String, iOS:IDFA, Android:imei
* pushToken, String, 消息推送token
* model, String, 机型
* sysver, String, 系统版本
* root, String, 0:非root或未越狱, 1:root或越狱,检测不到传0
* sign, String, sign(token + udid + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {}
}

用户注销

Request: POST /api/v1/signout
Params:
* token
* pver
* ver
* time
* sign, String, sign(token + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {}
}

首页顶部tag分类获取

支持免登使用,若非登录状态,token传 "" 空字符串

Request: POST /api/v1/tags
Params:
* token
* pver
* ver
* time
* sign, String, sign(token + time)

Response:
{
    code: 0:正常,  >1:其它错误按error信息提示
    msg: "",
    data: {
        "tagList":[
                    {
                       "tagId": "0",  String //分类ID
                       "tagName": "推荐", String//分类名称 
                    },  
                    {
                       "tagId": "1",  String //分类ID
                       "tagName": "娱乐", String//分类名称                   
                    },
                    {
                       "tagId": "2",  String //分类ID
                       "tagName": "历史", String//分类名称            
                    }
        ]
    }
}

首页文章列表

免登使用,若非登录状态,token传 "" 空字符串

Request: POST /api/v1/articles
Params:
* token
* page, 页码,不传默认1
* len, 获取文章数量, 不传默认20
* tagId
* pver
* ver
* time
* sign, String, sign(token + tagId + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
    "list":[
            {//图文格式
                "style": 0, Int,可能有其他显示类型,包括广告
                "aid": "123", String 文章ID
                "title":"那些马桶盖电饭锅的情怀", String
                "iconUrls":"http://xxx.png" String
                "desc": "在这个分分钟看数据的时代"  
                "author": "KELEJUN"
                "avatar":"http://xxx.png" String // 头像url
                "votes": 7172 // 投票数
                "award": "4.2w" // 奖金数
            }
     ]
    }
}

竞技区顶部tag分类获取

竞技区必须登录

Request: POST /api/v1/athtags
Params:
* token
* pver
* ver
* time
* sign, String, sign(token + time)

Response:
{
    code: 0:正常,  >1:其它错误按error信息提示
    msg: "",
    data: {
        "tagList":[
                    {
                       "tagId": "0",  String //分类ID
                       "tagName": "推荐", String//分类名称
                       "show": 0, 0: 不显示;1:显示
                    },  
                    {
                       "tagId": "1",  String //分类ID
                       "tagName": "娱乐", String//分类名称
                       "show": 1, 0: 不显示;1:显示
                    }
        ]
    }
}

竞技区文章列表

竞技区必须登录

Request: POST /api/v1/atharticles
Params:
* token
* tagId
* pver
* ver
* time
* sign, String, sign(token + tagId + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
    "list":[
            {//图文格式
                "style": 0, Int,可能有其他显示类型,包括广告
                "aid": "123", String 文章ID
                "title":"那些马桶盖电饭锅的情怀", String
                "iconUrls":"http://xxx.png" String
                "votes": 0, Int  // 用户的投票数,如果未投票,返回0
                "voteLimit": 5, Int // 文章的可投票上限
            }
     ]
    }
}

文章详情页webview

如果可以未登录查看文章,token可传空
Request: GET /webview/article/view?aid=xxxx&token=xxx&time=xxxx&pver=xxx&ver=xxx&sign=xxx
Params:
* token
* aid, 文章ID
* pver
* ver
* time
* sign, sign(token + aid + time)
Response: HTTP 200 OK

文章详情页相关信息接口

Request: POST /api/v1/articleinfo
Params:
* token
* aid, 文章ID
* pver
* ver
* time
* sign, sign(token + aid + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
        "rewardCnt": 18, Int // 打赏数
        "collectCnt": 899, Int // 收藏数
        "collected": 0 - 用户未收藏;1 - 用户已收藏, Int
        "rewarded": 0 - 用户未打赏;1 - 用户已打赏, Int
        "comments": [
            {
                "cid": "123", String // 评论ID
                "tm": 1522821432, Long // Unix时间戳
                "avatar":"http://xxx.png" String // 头像url
                "pseudonym": “来读狂作家”, String  // 笔名
                "content": "xxxx", String // 评论内容
                "cmVoteCnt": 3424,Long // 评论点赞数
                "cmVoted": 0-未对点赞, 1-已经点赞  // 用户是否点赞该评论
            },
            {
                "cid": "123", String // 评论ID
                "tm": 1522821432, Long // Unix时间戳
                "avatar":"http://xxx.png" String // 头像url
                "pseudonym": “来读狂作家”, String  // 笔名
                "content": "xxxx", String // 评论内容
                "cmVoteCnt": 3424,Long // 评论点赞数
                "cmVoted": 0-未对点赞, 1-已经点赞  // 用户是否点赞该评论
            }
        ]
    }
}

文章评论接口

Request: POST /api/v1/comments
Params:
* token
* aid, 文章ID
* page, 页码,不传默认1
* len, 获取数量, 不传默认20
* pver
* ver
* time
* sign, sign(token + aid + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
        "comments": [
            {
                "cid": "123", String // 评论ID
                "tm": 1522821432, Long // Unix时间戳
                "avatar":"http://xxx.png" String // 头像url
                "pseudonym": “来读狂作家”, String  // 笔名
                "content": "xxxx", String // 评论内容
                "cmVoteCnt": 3424,Long // 评论点赞数
                "cmVoted": 0-未对点赞, 1-已经点赞  // 用户是否点赞该评论
            },
            {
                "cid": "123", String // 评论ID
                "tm": 1522821432, Long // Unix时间戳
                "avatar":"http://xxx.png" String // 头像url
                "pseudonym": “来读狂作家”, String  // 笔名
                "content": "xxxx", String // 评论内容
                "cmVoteCnt": 3424,Long // 评论点赞数
                "cmVoted": 0-未对点赞, 1-已经点赞  // 用户是否点赞该评论
            }
        ]
    }
}

添加评论接口

Request: POST /api/v1/addcomment
Params:
* token
* aid, 文章ID
* pver
* ver
* time
* content,评论内容
* sign, sign(token + aid + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {}
}

评论点赞接口

Request: POST /api/v1/cmvote
Params:
* token
* cid, 评论ID
* pver
* ver
* time
* sign, sign(token + cid + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {}
}

文章打赏接口

--- 待定

文章分享接口

--- 待定

文章阅读完成接口

Request: POST /api/v1/finishread
Params:
* token
* aid, 文章ID
* pver
* ver
* time
* sign, sign(token + aid + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {}
}

文章收藏接口

Request: POST /api/v1/articlecoll
Params:
* token
* aid, 文章ID
* pver
* ver
* time
* sign, sign(token + aid + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {}
}

Rock接口

Request: POST /api/v1/rock
Params:
* token
* rock: [{"tagId": "1", "show": 0}, {"tagId": "3", "show": 1} ...]
* pver
* ver
* time
* sign, String, sign(token + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {}
}

竞技区投票接口

Request: POST /api/v1/athvote
Params:
* token
* tagId
* votes: [{"aid": "123", "vote": 3}, {"aid": "123", "vote": 3} ...]
* pver
* ver
* time
* sign, String, sign(token + tagId + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {}
}

订阅区最近更新接口

Request: POST /api/v1/subslatest
Params:
* token
* page, 页码,不传默认1
* len, 获取文章数量, 不传默认20
* pver
* ver
* time
* sign, String, sign(token + page + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
    "list":[
            {
                "style": 0, Int,可能有其他显示类型,包括广告
                "aid": "123", String 文章ID
                "title":"那些马桶盖电饭锅的情怀", String
                "desc": "xxxx", String // 简述
                "iconUrls":"http://xxx.png", String
                "author": "xxx", String  //作者
                "avatar":"http://xxx.png" String // 头像url
                "tm": 1522821432, Long // Unix时间戳
            }
     ]
    }
}

订阅区订阅专栏接口

Request: POST /api/v1/subsspecial
Params:
* token
* page, 页码,不传默认1
* len, 获取文章数量, 不传默认20
* pver
* ver
* time
* sign, String, sign(token + page + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
    "list":[
            {
                "author": "xxx", String  // 作者笔名
                "userid": "xxx", String //作者ID
                "avatar":"http://xxx.png" String // 头像url
                "unread": 6, Int // 未读的更新文章数
            }
     ]
    }
}

订阅区专栏作者文章接口

Request: POST /api/v1/autharticle
Params:
* token
* userid // 作者id
* pver
* ver
* time
* sign, String, sign(token + userid + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
    "list":[
            {
                "style": 0, Int,可能有其他显示类型,包括广告
                "aid": "123", String 文章ID
                "title":"那些马桶盖电饭锅的情怀", String
                "desc": "xxxx", String // 简述
                "iconUrls":"http://xxx.png", String
                "tm": 1522821432, Long // Unix时间戳
            }
     ]
    }
}

个人信息读取接口

Request: POST /api/v1/getuinfo
Params:
* token
* pver
* ver
* time
* sign, String, sign(token + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
        "mobile": "13133332222", String // 用户注册手机号
        "avatar": "http://xxx.png", String // 用户头像url
        "pseudonym": “来读狂作家”, String  // 笔名
    }
}

个人信息更新接口

Request: POST /api/v1/updateuinfo
Params:
* token
* pver
* avatar // 修改后的用户头像url
* pseudonym // 修改后的用户笔名
* ver
* time
* sign, String, sign(token + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {}
}

我的收藏接口

Request: POST /api/v1/collection
Params:
* token
* page, 页码,不传默认1
* len, 获取文章数量, 不传默认20
* pver
* ver
* time
* sign, String, sign(token + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
    "list":[
            {//图文格式
                "style": 0, Int,可能有其他显示类型,包括广告
                "aid": "123", String 文章ID
                "title":"那些马桶盖电饭锅的情怀", String
                "iconUrls":"http://xxx.png" String
                "descrip": "在这个分分钟看数据的时代"  
                "author": "KELEJUN"
                "votes": 7172 // 投票数
                "award": "4.2w" // 奖金数
            }
     ]
    }
}

奖金明细接口

--- 待定

我的专栏接口(我的竞技、我的日常、我的投票)

我的竞技

Request: POST /api/v1/myspecial
Params:
* token
* page, 页码,不传默认1
* len, 获取数量, 不传默认20
* type, 获取的类型,0-我的竞技、1-我的日常、2-我的投票
* pver
* ver
* time
* sign, String, sign(token + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
    "list":[
            {//图文格式
                "style": 0, Int,可能有其他显示类型,包括广告
                "aid": "123", String 文章ID
                "title":"那些马桶盖电饭锅的情怀", String
                "iconUrls":"http://xxx.png" String
                "desc": "在这个分分钟看数据的时代"  
                "author": "KELEJUN"
                "avatar":"http://xxx.png" String // 头像url
                "votes": 7172 // 投票数
                "award": "4.2w" // 奖金数
            }
     ]
    }
}

我的消息接口

消息接口---文章评论

Request: POST /api/v1/msgcomments
Params:
* token
* page, 页码,不传默认1
* len, 获取数量, 不传默认20
* pver
* ver
* time
* sign, sign(token + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
        "list": [
            {
                "cid": "123", String // 评论ID
                "tm": 1522821432, Long // Unix时间戳
                "avatar":"http://xxx.png" String // 头像url
                "pseudonym": “来读狂作家”, String  // 笔名
                "content": "xxxx", String // 评论内容
                "article": "给你三天时间,带你", String // 文章标题
            },
            ...
        ]
    }
}

消息接口---站内私信

Request: POST /api/v1/privatemsg
Params:
* token
* page, 页码,不传默认1
* len, 获取数量, 不传默认20
* pver
* ver
* time
* sign, sign(token + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
        "list": [
            {
                "tm": 1522821432, Long // Unix时间戳
                "avatar":"http://xxx.png" String // 头像url
                "pseudonym": “来读狂作家”, String  // 笔名
                "content": "xxxx", String // 评论内容
            },
            ...
        ]
    }
}

个人附加信息接口(竞技情况、钱包情况)

Request: POST /api/v1/uextrainfo
Params:
* token
* pver
* ver
* time
* sign, sign(token + time)

Response:
{
    code: 0:正常, >1:其它错误按error信息提示
    msg: "",
    data: {
            "athArticleNum": 4, int // 参选文章数
            "cokeNum": 22, int  // 获得可乐数
            "capNum": 22, int  // 瓶盖数
            "fansNum": 254, int // 粉丝数
            "athReward": "223", String // 获奖奖金,可能有小数,用String类型
            "voteReward": "16", String // 投票奖金
            "capReward": "12", String // 瓶盖奖金
        ]
    }
}
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注