28
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

はじめに

Laravelを使ってShopifyアプリを作成してみたので、Laravelインストール〜ショップ管理画面でアプリとして表示するまでをご紹介します。

動作環境

Mac OS Catalina
PHP 7.3.24
Laravel Framework 8.17.2

Laravel インストール

$ composer create-project laravel/laravel --prefer-dist sample-app

PHP Shopify SDK インストール

Shopifyフォーラムでおすすめされていたphp-shopifyを選定しました。
全て確認はできていませんが、ほとんどのShopifyAPIを網羅していると思われます。

$ cd sample-app/
$ composer require phpclassic/php-shopify

認証URL作成

コントローラ作成

$ php artisan make:controller AuthorizeController
Controller created successfully.

作成したコントローラを以下のように修正します。
ApiKeyとSharedSecretに関しては後述するアプリ作成手順で確認できます。
redirectUrlに関しては後述するngrokで確認できます。

app/Http/Controllers/AuthorizeController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use PHPShopify\ShopifySDK;
use PHPShopify\AuthHelper;

class AuthorizeController extends Controller
{
    public function index()
    {
        ShopifySDK::config([
            'ShopUrl' => 'yourshop.myshopify.com',          // アプリをインストールするショップURL
            'ApiKey' => '***YOUR-PRIVATE-API-KEY***',       // アプリ管理画面に表示されるAPIキー
            'SharedSecret' => '***YOUR-SHARED-SECRET***',   // アプリ管理画面に表示されるAPIシークレットキー
        ]);
        
        $scopes = 'read_products,write_products,read_script_tags,write_script_tags';
        $redirectUrl = '***YOUR-REDIRECT-URL***';           // アプリのリダイレクトURL
        AuthHelper::createAuthRequest($scopes, $redirectUrl);

        exit;
    }
}

ルーティング設定

以下のルーティングを追記します。

routes/web.php
...
Route::get('/authorize', 'App\Http\Controllers\AuthorizeController@index');

リダイレクトURL作成

コントローラ作成

$ php artisan make:controller CallbackController
Controller created successfully.

作成したコントローラを以下のように修正します。
ApiKeyとSharedSecretに関しては後述するアプリ作成手順で確認できます。

app/Http/Controllers/CallbackController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use PHPShopify\ShopifySDK;
use PHPShopify\AuthHelper;

class CallbackController extends Controller
{
    public function index()
    {
        ShopifySDK::config([
            'ShopUrl' => 'yourshop.myshopify.com',          // アプリをインストールするショップURL
            'ApiKey' => '***YOUR-PRIVATE-API-KEY***',       // アプリ管理画面に表示されるAPIキー
            'SharedSecret' => '***YOUR-SHARED-SECRET***',   // アプリ管理画面に表示されるAPIシークレットキー
        ]);

        $accessToken = AuthHelper::getAccessToken();

        // ここで生成したアクセストークンはDBに保存しますが、今回は省略します

        if (!isset($accessToken))
        {
            exit;
        }

        $config = ShopifySDK::$config;
        // ShopifySDKオブジェクト 取得
        $shopify = new ShopifySDK([
            'ShopUrl' => $config['ShopUrl'],
            'AccessToken' => $accessToken
        ]);

        // app handle 取得
        $graphQL =
            <<<Query
query {
  app {
    handle
  }
}
Query;
        $appResponse = $shopify->GraphQL->post($graphQL);
        header('Location: '.$config['AdminUrl'].'apps/'.$appResponse['data']['app']['handle']);

        exit;
    }
}

ルーティング設定

以下のルーティングを追記します。

routes/web.php
...
Route::get('/callback', 'App\Http\Controllers\CallbackController@index');

起動

Laravel

$ php artisan serve
Starting Laravel development server: http://127.0.0.1:8000

ngrok

ngrokを利用して開発環境を公開します。

$ npm install ngrok -g
$ ngrok http 8000

実行すると以下のようになります。
スクリーンショット 2020-12-04 23.44.20.png

アプリ作成

shopifyパートナーダッシュボードのアプリ管理からアプリを作成します。
URLは先ほどngrokで生成したURLに置き換えてください。
partners.shopify.com_760263_apps_new.png

アプリインストール

[ngrokで生成したURL]/authorizeにアクセスすると認証画面が表示されます。
kamizuru-test.myshopify.com_admin_oauth_request_grant_client_id=5dd5525e5e87e0c2371e87ef152673bc&redirect_uri=https%3A%2F%2Fbb0989b63cc3.ngrok.io%2Fcallback&scope=read_products%2Cwrite_products%2Cread_script_tags%2Cwrite_script_tags (1).png

「未掲載のアプリをインストールする」をクリックすると、先ほど設定したリダイレクトURLがコールされアプリ画面が表示されます。
Laravelのデフォルト画面が表示されれば無事インストール完了です。
kamizuru-test.myshopify.com_admin_oauth_request_grant_client_id=5dd5525e5e87e0c2371e87ef152673bc&redirect_uri=https%3A%2F%2Fbb0989b63cc3.ngrok.io%2Fcallback&scope=read_products%2Cwrite_products%2Cread_script_tags%2Cwrite_script_tags (1).png

API利用について

php-shopifyにサンプルがありますが、例として商品情報を取得する場合は以下のようになります。

全ての商品情報を取得

$products = $shopify->Product->get();

特定の商品情報を取得

$productID = 23564666666;
$product = $shopify->Product($productID)->get();

最後に

アプリのトップURLで認証を同時に行う、生成したトークンをDBに保存する、などの実用に向けた処理は今回省略していますが、作成したアプリをショップにインストールまでの大枠の手順はご紹介できたかと思います。
今後、ShopifyアプリをLaravelで開発する方への参考になれば幸いです。

28
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
28
27

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?