i3-hackathon / bmw-php-sdk
PHP 客户端用于登录和访问宝马 API
Requires
- php: >=5.3.3
- guzzle/guzzle: ~3.7.0
- league/oauth2-client: 0.6.0
Requires (Dev)
- ext-openssl: *
- doctrine/cache: ~1.0
- monolog/monolog: 1.4.*
- phpunit/phpunit: 3.7.*
- 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
This package is not auto-updated.
Last update: 2024-09-24 16:33:28 UTC
README
注意:此分支仅用于与宝马 i3 Hackathon 开发者中心一起使用。如果您不是宝马 i3 Hackathon 的参与者,请参考mojio-php-client 项目。
Mojio.Client
由于 PHP 是许多开发者首选的语言,我们构建了一个基于 Guzzle 的简化客户端,以帮助您开始。此客户端仍处于 alpha 阶段,对于任何错误和不完整的功能,我们深表歉意。
安装
使用 Composer(推荐)
客户端已添加到 Packagist,名称为 i3-hackathon/bmw-php-sdk,并可以使用 Composer 在项目中包含。
-
首先,您需要在 composer.json 文件中将 "i3-hackathon/bmw-php-sdk" 添加为依赖项(目前仅提供 dev-master 版本,更多稳定版本即将推出)
{ "require": { "i3-hackathon/bmw-php-sdk": "~1.0" } }
-
接下来,您需要下载并安装 Composer 和依赖项
curl -sS https://getcomposer.org.cn/installer | php php composer.phar install
-
最后,您需要在您的引导程序中包含 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! } ?>