# 如何调用接口 以下将通过简明的方式,介绍客户端如何调用接口。 ## API入口 假设您的域名是:http://open.phalapi.net,则: + App开放接口API入口:http://open.phalapi.net/api/app.php + Platform开放平台接口API入口:http://open.phalapi.net/api/app.php + Admin管理后台接口API入口:http://open.phalapi.net/api/admin.php + Task计划任务接口API入口:http://open.phalapi.net/api/admin.php 首先,不同系列的接口,必须要找到对应的API入口。因为不同的入口处理的方式、权限判断和场景都不相同,并且方便分别进行个性化控制而不相互影响。 ## 请求方式 通过HTTP/HTTPS协议,便可以请求接口。 例如对于默认的接口服务:http://open.phalapi.net/api/app.php?s=App.HelloWorld.Say,直接用浏览器打开访问,可以得到结果: ``` { "ret": 200, "data": { "content": "Hello PhalApi Pro!" }, "msg": "" } ``` 如果通过CURL方式请求,则结果为: ``` $ curl http://open.phalapi.net/api/app.php\?s\=App.HelloWorld.Say {"ret":200,"data":{"content":"Hello PhalApi Pro!"},"msg":""} ``` 通常情况下,可以使用GET或POST方式请求接口,但推荐使用POST方式请求接口。原因有几点: + 1、GET方式容易存在编码问题导致参数解析失败,但POST方式不会; + 2、GET参数有最大长度限制,当GET参数过长过大时会提示错误,但POST方式不会; + 3、GET方式容易被抓包或在服务器存在日志,容易导致密码等敏感信息泄露,POST方式相对安全。 ## 指定接口 和PhalApi开源版一样,通过```s```参数(完整参数名是```service```,两者等效),可以指定调用哪一个接口服务。 关于全部的接口,可以通过在线接口文档查看。当未指定接口时,默认接口服务是```App.Site.Index```。 例如: ``` # 请求默认接口 http://open.phalapi.net/api/app.php # 请求会员注册接口 http://open.phalapi.net/api/app.php?s=App.User.Register # 请求获取文件列表接口(需要切换到后台API入口) http://open.phalapi.net/api/admin.php?s=Admin.File.GetList ``` 需要注意的是,不同接口的访问入口不同,需要注意区分。 ## 请求参数 如你所见,s或service参数用于指定接口服务。除此之外,公共的接口参数目前有: + access_token:token令牌,用于接口验证,后面会继续讲解。 每个接口的参数,可以通过接口文档查看,例如: ![](http://cdn7.okayapi.com/yesyesapi_20191230174817_d87cba5494b0d5c6902ee328bcb660bd.png) 如无特殊说明,接口参数均可使用GET或POST。 ## 返回结构 如前文所述,以及遵循PhalApi开源版的格式,接口返回的是JSON格式。例如: ``` {"ret":200,"data":{"title":"Hello PhalApi Pro","version":"1.0","time":1577697960},"msg":""} ``` 格式后是: ``` { "ret": 200, "data": { "title": "Hello PhalApi Pro", "version": "1.0", "time": 1577697960 }, "msg": "" } ``` 全部接口,返回的接口结果结构分为三部分: + ret:状态码,整型,200表示成功,4xx表示客户端非法请求,5xx表示服务器错误 + data:成功时返回的业务数据,通常为对象类型,具体由接口服务而定 + msg:失败时的错误提示信息,字符类型 具体每个接口返回的结果,可以访问接口文档,查看指定接口服务文档的**返回结果**说明。例如: ![](http://cdn7.okayapi.com/yesyesapi_20200107145823_36980567e0ed1b9f416676abe3575b5c.png) 也可以查看接口返回示例: ![](http://cdn7.okayapi.com/yesyesapi_20191230174538_fb50beb5aefb933567ff7654635d967f.png) ## 验证方式 PhalApi专业版使用的是access_token令牌验证的方式,在开始使用接口时,需要先申请令牌。申请令牌有两种方式: + 方式一:通过应用来申请令牌:根据开发者应用的app_key和app_secret申请access_token令牌 + 方式二:通过会员来申请令牌:结合已获得的应用access_token令牌,根据会员账号和密码进行登录并获取新的access_token令牌 ## 获取令牌 ### 方式一:通过应用来申请令牌 这种方式,要求: + 应用存在:首先需要创建应用,并且审核通过 + 密钥正确:应用app_key和app_secret正确 + 正常状态:应用处于正常状态(若为禁用则不可用) + 接口权限:应用在调用指定接口时需要拥有相应接口的权限 需要使用的接口是:```App.Auth.ApplyToken```。 ### 方式二:通过会员登录来申请令牌 方式二,要求: + 注册账号:已经有注册的会员账号 + 密码正确:会员账号和密码正确 + 正常状态:会员处于正常状态(若为禁用则不可登录) + 指定应用:通过方式一获得有有效令牌 需要使用的接口是:```App.User.UserLogin```。 通过access_token参数传递成功申请到的令牌,若令牌过期或无效,接口将会返回ret=406,例如: ``` { "ret": 406, "data": {}, "msg": "非法请求:access_token校验不通过" } ``` 若令牌有效,则可以正常请求接口。 ## 刷新令牌 令牌过期时间默认为30天,可以通过./config/app.php配置文件的jwt里的exp来自行修改,如设置为7天: ``` /** * JWT令牌 */ 'jwt' => array( 'key' => '1j7zo53mnsLK', // 用于加密的key(安装时自动生成,不能修改!) 'exp' => 7 * 86400, // 令牌生成后多少秒内有效,可自行修改 ), ``` 在令牌过期前,可以通过```App.Auth.RefreshAccessToken```接口刷新令牌,从而延长有效期。刷新后有效期会重新延长到jwt里面exp指定的时间。 ## 开放平台与管理后台的身份校验 对于内部,可以通过登录开发者账号,或者通过登录管理员账号来获得令牌。此时使用的接口是```Platform.User.UserLogin```。