bolster / base-api
该包已被废弃,不再维护。没有建议的替代包。
PHP的BASE API客户端(https://developers.thebase.in)
dev-master
2017-10-25 10:13 UTC
Requires (Dev)
- bolster/http: 1.0
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2020-01-24 15:32:51 UTC
README
[[已弃用]] 此仓库不再维护。我们将在2017/12/31删除此仓库并取消发布包。
安装
将 bolster/base-api
添加到您的 composer.json
请查看发布以获取可能的版本。
{ "require": { "bolster/base-api": "dev-master" } }
示例
实例生成
可能的选项请参见这里。
<?php $config = [ 'client_id' => 'YOUR_CLIENT_ID', 'client_secret' => 'YOUR_CLIENT_SECRET', 'redirect_uri' => 'YOUR_REDIRECT_URI', 'scopes' => ['read_orders', 'read_users'], ]; $client = new \Bolster\BaseApi\Client($config);
生成各种API的客户端
要生成各种API的客户端,可以使用名为api名(无小写下划线)
的方法,请使用该方法。
有关后续方法,请参阅各源代码。
$client = new \Bolster\BaseApi\Client($config); // NOTE: 一度変数に取るとインスタンス生成のコストを削減できる $oauth_client = $client->oauth(); $aurhotize_url = $oauth_client->authorize(); // NOTE: 一度にチェインで書くことも可能 $aurhotize_url = $client->oauth()->authorize(); // other methods // $client->users(); // $client->items(); // $client->categories(); // $client->itemcategories(); // $client->orders(); // $client->savings();
异常
如果从BASE API返回错误响应,则将其作为异常抛出。
特别地,已经以子类形式进行了更具体的实现。
ExpiredAccessTokenException
和RateLimitExceedException
都继承自BaseApiException
,因此,
如果您两者都想捕获,则只需捕获BaseApiException
即可。
ExpiredAccessTokenException
不会在没有设置访问令牌的情况下发生。
如果访问令牌已设置但无效,则只会返回响应。
<?php try { $client->items()->delete(['item_id' => 100]); // アクセストークンの有効期限が切れた } catch(\Base\Api\ExpiredAccessTokenException $e) { // アクセストークンをリフレッシュしてリトライ $client->oauth()->refresh($_SESSION['refresh_token']); $client->items()->delete(['item_id' => 100]); // 1日もしくは1時間あたりのAPI使用回数制限に達した } catch(\Base\Api\RateLimitExceedException $e) { // 1分待って再送信(NOTE: 日を跨ぐまで回数はリセットされないので実用例ではない) sleep(60); $client->items()->delete(['item_id' => 100]); // その他エラー } catch(\Base\Api\BaseApiException $e) { var_dump($e); }
重定向、回调示例
重定向
<?php $config = [ 'client_id' => 'YOUR_CLIENT_ID', 'client_secret' => 'YOUR_CLIENT_SECRET', 'redirect_uri' => 'YOUR_REDIRECT_URI', 'scopes' => ['read_orders', 'read_users'], ]; $client = new \Bolster\BaseApi\Client($config); $state = 'hogehoge'; $client->oauth()->authorize($state);
回调
<?php if(isset($_GET['error'])) { throw new RuntimeException($_GET['error']); } $config = [ 'client_id' => 'YOUR_CLIENT_ID', 'client_secret' => 'YOUR_CLIENT_SECRET', 'redirect_uri' => 'YOUR_REDIRECT_URI', 'scopes' => ['read_orders', 'read_users'], ]; $client = new \Bolster\BaseApi\Client($config); $credentials = $client->oauth()->getAccessToken($code); $_SESSION['access_token'] = $credentials['access_token']; $_SESSION['refresh_token'] = $credentials['refresh_token']; $client->setAccessToken($credentials['access_token']); $me = $client->users()->me(); var_dump($me);
获取、错误控制
<?php // @param array $orders // @return void function dispatch_all(array $orders) { global $client; foreach($orders as $order) { $detail = $client->orders()->detail($order['unique_key']); foreach($detail['order_items'] as $item) { $client->orders()->editStatus($item['order_item_id'], 'dispatched'); } } } if(isset($_SESSION['access_token'])) { throw new RuntimeException('アクセストークンがセットされていません'); } $config = [ 'client_id' => 'YOUR_CLIENT_ID', 'client_secret' => 'YOUR_CLIENT_SECRET', 'redirect_uri' => 'YOUR_REDIRECT_URI', 'scopes' => ['read_orders', 'read_users'], 'access_token' => $_SESSION['access_token'], ]; $client = new \Bolster\BaseApi\Client($config); // NOTE: 60 * 60 * 24 * 7 = 1 week $orders = $client->orders()->all([ 'limit' => 100, 'start_ordered' => date('Y-m-d H:i:s', time() - (60 * 60 * 24 * 7)) ]); var_dump($orders); try { dispatch_all($orders); } catch(\Base\Api\ExpiredAccessTokenException $e) { $client->oauth()->refresh($_SESSION['refresh_token']); dispatch_all($orders); }
BASE API规范杂记
OAuth
- 在
authorize
方法中,如果不设置scope(以&scope=
结束)则发送,则将成为默认权限
Items
- 价格(含税)只能注册50以上 ~ 500000以下
- 库存数量是0以上 ~ 10000以下
Categories
- 也可以删除商品上设置的商品分类。删除后,该分类将从设置该分类的商品的分类中删除
- 可指定的分类名最长为30个字符,如果指定超过30个字符的字符串,则截取尾部
- 半角和全角都一样,30个字符。不是按字节数而是按字符串长度判断的
- 可指定的
list_order
最大为100000。即使指定超过100000的值,也会四舍五入到100000 - 如果分类名重复,则会出现“验证错误”
ItemCategories
- 如果尝试添加已经注册的
item_id
和category_id
的组合,则会显示“无效的分类ID”。