見出し画像

DjangoでShopifyの商品を売る

前回の記事で紹介したShopifyAPIでは、Shopifyの管理機能が提供されているShopify Admin APIを利用することができました。

しかし、Shopifyで顧客用の機能を提供するためには、Shopify Storefront APIと呼ばれるAPIを利用する必要があります。

この記事では、Storefront APIの使い方について紹介します。

Django側の準備

Storefront APIを利用するだけ場合、Django側の設定はほとんど必要ありません。Djangoをインストールして、アプリケーションを作成するだけで十分です。

shopify_frontアプリケーションを作成して、基本的な設定だけ行いましょう。

django-admin startproject shopify_store
cd shopify_store
python manage.py startapp front

settings.pyにfrontのアプリケーションを登録します。

# settings.py

INSTALLED_APPS = [
  ...省略...
   
  'front.apps.FrontConfig',
]

ルーティングの設定も行っておきます。

# shopify_store/urls.py

from django.contrib import admin
from django.urls import path, include

urlpatterns = [
   path('admin/', admin.site.urls),
   path('', include('front.urls')),
]
# front/urls.py (新規作成)

from django.urls import path
from . import views

urlpatterns = [
   path('', views.FrontIndexView.as_view(), name='index'),
]

そして、Viewには単純にテンプレートを表示するだけのViewを作成しておきます。

# front/views.py

from django.shortcuts import render
from django.views import generic 

class FrontIndexView(generic.TemplateView):
  template_name = 'front/index.html'

最後に、front/templates/front/index.htmlを作成しておきます。この後、ここでStorefront APIを使っていきますが、まずは適当に作成します。

# front/index.html

this is index page​

この時点で、開発用サーバーを立ち上げて、正常に動いているか確認しておきましょう。

python manage.py runserver
↓
http://localhost:8000 にアクセス

index.htmlに書いた内容が表示されていたら準備完了です!

スクリーンショット 2021-04-26 7.05.46

Shopify側の準備

Shopify Storefront APIを利用するには、Shopifyアプリが必要です。

publicとprivateアプリのどちらでも良いのですが、今回はより簡単に使えるprivateアプリを作成しておきます。この記事の内容は、development storeで行ってください。

スクリーンショット 2021-04-26 7.36.19

まずは、Storeにアクセスします。Storeの作り方は前回の記事を参照してください。

Storefront APIでアクセスしたいストアの右側にある[Log in]をクリックして、Storeの管理画面に入ります。

スクリーンショット 2021-04-26 7.38.16

メニューの左側にあるAppsをクリックして、Appsの管理画面に移動します。

スクリーンショット 2021-04-26 7.39.52

この画面の一番下にある、[manage private apps]をクリックします。

スクリーンショット 2021-04-26 7.40.26

[Enable private app development]をクリックします。

スクリーンショット 2021-04-26 7.41.24

書かれている諸注意を読んで、[Enable private app development]を押します。

スクリーンショット 2021-04-26 7.42.51

これでprivate appが作れるようになりました。

スクリーンショット 2021-04-26 7.45.13

早速、[Create private app]から作成します。

スクリーンショット 2021-04-26 7.48.00

適当に情報を埋めていきます。

Admin APIは今回は不要なので、なしのままで大丈夫です。
Storefront APIにはちゃんとチェックを入れておきましょう。

スクリーンショット 2021-04-26 7.49.53

最後に、[Save]を押してprivate appを作成完了します。

スクリーンショット 2021-04-26 7.50.51

また注意が出ますので、確認して[Create app]を押します。

スクリーンショット 2021-04-26 7.53.03

作成が終わると、画面下の方にあった、Storefront APIの一番下に、Storefront access tokenが生成されます。これを後で利用するので、控えておきましょう。 

Shopify Storefront APIの使い方

ShopifyにはStorefront APIを扱えるいくつかのライブラリがあります。

Javascript Buy SDK
BuyButton.js
Android Buy SDK
iOS Buy SDK
Unity Buy SDK

フロントエンドにjavascriptを使うのであればJavascript Buy SDKを利用しますが、今回は単純にBuyButton.jsを利用してみましょう。

BuyButton.jsの使い方は簡単で、まず最初にindex.htmlにスクリプトを追加します。コードは後で全部まとめて紹介します。

https://sdks.shopifycdn.com/buy-button/latest/buy-button-storefront.min.js​

これだけでもう使える状態なので、早速BuyButton.jsを利用するスクリプトを書いていきます。

BuyButton.jsの使い方

まずはShopifyに接続できるクライアントを作成します。

ここには、先ほどprivate appを作成したStoreの名前と、private appにあったstorefront access tokenを追加します。

そして、このクライアントを利用して、UIを作成するインスタンスを作成します。

var client = ShopifyBuy.buildClient({
 domain: 'skilla_test.myshopify.com',
 storefrontAccessToken: '1b985a09e2e3a2366bfde3d2e65cbddc',
});

var ui = ShopifyBuy.UI.init(client);

これで準備は完了したので、あとはUIを設置していくだけです。

商品を設置してみることにしましょう。まずは、StoreのProductsにアクセスして、どれか商品を1つクリックします。まだ商品がない方は、適当に作成しましょう。

スクリーンショット 2021-04-26 8.13.56

商品詳細ページに入ったら、そのページのURLをみて、一番最後の部分をコピーしてください。

スクリーンショット 2021-04-26 8.14.45

僕の場合は、

https://skilla-test.myshopify.com/admin/products/6605389693104

となっていたので、6605389693104をコピーしておきます。

そして、この部分を以下の関数のidの部分に入力します。

ui.createComponent('product', {
 id: 6605389693104,
 node: document.getElementById('skilla-tshirt')
});

