PHP ヤフーショッピングのアクセストークンを取得するには?

ショコラ
ショコラ

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 );
}

以上

Scroll to Top