nonz250 / smaregi-api-php
Smaregi Platform API client.
Requires
- php: ^8.1
- fig/http-message-util: ^1.1
- league/oauth2-client: ^2.7
- psr/http-client: ^1.0
- psr/http-factory: ^1.0
- psr/http-message: ^2.0
Requires (Dev)
- fakerphp/faker: ^1.23
- friendsofphp/php-cs-fixer: ^3.17
- mockery/mockery: ^1.6
- nyholm/psr7: ^1.8
- php-http/curl-client: ^2.3
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.2
- roave/security-advisories: dev-latest
- vlucas/phpdotenv: ^5.5
Suggests
- nyholm/psr7: A fast PHP7 implementation of PSR-7/PSR-17
- php-http/curl-client: Another PSR-18 HttpClient implementation
- symfony/http-client: Symfony HttpClient component implement PSR-18
This package is auto-updated.
Last update: 2024-10-31 00:28:53 UTC
README
smaregi-api-php
- PSR-7: HTTP message interfaces - PHP-FIG
- PSR-17: HTTP Factories - PHP-FIG
- PSR-18: HTTP Client - PHP-FIG
上記 PSR にて決められたインターフェースで実装したスマレジ・プラットフォーム API クライアントライブラリです。
Installation
composer require nonz250/smaregi-api-php
Usage
- 仕様書 | ドキュメント | スマレジ・デベロッパーズ
- スマレジ・プラットフォームAPI 共通仕様書
- スマレジ・プラットフォームAPI POS仕様書
- スマレジ・プラットフォームAPI 受注管理 仕様書
- スマレジ・プラットフォームAPI Waiter 仕様書
- スマレジ・プラットフォームAPI Timecard仕様書
アプリアクセストークン取得
https://github.com/nonz250/smaregi-api-php/blob/main/sample/public/application_token.php
getAccessToken
の引数に new SmaregiClientCredentials()
を渡し、 options
に contract_id
を指定してください。
また、その際に必要に応じて scope
を指定してください。
<?php declare(strict_types=1); use Nonz250\SmaregiApiPhp\Auth\SmaregiClientCredentials; use Nonz250\SmaregiApiPhp\Auth\SmaregiProvider; $provider = new SmaregiProvider( 'SMAREGI_IDP_HOST', 'SMAREGI_CLIENT_ID', 'SMAREGI_CLIENT_SECRET', ); $accessToken = $provider->getAccessToken(new SmaregiClientCredentials(), [ 'contract_id' => 'SMAREGI_CONTRACT_ID', 'scope' => ['pos.products:read', 'pos.customers:read'], ]);
ユーザーアクセストークン取得
https://github.com/nonz250/smaregi-api-php/blob/main/sample/public/auth.php
必要に応じて redirect_uri
を指定してください。
同様に getAuthorizationUrl
呼び出し時に scope
に必要なものを指定してください。
セキュリティ対策のため、 state
と pkce
を保持し、 redirect_uri
の先でチェック処理をしてください。
<?php declare(strict_types=1); use Nonz250\SmaregiApiPhp\Auth\SmaregiProvider; session_start(); $provider = new SmaregiProvider( 'SMAREGI_IDP_HOST', 'SMAREGI_CLIENT_ID', 'SMAREGI_CLIENT_SECRET', 'http://localhost/callback.php', ); $authorizationUrl = $provider->getAuthorizationUrl([ 'scope' => ['openid', 'email', 'profile', 'offline_access', 'pos.products:read', 'pos.customers:read'], ]); $_SESSION['sampleState'] = $provider->getState(); $_SESSION['samplePkceCode'] = $provider->getPkceCode(); header('Location: ' . $authorizationUrl); exit();
https://github.com/nonz250/smaregi-api-php/blob/main/sample/public/callback.php
セキュリティ対策のため、保持していた state
と pkce
のチェック処理をしてください。
<?php declare(strict_types=1); use Nonz250\SmaregiApiPhp\Auth\SmaregiProvider; session_start(); $sessionState = (string)($_SESSION['sampleState'] ?? ''); if ($sessionState === '') { throw new RuntimeException('Session state is empty.'); } $sampleState = $_GET['state'] ?? ''; if ($sessionState !== $sampleState) { throw new RuntimeException('Invalid state.'); } $provider = new SmaregiProvider( 'SMAREGI_IDP_HOST', 'SMAREGI_CLIENT_ID', 'SMAREGI_CLIENT_SECRET', 'http://localhost/callback.php', ); $code = $_GET['code'] ?? ''; $provider->setPkceCode($_SESSION['samplePkceCode'] ?? ''); $accessToken = $provider->getAccessToken('authorization_code', [ 'code' => $code, ]); $resourceOwner = $provider->getResourceOwner($accessToken); $accessToken = $provider->getAccessToken('refresh_token', [ 'refresh_token' => $accessToken->getRefreshToken(), ]);
Sample
https://github.com/nonz250/smaregi-api-php/tree/main/sample
make build make sample
上記を実行後、 http://localhost へアクセスし、このライブラリを利用した際の実際の動作を確認することができます。
このとき、 スマレジ・デベロッパーズ で取得できるクレデンシャル情報が必要なので、予めスマレジ・デベロッパーズアカウントを取得してください。
https://developers.smaregi.jp/signup/
スマレジ・デベロッパーズのアカウント登録ができたら新規にアプリを追加し、必要なクレデンシャル情報を取得してください。
※この際、パブリックアプリかプライベートアプリかは問いません。
.env.example
を .env
へコピーし上記のパラメーターに対応するよう、それぞれ適切な値を設定してください。
https://github.com/nonz250/smaregi-api-php/tree/main/sample/public/.env.example
Contributing
このリポジトリは Docker の利用を推奨しています。
詳細は Makefile を参照してください。
Help
各コマンドのヘルプが表示されます。
make help
Build
Docker における開発環境をビルドします。
make build
Please execute before make Pull Request.
Pull Request を作成する前には make pr
を実行してください。
- formatter ( PHP CS Fixer )
- static analyzer ( PHPStan )
- unit test ( PHPUnit )
が実行されます。
make pr