bolster/base-api

该包已被废弃,不再维护。没有建议的替代包。

PHP的BASE API客户端(https://developers.thebase.in)

dev-master 2017-10-25 10:13 UTC

This package is not auto-updated.

Last update: 2020-01-24 15:32:51 UTC


README

[[已弃用]] 此仓库不再维护。我们将在2017/12/31删除此仓库并取消发布包。

Build Status

安装

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返回错误响应,则将其作为异常抛出。

特别地,已经以子类形式进行了更具体的实现。

ExpiredAccessTokenExceptionRateLimitExceedException都继承自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_idcategory_id的组合,则会显示“无效的分类ID”。