FiveCentApi_v0.1
-
线上“5美分公众号”后台正式地址为:http://www.my5meifen.com
-
请求以Json+POST方式发送
-
微信公众号用的是微信的账号的登录体系,该API以用户名、密码的方式登录
注:以用户名、密码方式登录的用户,在微信公众号中将成为“异类”,将产生垃圾数据,故测试时,请仅以:13810074247/123456进行测试,不要再注册新账号。
-
有Session的概念(放到Http Header中)
登录后产生一个Session,APP在在Http的Header中,设置"Cookie":“JSESSIONID=43EB9BCD75195335C7FDBC083A62C64F”,具体可后续提供参考代码。 Java 代码参考: RequestParams rp = new RequestParams(); rp.setHeader(“Cookie”, “JSESSIONID=43EB9BCD75195335C7FDBC083A62C64F”);
-
名词说明(回头单独找地方说明,先简单列下,为了能基本看明白JSON的字段含义,先猜着,回头字段详加说明)
- 先看下“magbuy_zh_CN.properties”这个文件,这个是后台用于多语言的支持的,对应英文字段的中文的Title
- event:活动
- oem:表示一个商家,这个写死的,这个把5美分本身作为一个商家,它是整个商城(mall)的一部分,原因在于外包是在一个商城代码裁剪为5美分公众号的,我们沿袭下,可以不理会;
- dapei:把用户上传的穿搭的照片称为”搭配":dapei
- suren:把分享“搭配”的用户称为"素人"
注:暂时接口还没有安全保护措施,HTTPS暂时也不支持
手机号+密码登录
该系统用户必须处于登录状态,如果用户离线状态,调用任何其他API,需提示“登录”。
Request headers
Request body
Responses
用户名或密码错
Body
登录成功
Body
用户名或密码错
POST http://www.my5meifen.com/api/login.do HTTP/1.1
Content-Type: application/json
{
"mobile": "13810074247",
"password": "111111"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"exception": "用户名密码错!"
}
登录成功
POST http://www.my5meifen.com/api/login.do HTTP/1.1
Content-Type: application/json
{
"mobile": "13810074247",
"password": "111111"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"entity": {
"_class_": "AccountExt",
"age": 1,
"income": 1,
"id": 86,
"account": {
"_class_": "Account",
"id": 1,
"accountLevel": {
"_class_": "AccountLevel",
"id": 1,
"type": "1",
"type_label": "会员",
"level": 1,
"spendAmount": 1,
"saleAmount": 1,
"rebatePercentAsBuyer": 1,
"rebatePercentAsParent": 1,
"rebatePercentAsGrandParent": 1,
"rebatePercentAsGreatGrandParent": 1,
"name": "会员",
"createTime": "2016-06-03 19:08:12",
"intParam1": 1,
"intParam2": 1,
"intParam3": 1
},
"accountLevel_label": "一般会员1级",
"openId": "11",
"password": "123456",
"scoreTotal": 1,
"scoreRebateTotal": 1,
"balance": 1,
"lockBalance": 1,
"rebateSummary": 1,
"mobile": "13535353531",
"sex": "1",
"sex_label": "",
"totalSpendAmount": 2500,
"headImgUrl": "noface.png",
"email": "45466@qq.com",
"signature": "TA很懒什么都没有留下哦",
"realName": "魅小可",
"lastMessageReadTime": "2017-04-11 17:08:27",
"oem": {
"_class_": "Oem",
"id": 1,
"code": "f9f0bc94f96245a5956f246d90a75370",
"wxAppId": "wxd5304af0f86fcdd9",
"wxAppSecret": "851c3528f8d6540af2dbf0eeb708a818",
"wxKey": "192006250b4c09247ec02eMarlon0812",
"wxMchId": "1425714602",
"wxIp": "127.0.0.1",
"wxPayNotifyUrl": "http://www.my5meifen.com/wx/payNotify.do",
"host": "http://www.my5meifen.com",
"createTime": "2016-06-03 19:08:11",
"intParam1": 1,
"intParam2": 1,
"intParam3": 1
},
"oem_label": "Oem:1",
"name": "魅小可",
"createTime": "2016-06-03 17:59:44",
"intParam1": 1,
"intParam2": 1,
"intParam3": 1
},
"account_label": "魅小可",
"accountLevel": {
"_class_": "AccountLevel",
"id": 1,
"type": "1",
"type_label": "会员",
"level": 1,
"spendAmount": 1,
"saleAmount": 1,
"rebatePercentAsBuyer": 1,
"rebatePercentAsParent": 1,
"rebatePercentAsGrandParent": 1,
"rebatePercentAsGreatGrandParent": 1,
"oem": {
"_class_": "Oem",
"id": 1,
"code": "f9f0bc94f96245a5956f246d90a75370",
"wxAppId": "wxd5304af0f86fcdd9",
"wxAppSecret": "851c3528f8d6540af2dbf0eeb708a818",
"wxKey": "192006250b4c09247ec02eMarlon0812",
"wxMchId": "1425714602",
"wxIp": "127.0.0.1",
"wxPayNotifyUrl": "http://www.my5meifen.com/wx/payNotify.do",
"host": "http://www.my5meifen.com",
"createTime": "2016-06-03 19:08:11",
"intParam1": 1,
"intParam2": 1,
"intParam3": 1
},
"oem_label": "Oem:1",
"name": "会员",
"createTime": "2016-06-03 19:08:12",
"intParam1": 1,
"intParam2": 1,
"intParam3": 1
},
"accountLevel_label": "一般会员1级",
"password": "123456",
"scoreTotal": 1,
"scoreRebateTotal": 1,
"balance": 1,
"lockBalance": 1,
"rebateSummary": 1,
"mobile": "13810074247",
"totalSpendAmount": 1,
"headImgUrl": "noface.png",
"oem": {
"_class_": "Oem",
"id": 1,
"code": "f9f0bc94f96245a5956f246d90a75370",
"wxAppId": "wxd5304af0f86fcdd9",
"wxAppSecret": "851c3528f8d6540af2dbf0eeb708a818",
"wxKey": "192006250b4c09247ec02eMarlon0812",
"wxMchId": "1425714602",
"wxIp": "127.0.0.1",
"wxPayNotifyUrl": "http://www.my5meifen.com/wx/payNotify.do",
"host": "http://www.my5meifen.com",
"createTime": "2016-06-03 19:08:11",
"intParam1": 1,
"intParam2": 1,
"intParam3": 1
},
"oem_label": "Oem:1",
"name": "123456",
"createTime": "2017-06-06 15:44:43",
"intParam1": 1,
"intParam2": 1,
"intParam3": 1
}
}
需要设置SessionID,即承接 1.1登录(手机号+密码),后面所有的API都是如此,不再单独说明。
Java 代码参考:
RequestParams rp = new RequestParams();
rp.setHeader("Cookie", "JSESSIONID=43EB9BCD75195335C7FDBC083A62C64F");
注意:第一期APP版本可不实现SessionID概念。
Responses
Body
在“活动”中点击进入“活动”详情
Request body
Responses
Body
在“活动”中点击进入“活动”详情
这个URL有点命名挺不靠谱的,怎么试eventList呢,应该是dapeiList还差不多
Request body
Responses
Body
在“活动”中点击进入“活动”详情,从活动的参与者推荐的“搭配”列表中点击一个进到“搭配”。
注意与下面搭配详情信息的接口4.2获取搭配详情区别,这个后台设计的有点啰嗦、重复,请反复体会dapei、account、account_ext的关联关系 实际没那么复杂,有很多废字段,先把关键字段的关联关系弄清楚即可。
Request body
Responses
Body
注意与上面搭配详情信息的接口4.1获取搭配信息区别,这个后台设计的有点啰嗦、重复,请反复体会dapei、account、account_ext的关联关系 实际没那么复杂,有很多废字段,先把关键字段的关联关系弄清楚即可。
Request body
Responses
Body
Request body
Responses
评论点赞List为空的响应结果
Body
评论点赞List不为空的响应结果
Body
评论点赞List不为空的响应结果
POST http://www.my5meifen.com/api/accountExt/dapeiCommentRate/list.do HTTP/1.1
Content-Type: application/json
{
"dapeiId": "220"
}
HTTP/1.1 200 OK
Content-Type: application/json
{
"success": true,
"count": 0,
"total": 0,
"records": [
{
"_class_": "DapeiCommentRate",
"id": 133,
"account": {
"_class_": "AccountExt",
"signature": "随便写一点,保存下。",
"age": 0,
"cityLabel": "北京北京",
"headBackgroundImg": "e0024789-c40b-4a01-aea4-c25714c2b182.JPG",
"income": 0,
"id": 77,
"accountLevel": {
"_class_": "AccountLevel",
"id": 1,
"type": "1",
"type_label": "会员",
"level": 1,
"spendAmount": 0,
"saleAmount": 0,
"rebatePercentAsBuyer": 0,
"rebatePercentAsParent": 0,
"rebatePercentAsGrandParent": 0,
"rebatePercentAsGreatGrandParent": 0,
"name": "会员",
"createTime": "2016-06-03 19:08:12",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"accountLevel_label": "一般会员1级",
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"scoreTotal": 0,
"scoreRebateTotal": 0,
"balance": 0,
"lockBalance": 0,
"rebateSummary": 0,
"sex": "0",
"sex_label": "",
"totalSpendAmount": 0,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"lastMessageReadTime": "2017-06-20 19:50:02",
"lastDashangMegReadTime": "2017-05-22 22:29:46",
"oem": {
"_class_": "Oem",
"id": 1,
"code": "f9f0bc94f96245a5956f246d90a75370",
"wxAppId": "wxd5304af0f86fcdd9",
"wxAppSecret": "851c3528f8d6540af2dbf0eeb708a818",
"wxKey": "192006250b4c09247ec02eMarlon0812",
"wxMchId": "1425714602",
"wxIp": "127.0.0.1",
"wxPayNotifyUrl": "http://www.my5meifen.com/wx/payNotify.do",
"host": "http://www.my5meifen.com",
"createTime": "2016-06-03 19:08:11",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"oem_label": "Oem:1",
"name": "徐JM",
"createTime": "2017-04-25 14:07:42",
"lastUpdateTime": "2017-06-20 21:24:07",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"account_label": "徐JM",
"dapeiComment": {
"_class_": "DapeiComment",
"id": 221,
"comment": "实验一下",
"commentTime": "2017-05-30 09:41:54",
"dapei": {
"_class_": "Dapei",
"id": 220,
"coverImgUrl": "/upload/file/75ac7bb6-ac8f-4518-9e78-75624d6811e2.png,",
"rateCount": 0,
"createTime": "2017-05-14 11:30:48",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"dapei_label": "Dapei:220",
"rateCount": 2,
"account": {
"_class_": "AccountExt",
"signature": "随便写一点,保存下。",
"age": 0,
"cityLabel": "北京北京",
"headBackgroundImg": "e0024789-c40b-4a01-aea4-c25714c2b182.JPG",
"income": 0,
"id": 77,
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"scoreTotal": 0,
"scoreRebateTotal": 0,
"balance": 0,
"lockBalance": 0,
"rebateSummary": 0,
"sex": "0",
"sex_label": "",
"totalSpendAmount": 0,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"lastMessageReadTime": "2017-06-20 19:50:02",
"lastDashangMegReadTime": "2017-05-22 22:29:46",
"name": "徐JM",
"createTime": "2017-04-25 14:07:42",
"lastUpdateTime": "2017-06-20 21:24:07",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"account_label": "徐JM",
"createTime": "2017-05-30 09:41:54",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"dapeiComment_label": "DapeiComment:221",
"createTime": "2017-06-01 11:31:11",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
{
"_class_": "DapeiCommentRate",
"id": 134,
"account": {
"_class_": "AccountExt",
"signature": "随便写一点,保存下。",
"age": 0,
"cityLabel": "北京北京",
"headBackgroundImg": "e0024789-c40b-4a01-aea4-c25714c2b182.JPG",
"income": 0,
"id": 77,
"accountLevel": {
"_class_": "AccountLevel",
"id": 1,
"type": "1",
"type_label": "会员",
"level": 1,
"spendAmount": 0,
"saleAmount": 0,
"rebatePercentAsBuyer": 0,
"rebatePercentAsParent": 0,
"rebatePercentAsGrandParent": 0,
"rebatePercentAsGreatGrandParent": 0,
"name": "会员",
"createTime": "2016-06-03 19:08:12",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"accountLevel_label": "一般会员1级",
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"scoreTotal": 0,
"scoreRebateTotal": 0,
"balance": 0,
"lockBalance": 0,
"rebateSummary": 0,
"sex": "0",
"sex_label": "",
"totalSpendAmount": 0,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"lastMessageReadTime": "2017-06-20 19:50:02",
"lastDashangMegReadTime": "2017-05-22 22:29:46",
"oem": {
"_class_": "Oem",
"id": 1,
"code": "f9f0bc94f96245a5956f246d90a75370",
"wxAppId": "wxd5304af0f86fcdd9",
"wxAppSecret": "851c3528f8d6540af2dbf0eeb708a818",
"wxKey": "192006250b4c09247ec02eMarlon0812",
"wxMchId": "1425714602",
"wxIp": "127.0.0.1",
"wxPayNotifyUrl": "http://www.my5meifen.com/wx/payNotify.do",
"host": "http://www.my5meifen.com",
"createTime": "2016-06-03 19:08:11",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"oem_label": "Oem:1",
"name": "徐JM",
"createTime": "2017-04-25 14:07:42",
"lastUpdateTime": "2017-06-20 21:24:07",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"account_label": "徐JM",
"dapeiComment": {
"_class_": "DapeiComment",
"id": 222,
"comment": "OK不",
"commentTime": "2017-05-30 09:43:49",
"dapei": {
"_class_": "Dapei",
"id": 220,
"coverImgUrl": "/upload/file/75ac7bb6-ac8f-4518-9e78-75624d6811e2.png,",
"rateCount": 0,
"createTime": "2017-05-14 11:30:48",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"dapei_label": "Dapei:220",
"rateCount": 1,
"account": {
"_class_": "AccountExt",
"signature": "hi,欢迎来到5美分",
"age": 27,
"cityLabel": "北京",
"headBackgroundImg": "2781ff35-4dad-4d1a-8ef8-1de16673d235.JPG",
"income": 1,
"id": 28,
"openId": "o1llAxMIn02G5Zsa-Iiqv4WzdAEc",
"password": "1",
"scoreTotal": 0,
"scoreRebateTotal": 0,
"balance": 76598,
"lockBalance": 0,
"rebateSummary": 0,
"mobile": "12345678901",
"sex": "0",
"sex_label": "",
"totalSpendAmount": 0,
"headImgUrl": "http://wx.qlogo.cn/mmopen/tjiajuWPpxQmUJVupjLAiaB3W0aZpMKmSXA8wmyYhT0pQMGcPgjbXbI3lYlvUUzWLFmWL1zHTp5DiaWib6m5WcTvibwxiaMec866Ig/0",
"lastMessageReadTime": "2017-06-07 14:06:32",
"lastDashangMegReadTime": "2017-06-12 16:04:10",
"name": "孙",
"createTime": "2016-12-17 13:39:48",
"lastUpdateTime": "2017-06-18 21:31:00",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"account_label": "孙",
"returnedAccount": {
"_class_": "AccountExt",
"signature": "随便写一点,保存下。",
"age": 0,
"cityLabel": "北京北京",
"headBackgroundImg": "e0024789-c40b-4a01-aea4-c25714c2b182.JPG",
"income": 0,
"id": 77,
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"scoreTotal": 0,
"scoreRebateTotal": 0,
"balance": 0,
"lockBalance": 0,
"rebateSummary": 0,
"sex": "0",
"sex_label": "",
"totalSpendAmount": 0,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"lastMessageReadTime": "2017-06-20 19:50:02",
"lastDashangMegReadTime": "2017-05-22 22:29:46",
"name": "徐JM",
"createTime": "2017-04-25 14:07:42",
"lastUpdateTime": "2017-06-20 21:24:07",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"returnedAccount_label": "徐JM",
"returnedCommentId": 221,
"createTime": "2017-05-30 09:43:49",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
},
"dapeiComment_label": "DapeiComment:222",
"createTime": "2017-06-01 11:31:14",
"intParam1": 0,
"intParam2": 0,
"intParam3": 0
}
]
}
弹出打赏金额等信息,与后台进行交互。
Request body
Responses
Body
对搭配进行评论
returnedCommentId为null
或者对某评论进行回复
returnedCommentId不为null
Request body
Responses
Body
操作步骤:可以从很多步骤进入“素人”显示界面,以下接口均为进入“素人”后被调用的接口,有一些在“搭配”界面已经调用过。
由于该系统是从微信公众号登录来的,这个接口放在里面,用于加深对系统的理解。
Request body
accountId
Responses
Body
accountExtId
由于该系统是从微信公众号登录来的,这个接口放在里面,用于加深对系统的理解。
Request body
accountId
Responses
Body
素人页面显示的几个搭配信息
Request body
Responses
Body
进一步点击全部显示全部搭配
Request body
Responses
有两个搭配
Body
注意:在素人页面取消了显示粉丝,故在素人界面不需要调用此接口。
Request body
Responses
Body
查看所有粉丝/支持翻页
Request body
Responses
Body
注意:在素人页面取消了显示评论,因为评论是针对“搭配”的,不是针对素人的,原5美分公众号是在素人页面显示所有的搭配的评论。产品逻辑不通,去掉了。 要取素人的所有评论,只需要将搭配id为空即可。
Request body
一次取6条
Responses
Body
注意:在素人页面取消了显示评论,因为评论是针对“搭配”的,不是针对素人的,原5美分公众号是在素人页面显示所有的搭配的评论。产品逻辑不通,去掉了。 要取素人的所有评论,只需要将搭配id为空即可。
Request body
为""则获取所有搭配
Responses
Body
没登录提示登录,登录了Session中应该有accountId
Responses
Body
Responses
Body
Responses
有新消息
Body
用户可上下滑动,相当于翻页
- 第一页: {“start”:0,“limit”:6}
- 第二页: {“start”:6,“limit”:6}
以此类推
Request body
Responses
第一页
Body
{“start”:6,“limit”:6},往下翻没有了
Body
用户可上下滑动,相当于翻页
- 第一页: {“start”:0,“limit”:6}
- 第二页: {“start”:6,“limit”:6}
以此类推
Request body
Responses
第一页
Body
Responses
第一页
Body
Request body
Responses
第一页
Body
就是Post 二进制文件
POST http://www.my5meifen.com/upload.servlet HTTP/1.1
Host: www.my5meifen.com
Connection: keep-alive
Content-Length: 44895
Accept: application/json, text/plain, */*
Content-Type: image/png
Origin: http://www.my5meifen.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.493.400 QQBrowser/9.0.2524.400
X_FILENAME: %u6211%u7684%u6D88%u606F%u201C%u6536%u5230%u7684%u70B9%u8D5E%u201D.png
Referer: http://www.my5meifen.com/html/index.do
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en-us;q=0.6,en;q=0.5;q=0.4
Cookie: JSESSIONID=1C0E80E296E25A9F559FB2782C61ACFC; openId=o1llAxCbSi__jN-FFNJj6Cdy_jzI
PNG的二进制
Request body
就是图片的二进制
Responses
第一页
Body
点进“消息”后:包括收到的评论和收到的点赞
Responses
第一页
Body
接口1:上传
- /upload.servlet 即接口7.8修改头像或背景图 相同的接口
接口2:裁剪(不知道干啥用了,也许是告诉后台,现在要开始裁剪了,准备记录一些中间数据也有可能)
-
/api/cropper/cropper.do
发送:
{"fileName":"45f4c9bd-867c-48d6-8be9-74900288d0b4.jpg"}
响应:
{"success":true,"path":"/upload/file/45f4c9bd-867c-48d6-8be9-74900288d0b4.jpg"}
接口3:裁剪 (应该是真正裁剪了,但为啥是base64呢???!!!!)
-
/api/cropper/cropperImg.do
发送:
{"imgStr":"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAlc"}
响应:
{
“success”: true, “path”: “/upload/file/8d9d1de5-a62c-4754-af54-213f107eba8c.png” } 接口4:再上传(能不能最后一步上传)
-
/upload.servlet
发送:
图片二进制
响应:
{"success":true,"path":"/upload/file/45f4c9bd-867c-48d6-8be9-74900288d0b4.jpg"}
接口5:打标签->标题+内容 (JS实现), 真正提交,是下面API:
-
/api/dapeiDetail/upload.do
发送:
{ “tagStr”: [ { “left”: 0.6937, “top”: 0.1526, “index”: 1, “content”: “name 10元” } ], “imgUrl”: “/upload/file/8d9d1de5-a62c-4754-af54-213f107eba8c.png,”, “title”: “title”, “content”: “no say”, “links”: [ { “index”: “1”, “address”: “www.baidu.com” } ], “codeStr”: [ { “index”: “1”, “url”: “/upload/file/1e49761e-abca-47e2-80e8-e3b13c6b4b3d.jpg” } ], “eventId”: “” }
响应:
{"success":true}
测试环境地址:http://www.my5meifen.com/fivecentsbackend
HTTP Client的设置:
Content-Type: application/json;charset=UTF-8
返回值 规定:
{
"success": false,
"resultCode": 4, // 0表示正确,>1表示不同的错误情况
"resultMsg": "System error! 没有活动相关数据",
"data": null //这是对象,可为空
}
回头形成一个错误码对照表。
所有的新版API均会返回上述固定的字段。
搞清楚几个对象的定义及关系:(可能字段有变动,详见具体接口)
-
1 精选(或称活动)
public class Event { //主键ID private Long eventId; //活动标题 private String title; //创建时间 private Long createTime; //图片URL private String imgUrl; //排序序号 private Integer orderIndex;
-
2 精选(或称活动)详情
public class EventDetail {
private Event event; //活动名称 private String name; //活动内容描述 private String content; //活动状态 0:下线 1:上线 private String status ; //内容形式 1:文本 2:图文 private String type;
-
3 主题
public class Theme { //主键ID private Long themeId; //主题标题 private String title; //创建时间 private Long createTime; //图片URL private String imgUrl; //排序序号 private Integer orderIndex;
-
4 Account
public class Account { private Long accountId; private String name; // 昵称 private String headImgUrl; // 头像
private Long createTime; // 创建时间 private Boolean newUser; // XZY:是否为新用户(登录注册时的判断,该值针对的是用户自身才有意义) private String token; // XJM:即sessionId = request.getSession().getId();有冗余
-
5 AccountDetail
public class AccountDetail {
private Account account; private String openId; private String uid; private String mobile; private String sex; // 性别 private String signature; // 个性签名 private String city =""; // 城市/位置 private String headBackgroundImg; // 头像背景图 private Date lastMessageReadTime; private Date lastDashangMegReadTime; private Long focusCount; // 关注素人数 private Long fansCount; // 粉丝数 // 这个可能比较绕,如果该账号信息的当前用户就是自身怎么办? // 可能在使用之前需要判断下此id和accountId是否相等 private Boolean focus; // 是否被当前accountId关注(如果当前用户没有登录则肯定默认是false) // 如果是本人,则无法关注本人,此值为false
-
6 Dapei
public class Dapei {
private Long dapeiId; private Date createTime // 创建时间 :新增 by 2018-8-5 private String coverImgUrl; //搭配图片 private Integer rateCount; //搭配点赞数量 private Integer favCount; //搭配收藏数量:新增 by 2017-8-1 private Long eventId; //参加的精选(xjm:没有参加精选就是NULL或0) private Long themeId; //参加的主题(xjm:没有参加主题就是NULL或0) private Account account; //素人
-
7 DapeiDetail
public class DapeiDetail { private Long dapeiDetailId; private String title; //标题 private String content; //内容 private Dapei dapei; //搭配 /* * 为了减少访问后台的次数,一次性的将此参数取到方便后面使用 */ private Boolean fav; // 是否被当前accountId收藏 private Boolean rate; // 是否被当前accountId点赞 // 这个可能比较绕,如果该账号信息的当前用户就是自身怎么办? // 可能在使用之前需要判断下此id和accountId是否相等 private Boolean focus; // 是否被当前accountId关注(如果当前用户没有登录则肯定默认是false)
-
8 DapeiDetailTag
public class DapeiDetailTag { private Long dapeiDetailTagId; private Double leftPer; // 离左边的占比 private Double topPer; // 离顶部的占比 private String tagContent; // “标签名称 价格”的组合,例如:“标签1 1元” /* * XJM:现在只支持上传1个搭配 */ //private String page; // 第几页 private String link; // 购买链接 private String imgUrl; // 购买链接的二维码图片地址
private DapeiDetail dapeiDetail; // 搭配页
-
9 DapeiComment
public class DapeiComment { private Long commentId; private String comment; //搭配评论 private Date commentTime; //评论时间 private Integer rateCount; //评论点赞数量 private Dapei dapei; //搭配 private Account account; //评论人,本条评论的发布者 /* * 如果returnedCommentId为null,这说明这个评论是本account主动发起的针对Dapei的评论,不是回复谁的评论 */ private Long returnedCommentId; //是针对哪个评论Id进行的回复 private Account returnedAccount; //是回复哪个人的评论 /* * 我发的评论,包括主动发起的(returnedCommentId为null),和回复别人的评论(returnedCommentId不为null) * 一种评论树情况,比如针对A说“一楼”,B说“你是一楼我二楼”,C说“你是二楼我是三楼”,这种情况,B、C都是因A话题的话题而起的评论 * 故returnedCommentId均为“一楼”对应的该评论Id,只是B针对的人是A,C针对的人是B而已 * 都属于A的returnedComment */ private List returnedComment; //自己发的评论被回复 // 2017-8-1新添加:本人(本登录用户)是否对该评论点赞,如果用户未登录,此值即没有意义 private Boolean rate = false;
-
10 DapeiCommentRate(谁对我的评论进行了点赞)
public class DapeiCommentRate { private Long dapeiCommentRateId; private Date commentRateTime; // 评论被点赞时间 private Account account; // 素人 private DapeiComment dapeiComment; // 是哪条评论
-
11 Focus(谁关注了我)
public class Focus { private Long focusId; private Date focusTime; // 关注时间 private Long accountId; // 自己 private Account account; // 关注的人
-
12 DapeiRate(谁对我的搭配进行了点赞)
public class DapeiRate { private Long dapeiRateId; private Date rateTime; // 点赞时间 private Account account; // 点赞的人 private Dapei dapei; // 被点赞的搭配
-
13 DapeiFav(谁对我的搭配进行了收藏)
public class DapeiFav { private Long dapeiRateId; private Date favTime; // 收藏时间 private Account account; // 收藏的人 private Dapei dapei; // 被收藏的搭配
手机登录、注册相关
- 手机号+密码登录 见
- 手机号+验证码登录
- 获取验证码(验证码登录、忘记密码、修改密码)
注意,发送短信在10分钟内发送同一份验证码,终端超过1分钟不让重复发送。
发送短信获取验证码的最低间隔时间为1分钟(60秒),否则要给与提示
验证码,4位还是6位研发定,有专门生成验证码的开源代码。(暂定6位,格式类似 8uhc8a ,字母数字随机组合)
验证码不需要返回客户端,后台生成、后台比对,
这个一般在后台比对。
短信验证码10分钟有效。
测试阶段,验证码默认为“111111”。
TO 研发:直接弹出消息框,文本先自己想,后面规范
Request parameters
Responses
Body
0表示已发送;1表示发送时间未超过1分钟。
获取短信验证码返回结果
{
"data": true,
"resultCode": 0,
"resultMsg": "Success!",
"success": true
}
发送短信获取验证码的最低间隔时间为1分钟(60秒),否则要给与提示
验证码,4位还是6位研发定,有专门生成验证码的开源代码。
验证码不需要返回客户端,后台生成、后台比对,
这个一般在后台比对。
短信验证码10分钟有效。
**测试阶段,验证码默认为“111111”。**
TO 研发:直接弹出消息框,文本先自己想,后面规范
错误码resultCode:
- 1:手机号未生成验证码 resultCode:11
- 2:验证码错误 resultCode:12
- 3:验证码失效 resultCode:13
详细的错误码后续完善。
手机号注册分四步:
- 第一步:获取短信验证码,即接口1.1获取验证码
- 第二步:短信验证码注册(注册后即登录)即本接口1.6注册(手机号)
- 第三步:补充账号属性:即接口1.7注册(补充属性) 填写一些个人信息,包括昵称、密码、性别 (需要做)
- 第四步:甚至给用户推荐素人等。 (当前阶段不需要做)
返回的数据结构(data中的对象)以此为准(所有的登录成功都返回下面接口): 1. Account public class Account { private Long accountId; private String name; // 昵称 private String headImgUrl; // 头
private Long createTime; // 创建时间
private Boolean newUser; // XZY:是否为新用户(登录注册时的判断,该值针对的是用户自身才有意义)
private String token; // 即sessionId = request.getSession().getId()
}
注意:只有手机号 + 验证码登录才需要判断
newUser标志,如果没有完善password,就表示是newUser,就需要提示用户完善昵称、性别、密码。
对于其他登录,这个值没有意义。
Request parameters
6位 数字+字母组合串 比如:9886bx 目前测试阶段请求参数默认传 “111111”
Responses
Body
验证成功返回消息,新用户 newuser:true 老用户 newuser:false
{
"data": {
"accountId": 102,
"focus": false,
"headImgUrl": "noface.png",
"lastDashangMegReadTime": null,
"lastMessageReadTime": null,
"mobile": "18911468316",
"newUser": true,
"openId": null,
"password": null,
"sex": "1",
"signature": null,
"uid": null
},
"resultCode": 0,
"resultMsg": "Success!",
"success": true
}
验证码错误
{
"data": null,
"resultCode": 12,
"resultMsg": "手机号验证码错误",
"success": false
}
超时验证返回结果
{
"data": null,
"resultCode": 13,
"resultMsg": "手机号验证码失效",
"success": false
}
该系统用户必须处于登录状态,如果用户离线状态,调用任何其他API,需提示“登录”。
返回的数据结构(data中的对象)以此为准:
-
Account public class Account { private Long accountId; private String name; // 昵称 private String headImgUrl; // 头
private Long createTime; // 创建时间 private Boolean newUser; // XZY:是否为新用户(登录注册时的判断,该值针对的是用户自身才有意义) private String token; // 即sessionId = request.getSession().getId() }
测试用例:13810074247/123456 是可以成功登录。
Request body
Responses
用户名密码错!
Body
登录成功
Body
微信移动端登陆,若用户不存在会自动创建 返回的数据结构(data中的对象)以此为准:
-
Account
public class Account { private Long accountId; private String name; // 昵称 private String headImgUrl; // 头
private Long createTime; // 创建时间 private Boolean newUser; // XZY:是否为新用户(手机号登录注册时的判断,该值针对的是用户自身才有意义) private String token; // 即sessionId = request.getSession().getId() }
Request parameters
Responses
Body
{"data":{"accountId":12345,"createTime":0,"headImgUrl":"http://fivecent-pic.oss-cn-beijing.aliyuncs.com/tro.png","name":"李四","newUser":false,"token":"idshfiwehshdfh1"},"resultCode":0,"resultMsg":"Success!","success":true}
微博移动端登陆,若用户不存在会自动创建 返回的数据结构(data中的对象)以此为准:
-
Account
public class Account { private Long accountId; private String name; // 昵称 private String headImgUrl; // 头
private Long createTime; // 创建时间 private Boolean newUser; // XZY:是否为新用户(手机号登录注册时的判断,该值针对的是用户自身才有意义) private String token; // 即sessionId = request.getSession().getId() }
Request parameters
Responses
Body
{"data":{"accountId":12345,"createTime":0,"headImgUrl":"http://fivecent-pic.oss-cn-beijing.aliyuncs.com/tro.png","name":"李四","newUser":false,"token":"idshfiwehshdfh1"},"resultCode":0,"resultMsg":"Success!","success":true}
QQ移动端登陆,若用户不存在会自动创建 返回的数据结构(data中的对象)以此为准:
-
Account
public class Account { private Long accountId; private String name; // 昵称 private String headImgUrl; // 头
private Long createTime; // 创建时间 private Boolean newUser; // XZY:是否为新用户(手机号登录注册时的判断,该值针对的是用户自身才有意义) private String token; // 即sessionId = request.getSession().getId() }
Request parameters
Responses
Body
{"data":{"accountId":12345,"createTime":0,"headImgUrl":"http://fivecent-pic.oss-cn-beijing.aliyuncs.com/tro.png","name":"李四","newUser":false,"token":"idshfiwehshdfh1"},"resultCode":0,"resultMsg":"Success!","success":true}
手机号注册成功后,还有:
- 填写一些个人信息,包括昵称、性别等 (本接口)
- 甚至给用户推荐素人等。 (当前阶段不需要做)
性别字段(gender):男性是“0”、女性是“1”,未知是“2”。
这个值的设计是沿用以前后台的定义,有不合理之处(默认应该是女性才对)
APP分两步完善用户信息,但调用本接口仅一次(合起来一次):
1、APP完善password; (可略过))
2、APP完善nickname 和gender;(可略过)
注意:用户信息中有中文的,HTTP Client中的编码必须为utf-8,如下:
Content-Type: application/json;charset=UTF-8
Request body
6-16位,数字或字母
男性是“0”、女性是“1”,未知是“2”
Responses
Body
0表示已发送;1表示发送时间未超过1分钟。
手机号注册成功后,还有:
- 提示设置密码 (需要使用前面的验证码)
- 或者在个人资料出修改自己的密码 (获取新的验证码)
注意:设置或修改密码的步骤是一样的:
- 需要验证码;
- 新密码。(注意,不需要旧密码)
注意:这个接口只针对手机号注册的账号。
Request body
验证码
6-16位,数字或字母
Responses
Body
需要设置SessionID,即承接 1.3登录:手机号+密码(OK),后面所有的API都是如此,不再单独说明。
Java 代码参考:
RequestParams rp = new RequestParams();
rp.setHeader("Cookie", "JSESSIONID=43EB9BCD75195335C7FDBC083A62C64F");
活动(Event)数据结构:
public class Event {
//主键ID
private Long eventId;
//活动标题
private String title;
//创建时间
private Long createTime;
//图片URL
private String imgUrl;
//排序序号
private Integer orderIndex;
注意:本接口无需登录即可访问
Request parameters
页面数量
Responses
Headers
Body
0:成功,大于0 失败,具体错误码与resultMsg对应
{
"data": [
{
"createTime": 1492687164000,
"id": 3,
"imgUrl": "es4.jpg,",
"orderIndex": 2,
"title": "带我逃避的镇宅之宝"
},
{
"createTime": 1492600765000,
"id": 4,
"imgUrl": "es1.jpg,",
"orderIndex": 3,
"title": "5美分与你的初次相遇"
}
],
"resultCode": 1,
"resultMsg": "Success!",
"success": true
}
操作步骤:在“活动”中点击进入“活动”详情
活动详情(EventDetail)数据结构:
public class EventDetail {
// 活动
Event event;
/*
* 进一步的详情信息
*/
//活动名称
private String name;
//活动内容描述
private String content;
//活动状态 0:下线 1:上线
private String status ;
//内容形式 1:文本 2:图文
private String type;
注意:本接口无需登录即可访问
Request parameters
活动Id,现在也称为精选Id
Responses
Body
{
"data":{"content":"茶道虽然起源于中国,但下午茶却在英国形成流行文化,在那里下午茶既是社交入门又是时尚象征。而这种精致的仪式感正被越来越多少女所推崇。而这种场合的穿搭不能太庄重也不能太俏皮。快来up你的惬意搭配。如《小王子》说:如果你说你下午四点来,从三点开始我就感到很快乐,时间越临近,我就越快乐。",
"createTime":1493032762000,
"id":1,
"imgUrl":"es2.jpg,",
"name":"活动一",
"status":"1",
"title":"我的惬意下午茶时间",
"type":"1"
},
"resultCode":0,"resultMsg":"Success!","success":true}
这个URL有点命名挺不靠谱的。
返回"Dapei"的列表
注意:本接口无需登录即可访问
Request parameters
Responses
Body
发送如下JSON 到后台(老:已实现):
注意区分tagStr中的index和links、codeStr中的index的含义不一样,tagStr中数组的元素序号index+1相当于links、codeStr中的index
{
"imgUrl": "/upload/file/fefe5432-931e-4dfc-8ec8-87226ae5c790.png,", // 裁剪后的搭配照片
"title": "title1", // 搭配标题
"content": "content1", // 搭配描述
"eventId": "4" // 参与哪个活动的Id
"tagStr": [ // 标签数组,标签是根据位置有顺序的(!!!???采用JsonArray应该是有序的)
{ // 第1个标签:标签的顺序是根据JsonArray这个本身有先后的
"left": 0.7197, // 标签位置
"top": 0.2, // 标签位置
"index": 1, // 第几张搭配图,原5美分支持多张图,现在仅支持1张图,index从1开始,值就是1,没有别的值
"content": "tag1 1元" // “tag的名称 与价格” 这是一个组合串
},
{ // 第2个标签:标签的顺序是根据JsonArray这个本身有先后的
"left": 0.6928,
"top": 0.5075,
"index": 1,
"content": "tag2 2元"
},
{ // 第3个标签:标签的顺序是根据JsonArray这个本身有先后的
"left": 0.6345,
"top": 0.7522,
"index": 1,
"content": "tag3 3元"
}
],
"links": [ // 背后购买的商城地址
{
"index": "1", // 第1个标签
"address": "http://abc.123" // 背后的商城地址
},
{
"index": "2", // 第2个标签
"address": "http://abc.1234"
},
{
"index": "3",
"address": "http://abc.12345"
}
],
"codeStr": [
{
"index": "1", // 第1个标签
"url": "/upload/file/b9ee1770-64e7-4c20-b520-92a7b80bea78.jpg" // 二维码地址的图片
}
]
}
发送如下JSON 到后台(新:还未实现,请仍用老结构):
{
"imgUrl": "/upload/file/fefe5432-931e-4dfc-8ec8-87226ae5c790.png,", // 裁剪后的搭配照片
"title": "title1", // 搭配标题
"content": "content1", // 搭配描述
"eventId": "4", // 参与哪个活动的Id
"tag": [ // 标签数组,标签是根据位置有顺序的(!!!???)
{
"left": 0.7197, // 标签位置
"top": 0.2, // 标签位置
"index": 1, // 标签顺序索引
"content": "tag1 1元" // “tag的名称 与价格” 这是一个组合串
"link":"http://abc.123", // 背后的商城地址
"codeUrl":"/upload/file/b9ee1770-64e7-4c20-b520-92a7b80bea78.jpg" // 二维码地址的图片
},
{
"left": 0.6928,
"top": 0.5075,
"index": 2,
"content": "tag2 2元",
"link":"http://abc.1234", // 背后的商城地址
"codeUrl":null
},
{
"left": 0.6345,
"top": 0.7522,
"index": 3,
"content": "tag3 3元",
"link":"http://abc.12345",
"codeUrl":null
}
]
}
返回新搭配Id
即data中有dapeiId字段,读取即可。
注意:本接口需要提示登录才可访问
返回值采用新版API的返回值,见新版API说明
由于主题不会有很多,所以没有必要分页请求,可以一次性请求回来。 但是后续不排除有很多主题的可能性,所以现在接口层次保留有分页功能。
具体是否要实现分页功能,研发人员自行把握。
返回主题(Theme)的数据接口的List:
public class Theme {
//主键ID
private Long themeId;
//主题标题
private String title;
//创建时间
private Long createTime;
//图片URL
private String imgUrl;
//排序序号
private Integer orderIndex;
注意:本接口无需登录即可访问
Request parameters
Responses
Body
这个接口用于两个地方
- 在“首页”->“主题”中直接显示“搭配列表”,用户横向滑动 (默认选前10个搭配)
- 在“首页”->“主题”中的“主题”的“精选集”上点击,显示主题的所有搭配列表 (第一页显示1中的搭配,然后依次翻页) 结合2.获取首页主题信息进行理解 前台确认不用RESTFUL风格:/api/home/theme/list/{themeId},通过REQUEST 的Parameters传递或REQUEST的BODY传递
返回值与2.3获取该精选下搭配List(OK)同,即"Dapei"的列表
注意:本接口无需登录即可访问
Request parameters
Request body
Responses
Body
这个接口为了配合界面呈现做了扩展,即获取到“主题信息List”时,顺便获取到其中每个主题对应的10个Dapei信息,如下:
在Theme实体中加入了dapeis(即搭配的列表)信息,如下:
返回主题(Theme)的数据接口的List:
public class Theme {
//主键ID
private Long themeId;
//主题标题
private String title;
//创建时间
private Long createTime;
//图片URL
private String imgUrl;
//排序序号
private Integer orderIndex;
private List dapeis; // 2017-08-21 新添加的对应主题下的最新的搭配列表
注意:本接口无需登录即可访问
Request parameters
Responses
Body
搭配列表信息
获取本人关注的最新的搭配,包含参加过活动的搭配(原先认为应该排除在外)
(关注的人上传的搭配,根据搭配的上传的时间,时间约新约靠前)
原接口URL为/myeve -> /homeDapeiList
注意:本接口需登录才可访问,调用此接口前未登录需提示登录。
Request parameters
Responses
Body
返回最热素人List,即Account的List
TODO:本人是否关注了这个素人还没有给Account中的相应字段赋值
注意:默认最多查10个,APP采用默认即可
- “最热搭配:APP默认取10个即可”
- “最全搭配:按照分页取即可,第一页可以用前面最热素人取回的结果”
Request parameters
Responses
Body
POST http://www.my5meifen.com/fivecentsbackend/api/v2/accountExt/popList.do HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"resultCode": 0,
"resultMsg": "Success!",
"data": [
{
"accountId": 93,
"openId": "o1llAxMvFmzcrJjg_5zz09mGEdIk",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/Q3auHgzwzM7NE1wnqEjLndpa6zwsRtN4o7xibd8NWLdwPw8kicOaKFeEGib87IUVXjWYoYU5cJl1jVSqG69jpgehribwvXHuOSWWiciaZ7ibsIUIx8/0",
"signature": null,
"lastMessageReadTime": 1498282857000,
"lastDashangMegReadTime": 1498349664000,
"focus": false,
"newUser": null
},
{
"accountId": 96,
"openId": "o1llAxE3NphIyHBxQgErxhXN41Mw",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/iattVXXVzah28A85Pm40jDkk4lKnev7axpf8wc1mTZJVUEQICgtIXJHKpS50I6rw44QjdDQgiaHmY4TArhx0d0ib4WeRrPo2bdr/0",
"signature": null,
"lastMessageReadTime": 1498667018000,
"lastDashangMegReadTime": 1498667005000,
"focus": false,
"newUser": null
},
{
"accountId": 88,
"openId": "o1llAxLwDVqgGTzcVprbhShE4cv4",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvo8guul5HRnKy22AfDGButC5coYUBpmvBYrfAuTakdsdY92YyobHUKMmdQ4wySkfvrZHqL0RatUI/0",
"signature": null,
"lastMessageReadTime": 1497257318000,
"lastDashangMegReadTime": 1497254197000,
"focus": false,
"newUser": null
},
{
"accountId": 94,
"openId": "o1llAxPsi6J9yrfZpj6gKB-K5Hmc",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/QnM5bMcic4Z0QduE07PqmCsbSWApWNREBkAnptPKZAle9AI7yV5tSoJIR4E4BuIMWrj9Kq0QBwwlFyWziczbVQkw/0",
"signature": null,
"lastMessageReadTime": null,
"lastDashangMegReadTime": null,
"focus": false,
"newUser": null
},
{
"accountId": 77,
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"signature": "随便写一点,保存下。",
"lastMessageReadTime": 1497959402000,
"lastDashangMegReadTime": 1495463386000,
"focus": false,
"newUser": null
}
],
"success": true
}
返回最热Dapei的List
注意:不包括参与活动的搭配。
关于分页查询:默认就最多返回10个,也支持分页查询功能,APP可以直接使用默认即可 1、默认最多查10个; 2、也支持分页查询功能。
“全部搭配”采用分页方式取即可。第一页可以用前面最热搭配取回的结果
注:老接口为/api/dapei/popDapeiList.do
Request parameters
Responses
Body
POST http://www.my5meifen.com/fivecentsbackend/api/v2/accountExt/popList.do HTTP/1.1
HTTP/1.1 200 OK
Content-Type: application/json
{
"resultCode": 0,
"resultMsg": "Success!",
"data": [
{
"dapeiId": 227,
"coverImgUrl": "/upload/file/44fa3d8a-1f1a-4091-b0a7-3d5cf76c0449.png,",
"rateCount": 1,
"account": {
"accountId": 96,
"openId": "o1llAxE3NphIyHBxQgErxhXN41Mw",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/iattVXXVzah28A85Pm40jDkk4lKnev7axpf8wc1mTZJVUEQICgtIXJHKpS50I6rw44QjdDQgiaHmY4TArhx0d0ib4WeRrPo2bdr/0",
"signature": null,
"lastMessageReadTime": 1498667018000,
"lastDashangMegReadTime": 1498667005000,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
},
{
"dapeiId": 225,
"coverImgUrl": "/upload/file/05b86a3d-c06e-492b-b8b9-de427c16bd02.png,",
"rateCount": 2,
"account": {
"accountId": 93,
"openId": "o1llAxMvFmzcrJjg_5zz09mGEdIk",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/Q3auHgzwzM7NE1wnqEjLndpa6zwsRtN4o7xibd8NWLdwPw8kicOaKFeEGib87IUVXjWYoYU5cJl1jVSqG69jpgehribwvXHuOSWWiciaZ7ibsIUIx8/0",
"signature": null,
"lastMessageReadTime": 1498282857000,
"lastDashangMegReadTime": 1498349664000,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
},
{
"dapeiId": 224,
"coverImgUrl": "/upload/file/4b3f5d23-d393-4f76-9e3a-904f5ebbbdbf.png,",
"rateCount": 0,
"account": {
"accountId": 94,
"openId": "o1llAxPsi6J9yrfZpj6gKB-K5Hmc",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/QnM5bMcic4Z0QduE07PqmCsbSWApWNREBkAnptPKZAle9AI7yV5tSoJIR4E4BuIMWrj9Kq0QBwwlFyWziczbVQkw/0",
"signature": null,
"lastMessageReadTime": null,
"lastDashangMegReadTime": null,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
},
{
"dapeiId": 223,
"coverImgUrl": "/upload/file/8d9d1de5-a62c-4754-af54-213f107eba8c.png,",
"rateCount": 0,
"account": {
"accountId": 77,
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"signature": "随便写一点,保存下。",
"lastMessageReadTime": 1497959402000,
"lastDashangMegReadTime": 1495463386000,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
},
{
"dapeiId": 221,
"coverImgUrl": "/upload/file/fc49640d-2568-4538-bca8-c42c42328e4c.png,",
"rateCount": 0,
"account": {
"accountId": 77,
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"signature": "随便写一点,保存下。",
"lastMessageReadTime": 1497959402000,
"lastDashangMegReadTime": 1495463386000,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
},
{
"dapeiId": 220,
"coverImgUrl": "/upload/file/75ac7bb6-ac8f-4518-9e78-75624d6811e2.png,",
"rateCount": 0,
"account": {
"accountId": 28,
"openId": "o1llAxMIn02G5Zsa-Iiqv4WzdAEc",
"uid": null,
"mobile": "12345678901",
"password": "1",
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/tjiajuWPpxQmUJVupjLAiaB3W0aZpMKmSXA8wmyYhT0pQMGcPgjbXbI3lYlvUUzWLFmWL1zHTp5DiaWib6m5WcTvibwxiaMec866Ig/0",
"signature": "hi,欢迎来到5美分",
"lastMessageReadTime": 1498118631000,
"lastDashangMegReadTime": 1498538105000,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
},
{
"dapeiId": 219,
"coverImgUrl": "/upload/file/9ef4d1f6-dc50-4bd9-887a-5ba51d7faf67.png,",
"rateCount": 1,
"account": {
"accountId": 77,
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"signature": "随便写一点,保存下。",
"lastMessageReadTime": 1497959402000,
"lastDashangMegReadTime": 1495463386000,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
},
{
"dapeiId": 218,
"coverImgUrl": "/upload/file/bad06c3e-6a83-4c97-8fcd-7431a873f379.png,/upload/file/bfa2b737-3126-49ad-b1c4-f0bd6f6b709f.png,",
"rateCount": 0,
"account": {
"accountId": 77,
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"signature": "随便写一点,保存下。",
"lastMessageReadTime": 1497959402000,
"lastDashangMegReadTime": 1495463386000,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
},
{
"dapeiId": 217,
"coverImgUrl": "/upload/file/7c5abc37-ffc7-4579-83a6-3bf1d116b2a5.png,/upload/file/dfdf5bfe-bb9b-409a-9385-84a33c7d42b8.png,",
"rateCount": 0,
"account": {
"accountId": 77,
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"signature": "随便写一点,保存下。",
"lastMessageReadTime": 1497959402000,
"lastDashangMegReadTime": 1495463386000,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
},
{
"dapeiId": 215,
"coverImgUrl": "/upload/file/e5d6b03f-d8a3-42ce-9dfb-017faf903cc1.png,",
"rateCount": 0,
"account": {
"accountId": 77,
"openId": "o1llAxCbSi__jN-FFNJj6Cdy_jzI",
"uid": null,
"mobile": null,
"password": null,
"sex": null,
"headImgUrl": "http://wx.qlogo.cn/mmopen/fwN2UGM8xDuI71iaq0LCAvpEACZOgvIX7bAYe985OXxP5oE5FBjrR3Jtb3bUibJBfVyc7HnIH3nEnyiaSQC99NJdXYPaGmJ1OPr/0",
"signature": "随便写一点,保存下。",
"lastMessageReadTime": 1497959402000,
"lastDashangMegReadTime": 1495463386000,
"focus": false,
"newUser": null
},
"eventId": null,
"fav": false,
"rate": false
}
],
"success": true
}
- 搜索热词来自后台;
- 搜索历史自身保存。
获取搜索的热词,默认获取10个,获取多少个可以请求者传递参数决定
返回热词列表
Request parameters
Responses
Body
["初","测试","测试2","初次","测试3"]
-
Dapei
public class Dapei {
private Long dapeiId; private String coverImgUrl; //搭配图片 private Integer rateCount; //搭配点赞数量 private Integer favCount; //搭配收藏数量:新增 by 2017-8-1 private Long eventId; //参加的精选(xjm:没有参加精选就是NULL或0) private Long themeId; //参加的主题(xjm:没有参加主题就是NULL或0) private Account account; //素人
}
同时获取信息:
1.是否收藏,相当于老接口:4.4查询是否已收藏搭配
2.是否点赞,相当于老接口:4.5查询是否已点赞搭配
3.本人是否对搭配对应的素人关注了,相当于老接口:4.7查询是否关注素人
注意:该接口无需登录即可访问
Request parameters
获取搭配信息和获取搭配详情接口应该需要整合成一个接口
现在“搭配详情”中的Dapei信息和单独“获取搭配信息”取得的Dapei信息不一样,比如:fav、rate和Account中的focus都没有。
现在的问题是APP多调用了一次接口而已:
能获取到搭配信息,及fav、rate和Account中的focus,
仅使用其中的而外的信息:Title和Content
- DapeiDetail
public class DapeiDetail {
private Long dapeiDetailId;
private String title; //标题
private String content; //内容
private Dapei dapei;//搭配
/*
* 为了减少访问后台的次数,一次性的将此参数取到方便后面使用
*/
private boolean fav; // 是否被当前accountId收藏
private boolean rate; // 是否被当前accountId点赞
// 这个可能比较绕,如果该账号信息的当前用户就是自身怎么办?
// 可能在使用之前需要判断下此id和accountId是否相等
private Boolean focus; // 是否被当前accountId关注(如果当前用户没有登录则肯定默认是false)
}
注意:这个接口无需登录也可以调用,但是未登录时,无法获取fav、rate、focus的状态,换句话说,当用户登录、退出时,在搭配详情页需要更新该三个值的状态。
Request parameters
Responses
Body
- DapeiComment
public class DapeiComment {
private Long commentId;
private String comment; //搭配评论
private Date commentTime; //评论时间
private Integer rateCount; //评论点赞数量
private Dapei dapei; //搭配
private Account account; //评论人,本条评论的发布者
/*
* 如果returnedCommentId为null,这说明这个评论是本account主动发起的,不是回复谁的评论
*/
private Long returnedCommentId; // 是针对哪个评论Id进行的回复
private Account returnedAccount; // 是回复哪个人的评论
/*
* 我(素人)发的评论,包括主动发起的(returnedCommentId为null),和回复别人的评论(returnedCommentId不为null)
* 一种评论树情况,比如针对A说“一楼”,B说“你是一楼我二楼”,C说“你是二楼我是三楼”,这种情况,B、C都是因A话题的话题而起的评论
* 故returnedCommentId均为“一楼”对应的该评论Id,只是B针对的人是A,C针对的人是B而已
* 都属于A的returnedComment
*/
private List returnedComment; //自己发的评论被回复
// 2017-8-1新添加:本人(本登录用户)是否对该评论点赞,如果用户未登录,此值即没有意义
private Boolean rate = false;
返回的是DapeiComment的列表
Request body
Responses
Body
返回DapeiDetailTag对象的数组。
DapeiDetailTag
public class DapeiDetailTag {
private Long dapeiDetailTagId;
private Double leftPer; // 离左边的占比
private Double topPer; // 离顶部的占比
private String tagContent; // “标签名称/价格”的组合,例如:“标签1/1元”
private Integer dirction; // 标签的方向:2017-8-16 新加
/*
* XJM:现在只支持上传1个搭配
*/
//private String page; // 第几页:XJM这个现在用不着,因为每个搭配现在只支持一张图片
private String link; // 购买链接
private String imgUrl; // 购买链接的二维码图片地址
//private DapeiDetail dapeiDetail; // 搭配详情:XJM这个现在冗余
}
**注意:dapeiDetailId和dapeiId是相同的**
本项目中,仅搭配的详情Id和搭配Id是一样的值,其他的详情和其本身Id是不一样的,比如Account和AccountDetail,注意这个区别。
Request parameters
Responses
Body
对搭配进行评论
returnedCommentId为null
或者对某评论进行回复
returnedCommentId不为null
返回值:
新产生的"DapeiComment"。
注意:本接口需登录才可访问,调用此接口前未登录需提示登录。
Request body
被回复的素人accountId
被回复的CommentId
Responses
Body
注意:本接口需登录才可访问,调用此接口前未登录需提示登录。
这个接口先不要测试,因为涉及的表比较多,未进行充分测试,可能会导致删除数据过多,涉及的表如下:
Dapei(1个)
DapeiDetail(与Dapei1对1)
DapeiDetailTag (与DapeiDetial 1对N)
DapeiRate(与Dapei 1对N)
DapeiFav(与Dapei 1对N)
DapeiComment((与Dapei 1对N)
DapeiCommentRate(与DapeiComment 1对N)
Request parameters
获取搭配所获取的打赏人列表。
即返回 Account的数组。
Request parameters
Responses
Body
传入素人或自己的accountId
如果是本用户,可以不传,默认是本用户,但必须先登录,并Session处于未过期状态。
如果传了,accountId不等于本用户,则为其他用户
本接口返回AccountDetail。
登录了Session中就有accountId,所以本接口请求参数可以无(即不需要传递UserId这种类型的参数)
本接口返回AccountDetail。
1.Account:基本的信息,用于登录返回的信息
public class Account {
private Long accountId;
private String name; // 昵称
private String headImgUrl; // 头
private Long createTime; // 创建时间
private Boolean newUser; // XZY:是否为新用户(登录注册时的判断,该值针对的是用户自身才有意义)
private String token; // XJM:即sessionId = request.getSession().getId();有冗余
}
2. AccountDetail:用于个人/素人的详情页,或者长按素人图像进一步获取的信息
public class AccountDetail {
private Account account;
private String openId;
private String uid;
/*
* Added by XJM :2017-08-20
*/
private Integer balance = 0; // 余额
private Integer income = 0; // 收益
private String mobile;
private String sex; // 性别
private String city =""; // 城市/位置
private String signature; // 个性签名
private String headBackgroundImg; // 头像背景图
private Date lastMessageReadTime;
private Date lastDashangMegReadTime;
private Long focusCount; // 关注素人数
private Long fansCount; // 粉丝数
// 这个可能比较绕,如果该账号信息的当前用户就是自身怎么办?
// 可能在使用之前需要判断下此id和accountId是否相等
private Boolean focus; // 是否被当前accountId关注(如果当前用户没有登录则肯定默认是false)
// 如果是本人,则无法关注本人,此值为false
Request parameters
本人或者素人accountId,如果是本人,可以不传,后台从Session中取
现在消息分两大类,在界面上是两个分开的入口,但是用一个接口返回:
-
第一类:(hasCommonNews:下面有一个条件为真则表明有新消息) 1、别人关注了你;
2、别人点赞了你的搭配; 3、别人收藏了你的搭配。 4/5、别人对你的搭配进行了评论 或者别人对你的评论(你评论的别人的搭配)进行了评论; 6、别人对你的评论进行了点赞; -
第二类:(hasIncomeNews)
1、别人打赏了你
注意:本接口需登录才可访问,调用此接口前未登录需提示登录。
返回值(data中有如下两个Boolean的标志):
hasCommonNews:是否有第一类消息(普通消息)
hasIncomeNews:是否有第二类消息(打赏的收益消息)
Responses
有新消息
Body
/api/v2/accountExt/myDapei.do被舍弃
用户可上下滑动,相当于翻页
- 第一页: {“start”:0,“limit”:6}
- 第二页: {“start”:6,“limit”:6}
以此类推
返回:搭配列表(Dapei的Array)
Request parameters
本人或者素人accountId,如果是本人,可以不传,后台从Session中取
用户可上下滑动,相当于翻页
- 第一页: {“start”:0,“limit”:6}
- 第二页: {“start”:6,“limit”:6}
以此类推
返回:搭配列表(Dapei的Array)
Request body
Responses
第一页
Body
暂时不扩展个人资料信息,所有的信息从5.1.1获取个人信息(OK) 来, 没有的空着。
Responses
第一页
Body
Request body
Responses
第一页
Body
就是Post 二进制文件
POST http://www.my5meifen.com/upload.servlet HTTP/1.1
Host: www.my5meifen.com
Connection: keep-alive
Content-Length: 44895
Accept: application/json, text/plain, */*
Content-Type: image/png
Origin: http://www.my5meifen.com
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 MicroMessenger/6.5.2.501 NetType/WIFI WindowsWechat QBCore/3.43.493.400 QQBrowser/9.0.2524.400
X_FILENAME: %u6211%u7684%u6D88%u606F%u201C%u6536%u5230%u7684%u70B9%u8D5E%u201D.png
Referer: http://www.my5meifen.com/html/index.do
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.8,en-us;q=0.6,en;q=0.5;q=0.4
Cookie: JSESSIONID=1C0E80E296E25A9F559FB2782C61ACFC; openId=o1llAxCbSi__jN-FFNJj6Cdy_jzI
PNG的二进制
Request body
就是图片的二进制
Responses
第一页
Body
消息的类型,见5.1.2是否有新消息(OK)
-
请求参数:Session中自带的accountId
(本接口需登录才可访问,调用此接口前未登录需提示登录。)
-
响应参数(data节点):
"focus", 对应Focus的列表; // 谁关注了我 "dapeiRates", 对应DapeiRate的列表 // 谁对我的搭配进行了点赞 "dapeiFavs", 对应DapeiFav的列表 // 谁对我的搭配进行了收藏 "dapeiComment", 对应DapeiComment的列表 // 谁对我的评论以及我回复的评论进行评论 "dapeiCommentRate", 对应DapeiCommentRate的列表 // 谁对我的评论进行点赞
-
DapeiComment
public class DapeiComment { private Long commentId; private String comment; //搭配评论 private Date commentTime; //评论时间 private Integer rateCount; //评论点赞数量 private Dapei dapei; //搭配 private Account account; //评论人,本条评论的发布者 /* * 如果returnedCommentId为null,这说明这个评论是本account主动发起的针对Dapei的评论,不是回复谁的评论 */ private Long returnedCommentId; //是针对哪个评论Id进行的回复 private Account returnedAccount; //是回复哪个人的评论 /* * 我发的评论,包括主动发起的(returnedCommentId为null),和回复别人的评论(returnedCommentId不为null) * 一种评论树情况,比如针对A说“一楼”,B说“你是一楼我二楼”,C说“你是二楼我是三楼”,这种情况,B、C都是因A话题的话题而起的评论 * 故returnedCommentId均为“一楼”对应的该评论Id,只是B针对的人是A,C针对的人是B而已 * 都属于A的returnedComment */ private List returnedComment; //自己发的评论被回复
-
DapeiCommentRate(谁对我的评论进行了点赞)
public class DapeiCommentRate { private Long dapeiCommentRateId; private Date commentRateTime; // 2017-8-3新添加:评论点赞时间 private Account account; // 素人 private DapeiComment dapeiComment; // 是哪条评论
-
Focus(谁关注了我)
public class Focus { private Long focusId; private Date focusTime; // 2017-8-3新添加:关注时间 private Long accountId; // 自己 private Account account; // 关注的人
-
DapeiRate(谁对我的搭配进行了点赞)
public class DapeiRate { private Long dapeiRateId; private Date rateTime; // 2017-8-3新添加:点赞时间 private Account account; // 点赞的人 private Dapei dapei; // 被点赞的搭配
-
DapeiFav(谁对我的搭配进行了收藏)
public class DapeiFav { private Long dapeiRateId; private Date favTime; // 2017-8-3新添加:收藏时间 private Account account; // 点赞的人 private Dapei dapei; // 被收藏的搭配
Responses
第一页
Body
打赏消息/记录数据结构
public class DaShangRecord {
private Long dashangId;
private Date dashangTime; // 打赏时间:新增 by 2017-8-6
private Long payAccountId; // 打赏者
private String payAccountName; // 打赏者昵称
private String payAccountHeadImgUrl;// 打赏者头像
private Integer amount; // 金额:单位为分
private Long dapeiId; // 被打赏的搭配
private String dapeiCoverImgUrl; // 被打赏的搭配图片
/*
* 被打赏的搭配所对应的素人
*/
private Long paidAccountId; // 打赏者
private String payidAccountName; // 打赏者昵称
private String payidAccountHeadImgUrl;// 打赏者头像
返回结果为以上结构的数组。
打赏消息分两种:(须参照原型图进行APP的实现)
一种是别人打赏了我,APP上可以点击(打赏者头像)进入打赏者的个人主页,也可点击(被打赏的搭配)进入搭配详情;
另一种是我打赏了别人,APP上可以点击(别人的头像)进入别人的个人主页,也可点击(被打赏的搭配)进入搭配详情;
请求参数:Session中自带的accountId
(本接口需登录才可访问,调用此接口前未登录需提示登录。)
Responses
第一页
Body
接口1:上传搭配裁剪的图片
- /upload.servlet 即接口 5.10上传头像或头像背景图相同的接口
接口2:上传搭配信息(打标签->标题+内容+外联的商城地址等)
- /api/dapeiDetail/upload.do
注意,与前面2.1.4上传新搭配并加入到精选中 唯一的区别是:在用户界面上传的搭配不参与活动(即无需传eventId字段) 发送:
{
"tagStr": [
{
"left": 0.6937,
"top": 0.1526,
"index": 1,
"content": "name 10元",
"direction":1 // 2017-8-15 XJM:猜测:1表示向右,2表示向左,反正客户端上传的搭配信息原封不动保存
}
],
"imgUrl": "/upload/file/8d9d1de5-a62c-4754-af54-213f107eba8c.png,",
"title": "title",
"content": "no say",
"links": [
{
"index": "1",
"address": "www.baidu.com"
}
],
"codeStr": [
{
"index": "1",
"url": "/upload/file/1e49761e-abca-47e2-80e8-e3b13c6b4b3d.jpg"
}
]
}
响应:
返回新搭配:dapei
即在data中新的Dapei实体。
弹出打赏金额等信息,与后台进行交互。
Request body
Responses
Body
{"resultCode":0,"resultMsg":"Success!","data":[{"productId":"cent_1","price":0.50,"name":"小打赏"},{"productId":"cent_2","price":1.00,"name":"初级打赏"}],"success":true}
支持IAP和微信:
IAP: 客户端调用苹果下单之前,调用该接口,自己平台内部生成订单 orderNo,并返回给客户端。 客户端调用苹果下单后,收到receipt。 使用receipt和orderno 两个参数调用 第三步回调验证接口
WX微信: 参数同IAP,仅请求URL为:payTipOrderWx.do
返回值:
-
IAP: data为业务订单号orderNo值
-
WX: data为如下实体:
public class UnifiedOrderResData4App { //协议返回的具体数据(以下字段在return_code 为SUCCESS 的时候有返回) private String partnerid = “”; // 即mch_id private String prepayid = “”;
private String packageNew = “Sign=WXPay”; private String noncestr = “”; private String timestamp = “”;private String sign = ""; }
Request parameters
打赏支付用户的accountID
选择打赏的产品ID
打赏的产品对应的金额
被打赏的人的accountID
被打赏的搭配Id
Responses
Body
业务订单号orderNo值
data 对应value 为业务订单号,第三步回调接口要用
{"resultCode":0,"resultMsg":"Success!","data":"1500993867345530557","success":true}
客户端收到苹果返回的receipt之后,调用该接口进行订单真实性验证 需要用户登陆状态请求该接口。
注意:关于返回结果
返回结果为了省事,偷了懒,没有从data下包含节点,而是直接返回data="orderNo"了。
Request parameters
客户端收到APPLE返回的receipt-data
自己系统生成的交易订单号
Responses
Body
{ “data”: { “orderNo”: 20170723394857381 }, “resultCode”: 0, “resultMsg”: “Success!”, “success”: true }
{
"data": {
"orderNo": 20170723394857381
},
"resultCode": 0,
"resultMsg": "Success!",
"success": true
}
参见IAP,部分接口相同。
不需要获取产品列表。
WX微信: 参数参见同IAP,少一个productId参数,请求URL为:payTipOrderWx.do
返回值:
-
WX: data为如下实体:
public class UnifiedOrderResData4App { //协议返回的具体数据(以下字段在return_code 为SUCCESS 的时候有返回) private String partnerid = “”; // 即mch_id private String prepayid = “”;
private String packageNew = “Sign=WXPay”; private String noncestr = “”; private String timestamp = “”;private String sign = ""; }
返回数据实例:
{“noncestr”:“gzzi1a8b3r5q332hw8jvqavsyzp47thc”, “packageNew”:“Sign=WXPay”, “partnerid”:“1489949992”, “prepayid”:“wx20171001202657bf7e4072660392471007”, “sign”:“13BC47CBDBACD51A35D10BC00EF0FDDE”, “timestamp”:“1506860863” }
Request parameters
打赏支付用户的accountID
打赏的产品对应的金额
被打赏的人的accountID
被打赏的搭配Id
Responses
Body
业务订单号orderNo值
data 对应value 为业务订单号,第三步回调接口要用
{"resultCode":0,"resultMsg":"Success!","data":"1500993867345530557","success":true}
类似微信第三方登录:
1 客户端通过微信AUTH获得微信的code发送给服务器,这个code是微信用户相对于APP的code。(微信登陆过的用户openId已经保存,不需要再请求微信,减少网络开销) 2、非微信登录用户,客户端请求微信获取授权,然后调用该接口,传参数 authCode
返回提现成功和失败。
Request parameters
提现金额 单位 元,现在仅支持提现整数元,比如5元,而不能5.1元
微信授权的code(非微信登录用户,则传该参数)
设备信息,可以不传
支持GET/POST
即获取:操作OSS的Token,在上传图片,下载图片之前需要获得与OSS后台进行操作的Token, 该Token是通过APP向5美分后台获取的,5美分后台向OSS后台申请一个临时的凭证,即token。
Bucket为:fivecent-pic 里面Object建立了两个目录:
head 用于存放头像等非搭配外的信息
dapei 用于专门存放搭配的照片
Responses
Body
后台直接返回图片的绝对URL地址,APP不需要做额外拼接工作
本地SDK实现,根据OSS 的SDK:
ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
/**
* 获得url链接
*
* @param key即OSS的Object name,即文件名
* @return
*/
public String getUrl(String key) {
// 设置URL过期时间为10年 3600l* 1000*24*365*10
Date expiration = new Date(new Date().getTime() + 3600l * 1000 * 24 * 365 * 10);
// 生成URL
URL url = ossClient.generatePresignedUrl(bucketName, key, expiration);
if (url != null) {
return url.toString();
}
return null;
}
}
访问域名: EndPoint: oss-cn-beijing.aliyuncs.com