georgo/mojio

此包的最新版本(v3.0.0)没有可用的许可证信息。

PHP客户端用于登录和访问Mojio API

v3.0.0 2021-04-21 09:31 UTC

This package is auto-updated.

Last update: 2024-09-21 16:53:49 UTC


README

由于PHP是许多开发者的首选语言,我们专门基于Guzzle构建了一个简化的客户端,以帮助您开始。此客户端仍处于alpha阶段,对于任何错误和不完整的功能,我们表示歉意。

安装

使用Composer(推荐)

客户端已添加到packagist,名称为georgo/mojio,可以通过Composer将其包含在项目中。

  1. 首先,您需要在您的composer.json文件中将"georgo/mojio"添加为依赖项(目前仅提供dev-master,更多稳定版本即将推出)

    {
        "require": {
          "georgo/mojio": "~2.0"
        }
    }
  2. 接下来,您需要下载并安装Composer及其依赖项

    curl -sS https://getcomposer.org/installer | php
    php composer.phar install
  3. 最后,您需要将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!
}
?>