georgo / mojio
PHP客户端用于登录和访问Mojio API
Requires
- php: >=8.0
- guzzlehttp/guzzle: ^7.2
- league/oauth2-client: 0.6.0
Requires (Dev)
- ext-openssl: *
- doctrine/cache: ~1.0
- monolog/monolog: 1.4.*
- phpunit/phpunit: ^9
- symfony/class-loader: 2.*
- symfony/yaml: 2.*
Suggests
- ext-apc: Allows service description opcode caching, request and response caching, and credentials caching
- doctrine/cache: Adds support for caching of credentials and responses
- monolog/monolog: Adds support for logging HTTP requests and responses
README
由于PHP是许多开发者的首选语言,我们专门基于Guzzle构建了一个简化的客户端,以帮助您开始。此客户端仍处于alpha阶段,对于任何错误和不完整的功能,我们表示歉意。
安装
使用Composer(推荐)
客户端已添加到packagist,名称为georgo/mojio,可以通过Composer将其包含在项目中。
-
首先,您需要在您的composer.json文件中将"georgo/mojio"添加为依赖项(目前仅提供dev-master,更多稳定版本即将推出)
{ "require": { "georgo/mojio": "~2.0" } }
-
接下来,您需要下载并安装Composer及其依赖项
curl -sS https://getcomposer.org/installer | php php composer.phar install
-
最后,您需要将Composer自动加载器包含在您的引导文件中
require '[/path/to/vendor]/autoload.php';
从源码(GitHub)
如果您不想使用Composer,可以从GitHub下载或检出完整的源代码。您还必须下载或检出Guzzle
入门
要开始使用Mojio PHP客户端进行开发,您需要一个自己的应用程序ID和密钥。首先,您需要创建一个账户并登录到MOJIO开发者中心。
登录后,您可以创建一个新的应用程序。从这里,您需要复制应用程序ID和密钥,这些是初始化MOJIO客户端所必需的。
初始化客户端
要开始使用客户端,请实例化一个MOJIO客户端类的实例。这是您需要传入应用程序ID和密钥的地方,以及您正在使用的开发者环境(沙盒或实时)。
use Mojio\Api\Client; require '[path/to/vendor]/autoload.php'; $appId = "{APPID}"; $secretKey = "{SecretKey}"; $client = Client::factory([ 'base_url' => Client::LIVE, 'app_id' => $appId, 'secret_key' => $secretKey ]); // ...
验证Mojio用户
现在您的MojioClient与您的应用程序关联后,您就可以开始进行一些API调用了。但是,许多Mojio API调用还需要将授权用户与客户端会话关联起来。用户可以通过Mojio OAuth2服务和客户端调用授权您访问。对于redirectUri,需要https方案。
// ... // Set the redirect URI to point to this exact same script. $redirectUri = 'https://' . $_SERVER['HTTP_HOST'] . strtok($_SERVER['REQUEST_URI'], '?'); if(!isset($_GET['code'])) { // Initiate an OAuth request header('Location: '.$client->getAuthorizationUrl($redirectUri)); exit; } else { // Handle the OAuth response $client->authorize($redirectUri, $_GET['code']); } // ... // Logout user. $client->logout();
请注意,您必须将$redirectUri添加到您的应用程序设置中的允许的Redirect URIs(在开发者中心)。
获取数据
要检索一组特定的MOJIO实体,您可以使用"GET"方法。返回的结果将取决于您的客户端会话授权的用户和应用。数据列表将以分页形式返回。您能够设置页面大小并请求特定的页面。为了保持响应时间快速,建议保持页面大小较低。
// ... // Fetch first page of 15 users $results = $client->getTrips([ 'pageSize' => 15, 'page' => 1 ]); foreach( $results as $trip ) { // Do something with each trip // ... }
获取特定实体
通过传递实体的ID(通常是GUID),您可以从Mojio API请求单个MOJIO实体。
// ... $mojioId = "0a5123a0-7e70-12d1-a5k6-28db18c10200"; // Fetch mojio from API $mojio = $client->getMojio([ "id" => $mojioId ]); // Do something with the mojio data // ...
更新实体
如果您想更新并保存一个实体,您需要首先从API中加载该实体,进行修改,然后将其发布。通常只有实体的所有者才有权限保存更改,并且并非实体的所有属性都可以编辑(例如,对于应用程序,只有名称和描述属性可以更改)。
// ... $appId = "0a5123a0-7e70-12d1-a5k6-28db18c10200"; // Fetch app from API $app = $client->getApp([ 'id' => $appId ]); // Make a change $app->Name = "New Application Name"; // Save the changes $client->saveEntity([ 'entity' => $app ]);
获取子实体列表
如果您想获取与另一个实体关联的所有实体,您可以调用GetBy方法。例如,如果您想获取与特定MOJIO设备关联的所有事件。
use Mojio\Api\Model\MojioEntity; use Mojio\Api\Model\EventEntity; // ... $mojioId = "0a5123a0-7e70-12d1-a5k6-28db18c10200"; // Fetch mojio's events $events = $client->getList([ "type" => MojioEntity::getType(), "id" => $mojioId, "action" => EventEntity::getType() ]); // Or, alternatively $mojio = $client->getMojio(['id' => $mojioId]); $events = $client->getList([ 'entity' => $mojio, 'action' => EventEntity::getType() ]); // ...
使用Mojio存储
使用MOJIO API,您可以在Mojio服务器上以键值对的形式存储您自己的私有数据。这些键值对只能由您的应用程序访问,并且您可以将它们与任何MOJIO实体关联(例如:MOJIO设备、应用程序、用户、行程、事件、发票、产品)。
use Mojio\Api\Model\UserEntity; // ... $userId = "0a5453a0-7e70-16d1-a2w6-28dl98c10200"; // Some user's ID $key = "EyeColour"; // Key to store $value = "Brown"; // Value to store // Save user's eye colour $client.setStored([ 'type' => UserEntity::getType(), 'id' => $userId, 'key' => $key 'value' => $value ]); // ... // Retrieve user's eye colour $client.getStored([ 'type' => UserEntity::getType(), 'id' => $userId, 'key' => $key ]);
请求事件更新
您不必持续轮询API以检查更新,您可以让Mojio API在接收到某些事件时,向您选择的端点发送POST请求。
$mojioId = "0a5123a0-7e70-12d1-a5k6-28db18c10200"; $sub = SubscriptionEntity::factory( 'IgnitionOn', // Event Type to receive 'Mojio', // Subscription Type $mojioId, // Entity ID "https://my-domain-example.com/receiver.php" // Location to send events ); $client->newEntity(['entity' =>$sub]);
在您的"receiver.php"文件中,您需要处理任何传入的事件
<?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { $raw = file_get_contents('php://input'); $event = json_decode( $raw ); // ... Do something with the event! } ?>