# 接口特点汇总
针对以上特点,移动端与服务端 的通信就需要2把钥匙,即2个`token`。
1、因为是非开放性的,所以所有的接口都是封闭的,只对公司内部的产品有效;
2、因为是非开放性的,所以OAuth那套协议是行不通的,因为没有中间用户的授权过程;
3、有点接口需要用户登录才能访问;
4、有点接口不需要用户登录就可访问;
### PHP Token(令牌)
针对以上特点,移动端与服务端的通信就需要2把钥匙,即2个token。
第一个token是针对接口的(api_token);
第二个token是针对用户的(user_token);
下面我们针对api_token来说明
* * * * *
### api_token
它的职责是保持接口访问的隐蔽性和有效性,保证接口只能给自家人用,怎么做到?
参考思路如下:
按服务器端和客户端都拥有的共同属性生成一个随机串,客户端生成这个串,服务器也按同样算法生成一个串,用来校验客户端的串。
现在的接口基本是mvc模式,URL基本是restful风格,URL大体格式如下:
~~~
http://blog.snsgou.com/模块名/控制器名/方法名?参数名1=参数值1&参数名2=参数值2&参数名3=参数值3
~~~
接口token生成规则参考如下:
~~~
api_token = md5 ('id' + '时间戳' + '加密密钥') = 770fed4ca2aabd20ae9a5dd774711de2
~~~
其中的
1、 '2013-12-18' 为当天时间,
2、'加密密钥' 为私有的加密密钥,手机端需要在服务端注册一个“接口使用者”账号后,系统会分配一个账号及密码
数据表设计参考如下:
字段名 字段类型 注释
~~~
client_id varchar(20) 客户端ID
client_secret varchar(20) 客户端(加密)密钥
~~~
<br>
服务端接口校验,PHP实现流程如下:
~~~
<?php
// 1、获取 GET参数 值
$module = $_GET['mod'];
$controller = $_GET['ctl']
$action = $_GET['act'];
$client_id = $_GET['client_id'];
$api_token = $_GET['api_token‘];
// 2、根据客户端传过来的 client_id ,查询数据库,获取对应的 client_secret
$client_secret = getClientSecretById($client_id);
// 3、服务端重新生成一份 api_token
$api_token_server = md5($module . $controller . $action . date('Y-m-d', time()) . $client_secret);
// 4、客户端传过来的 api_token 与服务端生成的 api_token 进行校对,如果不相等,则表示验证失败
if ($api_token != $api_token_server) {
exit('access deny'); // 拒绝访问
}
// 5、验证通过,返回数据给客户端
?>
~~~
<br>
### user_token
它的职责是保护用户的用户名及密码多次提交,以防密码泄露。
如果接口需要用户登录,其访问流程如下:
1、用户提交“用户名”和“密码”,实现登录(条件允许,这一步最好走https);
2、登录成功后,服务端返回一个 user_token
生成规则参考如下:
~~~
user_token = md5('用户的uid' + 'Unix时间戳') = etye0fgkgk4ca2aabd20ae9a5dd77471fgf
~~~
服务端用数据表维护user_token的状态
表设计如下:
字段名 字段类型 注释
~~~
user_id int 用户ID
user_token varchar(36) 用户token
expire_time int 过期时间(Unix时间戳)
~~~
>[danger] (注:只列出了核心字段,其它的再扩展吧!!!)
服务端生成 user_token 后,返回给客户端(自己存储)
客户端每次接口请求时,如果接口需要用户登录才能访问,则需要把 `user_id ` 与 `user_token` 传回给服务端
服务端接受到这2个参数后
需要做以下几步:
1. 检测 api_token的有效性;
2. 删除过期的 user_token 表记录;
3. 根据 user_id,user_token 获取表记录,如果表记录不存在,直接返回错误,如果记录存在,则进行下一步;
4. 更新 user_token 的过期时间(延期,保证其有效期内连续操作不掉线);
5. 返回接口数据;
<br>
#### 接口用例如下:
请求方式: POST
POST参数:title=我是标题&content=我是内容
返回数据:
~~~
{
'code' => 1, // 1:成功 0:失败
'msg' => '操作成功' // 登录失败、无权访问
'data' => []
}
~~~
- 序言
- 微信公众号推送
- 微信推送消息模版
- 物业费消息模版
- 绑定成功通知
- 短信模版
- 短信发送
- 销控系统对接
- 物业-业主端
- 登录
- 小程序检查绑定
- 切换房间
- 获取手机验证码
- 短信验证
- 管理员登录
- 报修管理
- 报修列表
- 获取未完成的报修列表
- 投诉管理
- 用户管理
- 检测用户
- 房屋管理
- 手机号码获取房间列表
- 通知公告
- 费用管理
- 物业费
- 物业费明细列表
- 获取详细信息
- 查询上次账单详细信息
- 创建订单[微信支付]
- 水费
- 电费
- 费用设置
- 物业费-优惠活动管理
- 减免卡
- 家电分类
- 门禁管理
- 钥匙管理
- 钥匙分享
- 开门
- 物业-管理端
- 分销商
- 公司
- 注册
- 添加经纪人
- 经纪人
- 列表
- 添加
- 删除
- 状态
- 报备
- 客户
- 列表
- 详细
- 坐标验证
- 签到处理
- 全民经纪人
- 客户
- 推荐客户
- 客户列表
- 客户详情
- check
- 资讯
- 单页
- 直卖网
- 楼栋列表
- 房源列表
- 订单
- 订单列表
- 订单详情
- 小订
- 移动售楼
- 工作台
- 待办
- 已办
- 发起
- 办理
- 查看详细
- 客户
- 列表
- 详情
- 放弃跟进
- 转让客户
- 客户流
- 员工管理
- 列表
- 项目
- 列表
- 楼栋
- 房源
- 户型
- 列表
- 详情
- 约游
- 发布 约游||攻略
- 报名
- 收藏
- 点赞
- 留言
- 租房
- 列表
- 详情
- 添加
- 发布
- 删主题除
- 添加内容
- 删除内容
- 上传封面图
- 获取配套分类
- 收藏列表
- 收藏添加
- 收藏取消
- 点赞列表
- 点赞添加
- 点赞取消
- 全局返回码说明
- 测试接口
- 业务逻辑
- APP微信支付
- 扩展知识
- Token
- 公共接口
- 项目
- 获取项目坐标