これだけです。

以下の記事内にあったコードを参考にして、index.htmlは最終的に以下のようになりました。

# front/index.html

<!DOCTYPE html>
<html>
<head>
 <title>Shopify BuyButton Test</title>
</head>
<body>
 <h1>Products</h1>

 <div id="skilla_tshirt"></div>

<script type="text/javascript">
 /*<![CDATA[*/
 
 (function () {
   var scriptURL = 'https://sdks.shopifycdn.com/buy-button/latest/buy-button-storefront.min.js';
   if (window.ShopifyBuy) {
     if (window.ShopifyBuy.UI) {
       ShopifyBuyInit();
     } else {
       loadScript();
     }
   } else {
     loadScript();
   }
 
   function loadScript() {
     var script = document.createElement('script');
     script.async = true;
     script.src = scriptURL;
     (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script);
     script.onload = ShopifyBuyInit;
   }
 
   function ShopifyBuyInit() {
     var client = ShopifyBuy.buildClient({
       domain: 'skilla-test.myshopify.com',
       apiKey: '1b985a09e2e3a2366bfde3d2e65cbddc',
     });
 
     ShopifyBuy.UI.onReady(client).then(function (ui) {
       ui.createComponent('product', {
         id: [6605389693104],
         node: document.getElementById('skilla_tshirt'),
       });
     });
   }
 })();
 /*]]>*/
 </script>
</body>
</html>

​

これでどのように表示されるかみてみましょう。

python manage.py runserver
↓
http://localhost:8000 にアクセス

以下のように商品が表示され、[ADD TO CART]をクリックすると、 Cartに商品が追加されます。

スクリーンショット 2021-04-26 8.54.03

[CHECKOUT]をクリックすると、注文画面が表示されます。

スクリーンショット 2021-04-26 8.55.40

ただ、完全に英語表記なので日本人向けだと、怖がられて逃げられてしまうのではないでしょうか。

というわけで日本語に変えてみましょう。

ADD TO CARTボタンの日本語化

下の画像部分の文字列を変更します。ちなみに商品名は、Product登録を英語でしているだけなので、管理ページで変更できます。

スクリーンショット 2021-04-26 9.04.29

以下のように指定することで、文字列を変更できます。

ui.createComponent('product', {
 id: 6605389693104,
 node: document.getElementById('skilla_tshirt'),
 options: {
   product: {
     text: {
       button: 'カートに入れる',
     }
   }
 }
});
   

スクリーンショット 2021-04-26 9.10.29

カートの日本語化

下の画像部分の文字列を変更します。特に下の部分は日本語化したいですよね。

スクリーンショット 2021-04-26 10.06.05

ui.createComponent('product', {
     id: 6605389693104,
     node: document.getElementById('skilla_tshirt'),
     options: {
       cart: {
         text: {
           title: 'カート',
           empty: 'カートは空です',
           button: '今すぐ購入!',
           total: '合計',
           notice: '配送と割引コードは次の画面で設定してください',
         }
       }
     }

この場合、optionでcart部分のtextを変更すれば反映されます。

金額の日本語化

Shopifyの日本円に設定しているのになぜかドル表記になっています。しかも円がそのままドル表示になっているので、100倍のぼったくり価格になっています。これはヤバい( ̄▽ ̄;)

スクリーンショット 2021-04-26 10.08.43

なかなかうまくいかなかったのですが、moneyFormatを指定することで変更することができました。

ui.createComponent('product', {
     id: 6605389693104,
     node: document.getElementById('skilla_tshirt'),
     moneyFormat: '\{\{amount_no_decimals\}\}円',
}

スクリーンショット 2021-04-26 10.10.51

まとめ

ここまで変更した結果が以下となります。

# front/index.html

<!DOCTYPE html>
<html>
<head>
 <title>Shopify BuyButton Test</title>
</head>
<body>
 <h1>Products</h1>

 <div id="skilla_tshirt"></div>

<script type="text/javascript">
 /*<![CDATA[*/
 
 (function () {
   var scriptURL = 'https://sdks.shopifycdn.com/buy-button/latest/buy-button-storefront.min.js';
   if (window.ShopifyBuy) {
     if (window.ShopifyBuy.UI) {
       ShopifyBuyInit();
     } else {
       loadScript();
     }
   } else {
     loadScript();
   }
 
   function loadScript() {
     var script = document.createElement('script');
     script.async = true;
     script.src = scriptURL;
     (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(script);
     script.onload = ShopifyBuyInit;
   }
 
   function ShopifyBuyInit() {
     var client = ShopifyBuy.buildClient({
       domain: 'skilla-test.myshopify.com',
       apiKey: '1b985a09e2e3a2366bfde3d2e65cbddc',
     });
 
     ShopifyBuy.UI.onReady(client).then(function (ui) {
       ui.createComponent('product', {
         id: [6605389693104],
         node: document.getElementById('skilla_tshirt'),
         moneyFormat: '\{\{amount_no_decimals\}\}円',

         options: {

           product: {
             text: {
               button: 'カートに入れる',
             }
           },

           cart: {
             text: {
               title: 'カート',
               empty: 'カートは空です',
               button: '今すぐ購入!',
               total: '合計',
               notice: '配送と割引コードは次の画面で設定してください',
             }
           }
         }
       });
     });
   }
 })();
 /*]]>*/
 </script>
</body>
</html>

他にも変更したい場合は、以下が参考になります。

商品表示、カート、支払いの機能をすぐに導入することができました。Shopifyを使えばすぐにオンラインで商品を売れそうですね!


ここまで読んでいただけたなら、”スキ”ボタンを押していただけると励みになります!(*´ー`*)ワクワク


この記事が気に入ったらサポートをしてみませんか?