shopifyのカスタマイズ – 送料のカスタマイズ方法その2 「Bespoke Shipping」アプリを使用してオリジナルのPHPコードで送料計算をする
2024.09.09.月
クライアント要望
- 送料計算を独自の計算にしたい
対応したこと
- アドバンスドプランの申し込み
- 「Bespoke Shipping」アプリのインストール
- 「Macro Editor」でコードを記述
送料計算の基本仕様
shopifyで可能な送料計算の仕様は以下の通りです。
1. 重量に基づく送料
- 商品の重量を基に送料を設定する方法です。これは最も一般的な方法で、商品が重くなるにつれて送料も増加します。
2.価格に基づく送料
- 注文金額に応じて送料を設定することができます。例えば、注文金額が一定額を超えた場合に無料で配送する設定も可能です。
3.距離に基づく送料(配送先の場所)
- 特定の配送エリアごとに異なる送料を設定することも可能です。
4.商品数に基づく送料
- 商品の数量に基づいて送料を設定することも可能です。
これ以外に送料計算をカスタマイズする場合、Shopifyの「Commerce Components by Shopify」(CCS)を有効にする必要があります。
基本、CCSはアドバンスドプラン以上に申し込めば利用が可能になります。
「Bespoke Shipping」アプリを使用してオリジナルのPHPコードで送料計算をする
流れ
- お客様が注文
- 決済の配送料に独自に計算された送料を表示
- 決済完了
事前準備
1.Advancedプランに申し込みます。
AdvancedプランではCCSがデフォルトで有効ですので、
本番で利用する場合はプランの申込を行ってください。
2.「Bespoke Shipping」アプリをインストールします。
以下のURLにアクセスしてアプリのインストールを行います。
開発サイトでは無料で試すことができ、本番サイトでは有料で契約を行う形になります。
https://apps.shopify.com/custom-shipping-rates?locale=ja
3.「Macro Editor」でオリジナルコードを記述します。
PHPで以下のようにオリジナルコードを記述します。
Macro EditorのLaunch Editorをクリックしてください。
calculateshipping($DATA)という関数をカスタマイズする実装になります。
$DATA引数の中には注文情報の配列が入りますので、この情報を操作しながら独自の送料計算が可能です。
/* This macro will be parsed as PHP code (see http://www.php.net)
The calculateshipping function is called every time a shipping calculation request is made by Shopify.
The function must return an array of available shipping options, otherwise no shipping options will be returned to your customers.
*/
function calculateshipping($DATA) {
/* do not edit above this line */
// 送料計算のためのカスタムロジック
$_RATES = array();
// provinceコードと都道府県名のマッピング
$province_mapping = array(
'JP-01' => '北海道',
'JP-02' => '北東北', // 青森県
'JP-03' => '北東北', // 岩手県
'JP-04' => '南東北', // 宮城県
'JP-05' => '北東北', // 秋田県
'JP-06' => '南東北', // 山形県
'JP-07' => '南東北', // 福島県
'JP-08' => '関東', // 茨城県
'JP-09' => '関東', // 栃木県
'JP-10' => '関東', // 群馬県
'JP-11' => '関東', // 埼玉県
'JP-12' => '関東', // 千葉県
'JP-13' => '関東', // 東京都
'JP-14' => '関東', // 神奈川県
'JP-15' => '信越', // 新潟県
'JP-16' => '北陸', // 富山県
'JP-17' => '北陸', // 石川県
'JP-18' => '北陸', // 福井県
'JP-19' => '関東', // 山梨県
'JP-20' => '信越', // 長野県
'JP-21' => '東海', // 岐阜県
'JP-22' => '東海', // 静岡県
'JP-23' => '東海', // 愛知県
'JP-24' => '東海', // 三重県
'JP-25' => '関西', // 滋賀県
'JP-26' => '関西', // 京都府
'JP-27' => '関西', // 大阪府
'JP-28' => '関西', // 兵庫県
'JP-29' => '関西', // 奈良県
'JP-30' => '関西', // 和歌山県
'JP-31' => '中国', // 鳥取県
'JP-32' => '中国', // 島根県
'JP-33' => '中国', // 岡山県
'JP-34' => '中国', // 広島県
'JP-35' => '中国', // 山口県
'JP-36' => '四国', // 徳島県
'JP-37' => '四国', // 香川県
'JP-38' => '四国', // 愛媛県
'JP-39' => '四国', // 高知県
'JP-40' => '北九州', // 福岡県
'JP-41' => '北九州', // 佐賀県
'JP-42' => '北九州', // 長崎県
'JP-43' => '南九州', // 熊本県
'JP-44' => '北九州', // 大分県
'JP-45' => '南九州', // 宮崎県
'JP-46' => '南九州', // 鹿児島県
'JP-47' => '沖縄', // 沖縄県
);
// 配送料の設定
$shipping_rates = array(
'北海道' => array(
array('max_size' => 60, 'max_weight' => 2, 'price' => 1440),
// その他のレート...
),
// 他の地域のレートを追加...
);
$province_code = $DATA['destination']['province'];
$region = isset($province_mapping[$province_code]) ? $province_mapping[$province_code] : null;
if ($region && isset($shipping_rates[$region])) {
$_RATES[] = array(
"service_name" => "配送サービス名",
"service_code" => "サービスコード",
"total_price" => 2000 * 100, // 配送料(セント単位で指定)
"currency" => "JPY",
);
}
return $_RATES;
/* do not edit below this line */
}
購入確認
お客様が注文を行うと赤枠の箇所に独自プログラムにより計算された送料が表示されます。
前回の記事よりもスマートな方法を紹介させていただきました。
CCSを有効にすることで「CarrierService API」という配送料変更のためのAPIも使用可能になるため、色々な方法が試せるかもしれません。ぜひチャレンジしてみてください。