Shopify の Storefront API を使ってサイトにEC機能を追加する
2021.09.03
新規・既存問わず、ウェブサイトに簡単にEC機能を追加できるShopify の Storefront APIを紹介します。
弊社の担当したプロジェクトでサイトにEC機能を追加したいというを話をいただくことが度々あります。
参考事例)
・ 秘密厨房 -Himitsu Kitchen- https://himitsu.kitchen/
・ Julie - ジュリー|世界中のワインからあなただけの1本を https://julie.page/
その際に弊社では Shopify の利用をおすすめすることが多いのですが、どれだけ簡単にECのカート機能を追加できるのかというのをご紹介します。
カート機能を追加する際に利用するのは Shopify の Storefront API を利用します。
Storefront APIのメリットは、Shopifyのサービス上にサイトを移行するわけではなく、既存のコードにJavaScriptのコードを追加するだけでECカート機能が構築できるため、開発コストを下げることができます。
またサイト構成の自由度や、使い慣れたテンプレートエンジンやフレームワークの利用が可能になります。
Shopifyで構築する場合、Liquidというテンプレート言語を利用する必要があり、不慣れな人には辛いかもしれません。
JS・iOS・AndroidのSDKが Storefront API には用意されており、それを使うだけで簡単にShopifyで管理されている商品データやカートを取り扱うことができます。
今回はウェブサイトの話なので、JSのSDKを利用した方法をご紹介します。
必要なパッケージのインストール
$yarn add shopify-buy
使い方
カートの作成
const fetch = require('node-fetch')
const shopify = require('shopify-buy')
// Checkout(カートのこと)を作成する
const shopifyClient = shopify.buildClient(shopifyConfig, fetch)
// Doc : https://github.com/Shopify/js-buy-sdk#creating-a-checkout
const checkout = await shopifyClient.checkout.create()
// 作成した Checkout から Checkout tokenを取得する
const checkoutToken = checkout.id
// 過去に作成した Checkout token から作成済みの Checkout を取得することもできる
const checkout = await shopifyClient.checkout.fetch(checkoutToken)
カートに任意の情報追加
カートに対して何かしら任意の情報を追加することができます。
Shopify のカートには CustomAttributesが用意されており、任意の情報を付与することが可能です。それらの内容はShopifyの受注画面で確認することが可能です。
ユースケースはサービスで利用しているニックネームを追加する場合や、配送希望日などを追加する場合にご利用いただけます。
// Doc : https://github.com/Shopify/js-buy-sdk#fetching-a-checkout
const shopifyClient = shopify.buildClient(shopifyConfig, fetch)
const userName = 'サイト上で使っているニックネームなどカートに保存したい情報'
const input = { customAttributes: { key: 'userName', value: `${userName}` } }
await shopifyClient.checkout.updateAttributes(checkoutToken, input)
カートに商品の追加
const shopifyVariantId = '1234567891011'
// ※ Shopify の商品情報についているID
// Shopifyの商品画面のURLに表示されている Product ID とは異なるので注意
const variantId = btoa(`gid://shopify/ProductVariant/${shopifyVariantId}`)
// カートに追加するデータを作成する
// カートの商品単位でも CustomAttributes に情報を追加することができる
// 今回はカート画面で表示する内容(商品の画像や値段)を追加
const lineItemsObject = {
variantId,
quantity: 1,
customAttributes: [
{ key: 'price', value: `${payload.price}` },
{ key: 'imageUrl', value: `${payload.coverImageUrl}` },
],
}
const shopifyClient = shopify.buildClient(shopifyConfig, fetch)
const checkout = await shopifyClient.checkout.addLineItems(checkoutToken, lineItemsObject)
決済画面に遷移
決済ボタンなどをクリックされた際に以下のコードを実行することで遷移が可能です。
const checkout = await shopifyClient.checkout.fetch(checkoutToken)
location.href = checkout.webUrl
まとめ
このような形でSDKを利用してカートの機能を追加することができました。
残るはそれぞれ必要な機能を関数化して、画面から呼び出してあげれば良いだけです。
反響があれば、もう少し詳しい実装も紹介できればと思います。