
ショコラ
PHP ヤフーショッピングのアクセストークンを取得するには?
ヤフーショッピングのアクセストークンをSOAPで取得するプログラムを作ってみた。

もっさん先輩
コンテナの用意①ドッカーの起動
docker run --rm --name=php -p 8888:80 -v $(pwd)/openid:/var/www/ -w /var/www php:apache
コンテナの用意②ライブラリのインストール
apt update && apt install -y unzip git libzip-dev zip libxml2-dev
docker-php-ext-install zip soap
コンテナの用意③コンポーザーのインストール
php -r "copy('https://getcomposer.org/installer','composer-setup.php');"
php composer-setup.php --install-dir=/usr/local/bin --filename=composer
composer require jumbojett/openid-connect-php
ドッカーファイル
FROM php:apache
RUN apt update && apt install -y unzip git libzip-dev zip libxml2-dev
RUN docker-php-ext-install zip soap
RUN php -r "copy('https://getcomposer.org/installer','composer-setup.php');"
RUN composer-setup.php --install-dir=/usr/local/bin --filename=composer
RUN composer require jumbojett/openid-connect-php
サーバー側
リフレッシュトークンをリフレッシュして、アクセストークンを発行します。
ドッカーコンテナなら「host.docker.internal」を「openid」でもいいかもしれない。
<?php
// ヤフーショッピング アクセストークン取得プロ グラム
require_once __DIR__.'/vendor/autoload.php';
use Jumbojett\OpenIDConnectClient;
class YConnectClient3
{
public function getAccessToken( $client_id, $client_secret, $refresh_token )
{
$discovery_url = 'https://auth.login.yahoo.co.jp/yconnect/v2';
$oidc = new OpenIDConnectClient( $discovery_url, $client_id, $client_secret );
$oidc->refreshToken( $refresh_token );
return $oidc->getAccessToken();
}
}
// サーバーの設定
$options = [
'uri' => 'http://host.docker.internal:80/yconnectclient3.php' // クライアントと一致させる
];
// サーバーを作成(WSDLなしモード)
$server = new SoapServer(null,$options);
// クラスを登録
$server->setClass('YConnectClient3');
// リクエストを処理
$server->handle();
クライアント側
アクセストークンを取得します。
<?php
$client_id = 'xxx';
$client_secret = 'xxx';
$refresh_token = 'xxx';
$options = array(
'location' => 'http://host.docker.internal:80/yconnectclient3.php',
'uri' => 'http://host.docker.internal:80/yconnectclient3.php',
'trace' => 1
);
$client = new SoapClient(null,$options);
try {
echo $client->getAccessToken( $client_id, $client_secret, $refresh_token );
} catch ( Exception $e ) {
var_dump( $e );
}
以上