netsoftholdings / public-api-demo
Hubstaff 公共API
Requires
- php: >=7.2
- ext-json: *
- facile-it/php-openid-client: ^0.1.4
- guzzlehttp/psr7: 2.1.0
- http-interop/http-factory-guzzle: ^1.0.0
- php-http/guzzle7-adapter: ^0.1.1
- php-http/message: ^1.10
- symfony/cache: ^5.2
This package is auto-updated.
Last update: 2024-09-15 17:34:43 UTC
README
该仓库包含一个简单的示例命令行工具,展示如何通过PHP访问Hubstaff公共API。
核心访问全部通过php-openid-client软件包完成。
Open ID发现
Hubstaff账户系统使用Open ID Connect发现协议,允许应用程序轻松查询令牌端点、授权端点等。因此,您只需要知道认证域(https://account.hubstaff.com/)和API端点URL(https://api.hubstaff.com/)。
client.php中的示例代码会获取并缓存这些发现数据1周,这样就不需要不断获取。
令牌持久化
此示例采用简单的方式来管理API令牌。它简单地将其存储在json文件中,启动时读取,在令牌刷新时写入。
合适的存储应该在读取和写入时加锁。代码还应该在刷新时锁定并重新读取状态文件,以防另一个进程已经刷新了令牌。例如,合适的刷新令牌流程应该是:
- 加锁
- 重新读取状态并加载令牌
- 如果令牌尚未过期或即将过期,则使用新令牌(另一个进程已刷新)
- 否则刷新令牌
- 保存
- 释放锁
客户端应用与个人访问令牌
Hubstaff账户系统的个人访问令牌设计得与我们的客户端应用非常相似,它们都产生短期有效的访问令牌,需要定期刷新。
client.php中的代码是一个示例,展示了如何使用磁盘访问作为永久令牌存储来完成这项任务。如果您有其他存储机制,可以在saveState和loadState方法中实现。
个人访问令牌使用
api.js中的默认设置是使用个人访问令牌。要使用,请创建/编辑configState.json,使其包含以下条目。
{ "token": { "refresh_token": "personal access refresh token goes here" } }
然后,当api.js进行请求时,它将自动刷新以获取所需的访问令牌,并在执行之间持久化到configState.json中。
按照上述定义设置configState.json,然后像这样运行cli_tool示例:
php client.php
这将输出“v2/users/me”端点