auburus / netatmo-api
该包最新版本(v1.0.0)没有可用的许可证信息。
league/oauth2-client 库的 Netatmo 提供程序
v1.0.0
2015-12-25 23:49 UTC
Requires
- league/oauth2-client: ~1.0
Requires (Dev)
- mockery/mockery: ^0.9.4
- phpunit/phpunit: ^5.1
- squizlabs/php_codesniffer: ^2.5
This package is not auto-updated.
Last update: 2024-10-02 11:10:59 UTC
README
这是一个为 league/OAuth2-client 库实现的提供程序。
安装
通过 Composer
$ composer require auburus/netatmo-api:~0.2.0
用法
以下是一个基于 用法示例 的代码。
<?php require_once 'vendor/autoload.php'; use Auburus\OAuth2\Client\Provider\Netatmo; use GuzzleHttp\Exception\RequestException; session_start(); $provider = new Netatmo([ 'clientId' => 'XXXXXXXX', 'clientSecret' => 'XXXXXXXX', 'redirectUri' => 'https://your-registered-redirect-uri/', ]); // Handles the case when the user choose to NOT authorize if (isset($_GET['error'])) { echo $_GET['error']; exit; } if (!isset($_GET['code'])) { $authorizationUrl = $provider->getAuthorizationUrl([ 'scope' => ['read_station'] ]); $_SESSION['oauth2state'] = $provider->getState(); // Redirect the user to the authorization URL. header('Location: ' . $authorizationUrl); exit; // Check given state against previously stored one to mitigate CSRF attack } elseif (empty($_GET['state']) || ($_GET['state'] !== $_SESSION['oauth2state'])) { unset($_SESSION['oauth2state']); exit('Invalid state'); } else { try { // Try to get an access token using the authorization code grant. $accessToken = $provider->getAccessToken('authorization_code', [ 'code' => $_GET['code'] ]); // We have an access token, which we may use in authenticated // requests against the service provider's API. echo $accessToken->getToken() . "<br>"; echo $accessToken->getRefreshToken() . "<br>"; echo $accessToken->getExpires() . "<br>"; echo ($accessToken->hasExpired() ? 'expired' : 'not expired') . "<br>"; // The provider provides a way to get an authenticated API request for // the service, using the access token; it returns an object conforming // to Psr\Http\Message\RequestInterface. $request = $provider->getAuthenticatedRequest( 'GET', 'https://api.netatmo.com/api/getstationsdata?access_token=' . $accessToken, $accessToken ); try { $response = $provider->getHttpClient()->send($request); echo $response->getBody(); } catch (RequestException $e) { echo "<h1>ERROR!</h1>"; echo $e->getResponse()->getBody(); } } catch (\League\OAuth2\Client\Provider\Exception\IdentityProviderException $e) { // Failed to get the access token or user details. exit($e->getMessage()); } }
使用资源所有者
原始的 league/OAuth2-client 提供了 $provider->getResourceOwner()
方法来访问用户数据。虽然非常方便,但 Netatmo Api 最近已经废弃了访问这些信息的 API 端点,并将它们嵌入到一些其他方法中。
因此,根据您将使用的 API 范围,您应该使用比 Netatmo
"稍微具体一些" 的提供程序。
因此,示例将结果为
<?php use Auburus\OAuth2\Client\Provider\NetatmoThermostat; $provider = new NetatmoThermostat([ 'clientId' => 'XXXXXXXX', 'clientSecret' => 'XXXXXXXX', 'redirectUri' => 'https://your-registered-redirect-uri/', ]); // (All the OAuth2 proces...) // ... $resourceOwner = $provider->getResourceOwner($accessToken); var_export($resourceOwner->toArray());
注意,您仍然可以使用所有提供程序方法,如 getAuthenticatedRequest
。
我个人建议将提供程序声明为
use Auburus\OAuth2\Client\Provider\NetatmoThermostat as Netatmo;
只要在请求授权时使用正确的范围,您就可以假设它是正常的 Netatmo 提供程序。