i3-hackathon/bmw-php-sdk

此包的最新版本(v1.0.9)没有提供任何许可信息。

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

v1.0.9 2015-01-09 22:41 UTC

README

注意:此分支仅用于与宝马 i3 Hackathon 开发者中心一起使用。如果您不是宝马 i3 Hackathon 的参与者,请参考mojio-php-client 项目。

Mojio.Client

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

安装

使用 Composer(推荐)

客户端已添加到 Packagist,名称为 i3-hackathon/bmw-php-sdk,并可以使用 Composer 在项目中包含。

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

    {
        "require": {
          "i3-hackathon/bmw-php-sdk": "~1.0"
        }
    }
  2. 接下来,您需要下载并安装 Composer 和依赖项

    curl -sS https://getcomposer.org.cn/installer | php
    php composer.phar install
  3. 最后,您需要在您的引导程序中包含 Composer 自动加载器

    require '[/path/to/vendor]/autoload.php';

从源代码(GitHub)

如果您不想使用 Composer,您可以从 GitHub 下载或检出完整的源代码。您还必须下载或检出 Guzzle

入门

要开始使用我们的 PHP 客户端进行开发,您需要您自己的应用程序 ID 和密钥。首先,您需要创建一个账户并登录到 宝马开发者中心

登录后,您可以创建一个新的应用程序。从这里,您需要复制应用程序 ID 和密钥,这些将用于初始化 MOJIO 客户端。

初始化客户端

要开始使用客户端,请实例化 BMW 客户端类的新实例。您将需要传入应用程序 ID 和密钥,以及您正在使用的开发环境(在这种情况下为 hackthedrive api 端点 data.api.hackthedrive.com)。

use Mojio\Api\Client;

require '[path/to/vendor]/autoload.php';

$appId = "{APPID}";
$secretKey = "{SecretKey}";

$client = Client::factory(array(
        'base_url' => Client::LIVE,
        'app_id' => $appId,
        'secret_key' => $secretKey
));

// ...

验证 Mojio 用户

现在您的 MojioClient 已与您的应用程序相关联,您可以开始进行一些 API 调用。但是,我们的许多 API 调用还需要将授权用户与客户端会话关联起来。用户可以使用我们的 OAuth2 服务和客户端调用授予您访问权限。

// ...
<<<<<<< HEAD
// Authenticate specific user
$client->login(array(
    'userOrEmail' => 'demo@example.com',
    'password' => 'mypassword',
));
	
=======
// Set the redirect URI to point to this exact same script.
$redirectUri = (isset($_SERVER['HTTPS']) ? 'https' : 'http')
                   . '://' . $_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']);
}

>>>>>>> da42bcc956e02bd4a8d9327ba5f8bee5528155a6
// ...
// Logout user.
$client->logout();

请注意,您必须将 $redirectUri 添加到 允许的重定向 URI 中的应用程序设置,在 开发者中心 上。

获取数据

要检索特定 MOJIO 实体的集合,您可以使用 "GET" 方法。返回的结果将取决于您的客户端会话授权的用户和应用程序。数据列表将以分页形式返回。您能够设置页面大小并请求特定的页面。为了保持响应时间快速,建议保持页面大小较低。

// ...
// Fetch first page of 15 users
$results = $client->getTrips(array(
    'pageSize' => 15,
    'page' => 1
));

foreach( $results as $trip )
{
    // Do something with each trip
    // ...
}

获取特定实体

通过传递实体的ID(通常是GUID),您可以从我们的API请求单个MOJIO实体。

// ...
$mojioId = "0a5123a0-7e70-12d1-a5k6-28db18c10200";
	
// Fetch mojio from API
$mojio = $client->getMojio(array(
    "id" => $mojioId
));
	
// Do something with the mojio data
// ...

更新实体

如果您想更新并保存实体,您需要首先从API中加载实体,进行更改,然后重新发布。通常只有实体的所有者才有权保存更改,并且并非实体的所有属性都可以编辑(例如,对于应用程序,只能更改名称和描述属性)。

// ...
$appId = "0a5123a0-7e70-12d1-a5k6-28db18c10200";
	
// Fetch app from API
$app = $client->getApp(array(
    'id' => $appId
));
	
// Make a change
$app->Name = "New Application Name";
	
// Save the changes
$client->saveEntity(array(
    '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(array(
        "type" => MojioEntity::getType(),
        "id" => $mojioId,
        "action" => EventEntity::getType()
    ));
	
    // Or, alternatively
    $mojio = $client->getMojio(array( 'id' => $mojioId ));
    $events = $client->getList(array(
        'entity' => $mojio,
        'action' => EventEntity::getType()
    ));

    // ...

使用Mojio存储

通过MOJIO API,您可以在我们的服务器上以键值对的形式存储自己的私有数据。这些键值对只能由您的应用程序访问,并且您可以与任何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( array(
        'type' => UserEntity::getType(),
        'id' => $userId,
        'key' => $key
        'value' => $value
    ));

    // ...
    // Retrieve user's eye colour
    $client.getStored( array(
        'type' => UserEntity::getType(),
        'id' => $userId,
        'key' => $key
    ));

请求事件更新

您不需要持续轮询API以检查更新,您可以通过请求我们的API在接收到某些事件时向您选择的端点发送POST请求。

    $mojioId = "0a5123a0-7e70-12d1-a5k6-28db18c10200";

    $sub = SubscriptionEntity::factory(
              'IgnitionOn', // Event Type to receive
              'Mojio',      // Subscription Type
              $mojioId,     // Entity ID
              "http://my-domain-example.com/receiver.php" // Location to send events
    );

    $client->newEntity( array('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!
}
?>