購入フォームを作成する

このエントリーでは、Shopping Cart 拡張アプリを使用して、購入フォームを作成する手順を説明します。購入フォームは以下の手順で作成できます。

  1. 決済フォーム用のGETモジュールを設定する
  2. 決済フォーム用のPOSTモジュールを設定する
  3. 決済方法の選択肢を実装する
  4. 追加手数料の選択肢を実装する

決済フォーム用のGETモジュールを設定する

a-blog cms でフォームを設置する場合は、Form モジュールをつかってフォームを作成しますが、決済フォームでは Shopping Cart 拡張アプリで提供している ShoppingForm モジュールを使用します。

基本的には、Form モジュールを設置していたところを ShoppingForm モジュールに置き換えていただくことで動作いたします。また、標準の Form モジュールを継承しているため、バリデーターやステップフォームの機能も備えています。

<!-- BEGIN_MODULE ShoppingForm -->

<!-- BEGIN step-->
<!-- 新規 -->
<!-- END step -->

<!-- BEGIN step#reapply -->
<!-- 修正 -->
<!-- END step#reapply -->

<!-- BEGIN step#confirm -->
<!-- 確認 -->
<!-- END step#confirm -->

<!-- BEGIN step#result -->
<!-- 完了 -->
<!-- END step#result -->

<!-- END_MODULE ShoppingForm -->

また、ShoppingForm モジュールでは、決済フォームで選択した決済方法や追加手数料を以下の変数とブロックで表示することが可能です。

Ver. 2.1.0 より、Order_Summary モジュールを利用して、決済フォームで選択した決済方法や追加手数料を表示できるようになりました。そのため、Ver. 2.1.0 以降では Order_Summary モジュールを利用して注文情報を表示することを推奨します。

Order_Summary モジュールで利用できる変数については、ShoppingCart 拡張アプリの管理画面内にある変数表からご確認ください。



変数名 概要
paymentMethodBlock 選択された決済方法のブロック
paymentMethodName 選択された決済方法の名前
paymentMethodCommissionPaid 選択された決済方法の決済手数料
paymentMethodDescription 選択された決済方法の説明テキスト
paymentMethodMailMessage 選択された決済方法のメール用テキスト


変数名 概要
additionId 選択された追加手数料のID
additionName 選択された追加手数料の名前
additionFee 選択された追加手数料の手数料

追加手数料を表示する変数は additionGroup:loop ブロック内で表示できます。

<h3 class="form-table-title">追加手数料</h3>
<table class="form-table">
  <!-- BEGIN additionGroup:loop -->
  <tr>
    <th></th>
    <td>
      {additionId} {additionName}(¥{additionFee}[number_format])
    </td>
  </tr>
  <!-- END additionGroup:loop -->
</table>

決済フォーム用のPOSTモジュールを設定する

a-blog cms でフォームを送信する場合は、Form_Confirm モジュールや Form_Submit モジュールを利用してフォームの確認ステップやエラーステップに遷移しますが、決済フォームでは Shopping Cart 拡張アプリで提供している ShoppingForm_Confirm モジュール及び、ShoppingForm_Submit モジュールを使用します。

利用方法は普段、Form_Confirm モジュールを使用しているところで ShoppingForm_Confirm モジュールを使用し、Form_Submit モジュールを使用しているところで、ShoppingForm_Submit モジュールを使用してフォーム送信を行うようにテンプレートを記述します。具体的なサンプルコードは以下になります。

ShoppingForm_Confirm モジュールを使用するサンプルコード

<form action="" method="post" class="js-unload_alert" enctype="multipart/form-data">
  <div class="form-btn-wrap">
    <input
      type="submit"
      name="ACMS_POST_ShoppingForm_Confirm"
      value="入力内容の確認へ"
    />
  </div>
  <input type="hidden" name="takeover" value="{takeover}" />
  <input type="hidden" name="step" value="confirm" />
  <input type="hidden" name="error" value="reapply" />
  <input type="hidden" name="id" value="shoppingForm" />
</form>

ShoppingForm_Submit モジュールを使用するサンプルコード

<form action="" method="post" class="js-unload_alert" enctype="multipart/form-data">
  <div class="form-btn-wrap">
    <input
      type="submit"
      name="ACMS_POST_ShoppingForm_Submit"
      value="注文を確定する"
    />
  </div>
  <input type="hidden" name="takeover" value="{takeover}" />
  <input type="hidden" name="step" value="result" />
  <input type="hidden" name="error" value="confirm" />
  <input type="hidden" name="id" value="shoppingForm" />
</form>

これで「決済フォーム用のPOSTモジュールを設定する」のステップは完了です。ShoppingForm_Confirm 及び、ShoppingForm_Submit モジュールが具体的に何をやっているかについてはリファレンスを参照してください。

決済方法を指定するカスタムフィールドを実装する

Shopping Cart 設定で設定した決済方法を指定するカスタムフィールドを作成します。フィールド名は payment-method である必要があります。以下は Payment_Select モジュールを使用して実装したサンプルコードになります。

Payment_Select モジュールを利用することで、自動的に決済方法のステータスを考慮した選択肢を表示することができます。

        <!-- BEGIN_MODULE Payment_Select -->
        <ul>
          <!-- BEGIN payment:loop -->
          <li>
            <div
              class="acms-form-radio"
            >
              <input
                id="input-radio-payment-method-{block}"
                type="radio"
                name="payment-method"
                value="{block}"
                \{payment-method:checked#{block}\}
                <!-- BEGIN_IF [\{payment-method\}/em/_and_/{payment.i}/eq/1] -->
                checked="checked"
                <!-- END_IF -->
                data-validator="payment-method"
              />
              <label for="input-radio-payment-method-{block}">
                <i class="acms-ico-radio"></i>{name}<!-- BEGIN_IF [{commissionPaid}/gt/0] -->:手数料 ¥{commissionPaid}[number_format]<!-- END_IF -->
              </label>
              <!-- BEGIN description:veil -->
              <div>
                <!-- BEGIN_IF [{description}[delnl]/nem] -->
                <div>{description}[nl2br]</div>
                <!-- END_IF -->
                <!-- BEGIN_IF [{image@path}/nem] -->
                <img
                  src="%{MEDIA_ARCHIVES_DIR}{image@path}"
                  class="acms-img-responsive"
                  alt="{image@alt}"
                  width="{image@width}"
                  height="{image@height}"
                >
                <!-- END_IF -->
              </div>
              <!-- END description:veil -->
            </div>
          </li>
          <!-- END payment:loop -->
        </ul>
        <!-- END_MODULE Payment_Select -->
        <input type="hidden" name="field[]" value="payment-method" />
        <input type="hidden" name="payment-method:v#required" id="payment-method-v-required" />
        <div role="alert" aria-live="assertive">
          <div data-validator-label="payment-method-v-required" class="validator-result-\{payment-method:v#required\}">
            <p class="form-error-text">決済方法を選択してください</p>
          </div>
        </div>

追加手数料を指定するカスタムフィールドを実装する

Shopping Cart 設定で設定した追加手数料を指定するカスタムフィールドを作成します。フィールド名は additionである必要があります。追加手数料は複数の値を指定して送信することが可能です。複数の値を指定してフォームを送信した場合、追加手数料は各手数料を合計した金額になります。以下は Addition_Select モジュールを使用して実装したサンプルコードになります。

Addition_Select モジュールを利用することで、自動的に決済方法のステータスを考慮した選択肢を表示することができます。

<!-- BEGIN_MODULE Addition_Select -->
<!-- BEGIN addition:veil -->
<h3>追加手数料</h3>
<table>
  <tbody>
    <tr>
      <th></th>
      <td>
        <ul>
          <!-- BEGIN addition:loop -->
          <li>
            <div class="acms-form-checkbox">
              <input type="checkbox" name="addition[]" value="{id}" \{addition:checked#{id}\} id="input-checkbox-addition-{id}" />
              <label for="input-checkbox-addition-{id}">
                <i class="acms-ico-checkbox"></i>{name}(¥{fee}[number_format])</label>
            </div>
          </li>
          <!-- END addition:loop -->
        </ul>
        <input type="hidden" name="field[]" value="addition" />
      </td>
    </tr>
  </tbody>
</table>
<!-- END addition:veil -->
<!-- END_MODULE Addition_Select -->

配送地域を指定するカスタムフィールドを実装する

決済フォームでは、配送先を送信することで、ShoppingCart設定 で配送グループごとに設定した送料設定に従って送料を計算します。送料を指定するフィールド名は deliver-area である必要があります。以下はサンプルコードになります。サンプルコードでは1つ前のステップで送信したカスタムフィールド deliver-pref の値を指定しています。

<input
  type="hidden"
  name="deliver-area"
  value="{deliver-pref}"
/>
<input type="hidden" name="field[]" value="deliver-area" />

購入エラー時のステップを追加する

購入フォームでは、購入時にエラーが発生した場合に表示する shoppingError ステップが標準で用意されています。

shoppingError ステップは購入処理中の商品に在庫切れの商品が存在する場合などに表示されます。

<!-- BEGIN_MODULE ShoppingForm -->

<!-- BEGIN step#shoppingError -->
<section>
  <h2>購入エラーが発生しました。</h2>
  <p class="message">購入手続き中の商品に問題がある可能性があります。お手数ですが、はじめからやり直して下さい。</p>
  <div class="form-btn-wrap">
    <a href="%{BASE_URL}cart/" class="btn">購入フォームに戻る</a>
  </div>
</section>
<!-- END step#shoppingError -->

<!-- END_MODULE ShoppingForm -->

まとめ

このエントリーでは、購入フォームを作成する方法を学びました。購入フォームのカスタマイズができるようになれば基本的なECサイトの構築についてはバッチリです。しかし、このままではサイト内で決済をすることができません。決済サービスと連携して、オンライン上で決済ができるECサイトを制作したい場合はこちらのドキュメントも合わせてご覧ください。

Squareと連携してクレジットカード決済機能を実装する

Shopping Cart 拡張アプリでは、決済サービスと連携することで、ECサイトにクレジットカード決済機能を実装することができます。このエントリーでは決済サービスとして Square と連携して、クレジットカード決済機能を実装する手順を説明します。

Square でクレジットカード決済を実装する場合の注意点

Square でクレジットカード決済を実装する場合、以下の場合は使用できませんのでご注意ください。

  • 税計算方式が「積み上げ」に設定されている
  • 税計算端数処理が「四捨五入」もしくは「切り上げ」に設定されている

クレジットカード決済機能を実装する

Squareと連携してクレジットカード決済機能を実装するには、以下の設定をする必要があります。

  • クレジットカード決済で使用するサービスとして Square を選択する
  • クレジットカード決済用の決済方法を登録する

また、a-blog cms を設置しているディレクトリに .env ファイルが作成されている必要があります。

クレジットカード決済で使用するサービスとして Square を選択する


連携するクレジットカード決済を設定する項目

連携するクレジットカード決済を選択する

クレジットカード決済を利用できるようにするためには、連携するクレジットカード決済を選択する必要があります。Shopping Cart 設定 > 基本設定 > 決済サービス設定で設定することができます。

クレジットカード決済用の決済方法を登録する


クレジットカード決済用の決済方法を登録する場合はブロック名を「creditcard」にする必要があります。

クレジットカード決済用の決済方法を登録する場合はブロック名を「creditcard」にする必要があります。


クレジットカード決済用の決済方法を登録する場合はブロック名を「creditcard」にする必要があるので、ブロック名を「creditcard」と入力した決済方法を Shopping Cart 設定 > 注文画面設定 > 決済方法と手数料で登録してください。

Square との連携

Square との連携は以下の手順で行います。

  1. アプリケーションを新規作成または選択する
  2. アプリケーションのOAuth設定をする
  3. a-blog cms と Square を OAuth 認証する
  4. Square を利用したクレジットカード決済に必要な HTML をテンプレートに記述する

1. アプリケーションを新規作成または選択する

まず、Square Developer にログインし、Applications 選択ページへ移動します。Square Developer のアカウントがなければ以下のURLから新規作成してください。


Applications 選択ページへ移動すると ↓ のような画面になっています。


アプリケーション選択ページ

アプリケーション選択ページ


次に、Shopping Cart 拡張アプリと連携させたいアプリケーションを新規作成または選択し、アプリケーションの個別の設定ページへ移動します。

2. アプリケーションの OAuth 設定をする


アプリケーションの個別ページ

アプリケーションの個別ページ


アプリケーションの個別の設定ページへ移動すると、↑ のような画面になっています。

画面左のメニューから、アプリケーションの OAuth 設定ページに移動します。開発中であれば Sandbox タブ、本番運用なら Production タブを選択します。(画像は Sandbox タブ)



OAuth 設定ページを開いたら、「Application ID」と「Application Secret」をメモ帳などに控えておいてください。

最後に、「Redirect URL」に https://ドメイン名/bid/ブログID/admin/app_shopping_cart_square_callback/と設定して保存します。https:// から始まるURLでないと登録できませんので注意してください。

a-blog cms と Square を OAuth 認証する

Square 側の設定ができたら、今度は a-blog cms 側の設定を行います。

まず、a-blog cmsの起動ファイルである、index.php と同じ階層に .env ファイルを設置します。a-blog cms をインストールした際に env.txt として設置してあるファイルを .env にリネームしていただければ ok です。

次に、拡張アプリの設定を行います。ShoppingCart 設定 > 決済サービスとの連携タブを選択してください。


Square との OAuth 認証が完了する前の設定画面

Square との OAuth 認証が完了する前の設定画面


先程メモ帳に控えた、「Application ID」と「Application Secret」を入力します。Sandbox(テスト運用)モードで認証する場合は、Sandbox(テスト運用)モードの設定 の入力欄に、Production(本番運用)モードで認証する場合は、Production(本番運用)モードの設定の入力欄に「Application ID」と「Application Secret」を入力してください。また、Sandbox(テスト運用)モードで認証する場合は、Sandboxモードのチェックボックスを有効にしてください。

「Application ID」と「Application Secret」の入力ができたら、一度「保存」ボタンをクリックし、設定を保存してください。保存すると、「認証する」ボタンがクリックできるようになります。

「認証する」ボタンがクリックできるようになったのを確認したら、「認証する」ボタンをクリックし、Square と OAuth 認証を行います。認証ページに遷移するので、ページ内の「許可」ボタンをクリックして認証を許可します。


認証の許可後、Shopping Cart 設定ページにリダイレクトされた画面

認証の許可後、Shopping Cart 設定ページにリダイレクトされた画面


認証の許可後、Shopping Cart 設定ページに自動的にリダイレクトされます。リダイレクト後の画面は ↑ のような画面になっています。ここまでで、OAuth 認証は完了しましたが、Square との連携はまだ完了できていません。ここまでの設定ができると、店舗というセレクトボックスが選択できるようになります。店舗のセレクトボックスから、アプリケーションで使用する店舗を選択して、保存してください。


OAuth 認証と店舗の設定が完了すると、認証ステータスが緑色になります。

OAuth 認証と店舗の設定が完了すると、認証ステータスが緑色になります。


店舗の設定が完了すると、Square との OAuth 認証は完了です。↑ 画像のように、認証ステータスが緑色になっていたらSquareとの連携が完了しています。

OAuth 認証時に、"サンドボックスアカウント用のOAuthフローを開始するには、最初に開発者向けSquare データから加盟店向けテストアカウントを起動します。" というエラーが発生した場合は、あらかじめCMSにログインしているブラウザで、開発者向けのSquareアカウントを起動してください。


開発者向けの Square アカウントを起動する手順は以下になります。


  1. Squareの ダッシュボード を開く
  2. 「Sandbox Test Accounts」のアカウントの「Open」ボタンをクリック
  3. CMSの管理画面に戻り、再度「認証」ボタンをクリックする

Square Sandbox とは

Square Sandbox とは、Square API のテストを行うために Square が用意している特別な環境です。

例えば、本番環境で Square API を利用したクレジットカード決済を行った場合は決済手数料がかかりますが、Sandbox 環境ではクレジットカードが実際に請求されることはなく、実際の銀行で支払いが処理されることはないため、決済手数料はかかりません。

Sandbox 環境では通常のクレジットカードは使用できません。Sandbox Payments に記載されているテスト用のクレジットカードを使用する必要がありますのでご注意ください。

Square を利用したクレジットカード決済に必要なテンプレートを記述する

最後に、Square を利用したクレジットカード決済に必要な テンプレートを記述します。

まず、Square と連携してクレジットカード決済をするために必要なJavaScript ライブラリを読み込みます。head要素内に下記のコードを記述してください。

<!-- BEGIN_MODULE Admin_InjectTemplate id="%{PAYMENT_SERVICE}-js" -->
<!-- END_MODULE Admin_InjectTemplate -->

次に、クレジットカード情報の入力欄を表示します。 クレジットカード情報の入力欄を表示したい箇所に下記のコードを記述してください。


<div
  id="js-sq-card-container"
  data-square-three-d-secure="true"
  data-square-amount="3000"
  data-square-currency-code="JPY"
  data-square-intent="CHARGE"
  data-square-seller-keyed-in="false"
  data-square-customer-initiated="true"
  data-square-billing-contact-given-name="太郎"
  data-square-billing-contact-family-name="山田"
  data-square-billing-contact-email="info@example.com"
  data-square-billing-contact-phone="090-0123-4567"
  data-square-billing-contact-country-code="JP"
  data-square-billing-contact-postal-code="4500002"
  data-square-billing-contact-state="愛知県"
  data-square-billing-contact-city="名古屋市中村区"
  data-square-billing-contact-address-line1="モンマートビル5階"
  data-square-billing-contact-address-line2="名駅3丁目18-5"
>
  <!-- Squareのカード入力用コンポーネントが表示されます -->
</div>

data-square から始まる属性の値は ShoppingForm モジュールや Order_Summary モジュールの変数を利用するなどの方法で動的に設定してください。


3Dセキュア機能を有効にするため、 data-square-three-d-secure 属性の値に true を設定し、決済情報及び決済者情報を設定してください。決済者情報は必須ではありませんが、セキュリティのため、できるだけ多くの情報を設定してください。


data 属性についての説明は以下になります。



属性名 説明 デフォルト
data-square-three-d-secure 3Dセキュアを有効にするかどうかを指定します。 true | false のどちらかになります。
true にした場合、data-square-amount は必須になります。
false
data-square-amount  クレジットカード支払いで請求される総額を指定します。(注1, 2)
data-square-currency-code ISO4217 の通貨コードを指定します。(注1, 2) JPY
data-square-intent
支払いのトランザクションインテントを指定します。CHARGE | CHARGE_AND_STORE のどちらかになります。(注1, 2)
CHARGE
data-square-seller-keyed-in
販売者が顧客に代わって支払詳細を入力したことを示します。これは、支払いをMail Order / Telephone Order (MOTO)としてフラグを立てるために使用されます。
true | false のどちらかで指定します。(注1, 2)
false
data-square-customer-initiated
顧客が支払いを開始したかどうかを示します。true | false のどちらかで指定します。(注1, 2)
true
data-square-billing-contact-given-name
購入者の名 (ファーストネーム)または、名前を指定します。(注1, 2)

data-square-billing-contact-family-name
購入者の苗字 (ファミリーネーム、「ラスト」ネーム)を指定します。(注1, 2)
性と名を分けて指定できない場合は、フルネームを data-square-billing-contact-given-nameとして指定してください。
data-square-billing-contact-email 購入者のメールアドレスを指定します。(注1, 2)
data-square-billing-contact-phone 購入者の電話番号を指定します。(注1, 2)
data-square-billing-contact-country-code 購入者の住所情報の内、 ISO 3166-1 の国名コードを指定します。(注1, 2)
data-square-billing-contact-postal-code 購入者の住所情報の内、郵便番号を指定します。(注1, 2)
data-square-billing-contact-state 購入者の住所情報の内、都道府県を指定します。(注1, 2)
data-square-billing-contact-city 購入者の住所情報の内、市区町村を指定します。(注1, 2)
data-square-billing-contact-address-line1 購入者の住所情報の内、国名コード・郵便番号・都道府県・市区町村以降の住所を指定します。(注1, 2)
data-square-billing-contact-address-line2 購入者の住所情報の内、国名コード・郵便番号・都道府県・市区町村以降の住所を指定します。(注1, 2)
data-square-billing-contact-address-line3 購入者の住所情報の内、国名コード・郵便番号・都道府県・市区町村以降の住所を指定します。(注1, 2)

  • 注1:これらの値はSquareによるクレジットカード情報のトークン化が行われるとき、つまりクレジットカード情報を入力するフォームを送信するときに評価されます。
  • 注2:これらの値は、まず document.querySelector() での検索に使用され、見つかればその value を使い、なければ指定値を生の文字列として扱います。

決済情報及び、決済者情報を設定することで、Square の API で適切に 3Dセキュア認証が必要かどうか判定することができ、必要であれば自動的に決済者に追加の認証を要求します。

設定した決済情報及び決済者情報は、Square のサーバーに送信され、検証のための詳細情報として扱われます。詳細は以下のURLからご確認ください。

Reference for tokenize() method fields


最後に、先程読み込んだJavaScriptライブラリを活用してクレジットカード情報入力用のコンポーネントを初期化します。 Admin_InjectTemplate モジュールで JavaScript ライブラリを読み込めていた場合、acmsSquare というオブジェクトが参照できるようになっています。acmsSquare オブジェクト の creditCard メソッドを実行することでクレジットカード情報入力用のコンポーネントを初期化できます。そのとき、第1引数に、クレジットカード入力要コンポーネントを表示したい要素をセレクター形式で指定してください。サンプルコードでは、先程 クレジットカード情報の入力欄を表示したい箇所に記述した要素を指定しています。


<script>  
  window.addEventListener('DOMContentLoaded', () => {
    if (document.querySelector('#js-sq-card-container')) {
      acmsSquare.creditCard('#js-sq-card-container');
    }
  });
</script>

creditCard メソッドを実行することで、クレジットカード情報入力用のコンポーネントを囲む form 要素の送信ボタンをクリックしたときに、Squareと通信し、クレジットカードの識別情報を取得します。

Square から取得した、クレジットカード識別情報は、「square-nonce」というフィールドに格納されます。このフィールドは JavaScript によって自動で追加されます。

<input type="hidden" name="square-nonce" value="取得したクレジットカード情報">
<input type="hidden" name="field[]" value="square-nonce">

ここまでできたら、Square と連携したクレジットカード決済機能が実装できています。実際に決済フォームからクレジットカード決済を試してみてください。

クレジットカード決済の失敗を表示する

不正なクレジットカード番号で決済が行われた場合など、クレジットカード決済でエラーとなることがあります。決済時にエラーが起きたことを表示できるようにするため、決済フォームでクレジットカード決済が失敗した場合、creditcard というフィールドの auth オプションがエラー判定されるようになっています。

そのため、決済フォームに、creditcard フィールドの auth オプションがエラー判定されたときのコードを書いておくと、クレジットカード決済が失敗した場合のエラーメッセージを表示可能です。以下はサンプルのソースコードです。

<div role="alert" aria-live="assertive">
  <div class="validator-result-{creditcard:v#auth}">
    <p class="form-error-text">クレジットカード認証に失敗しました。</p>
  </div>
</div>

オプション

payments オブジェクトの creditCard メソッドは第2引数にオプションを設定することができます。オプションは以下の項目が利用可能です。



オプション名 概要 デフォルト値
submitterElementOrSelector 購入フォームを送信するボタン要素を指定します。セレクター形式の文字列 or HTMLElement 型 で指定することが出来ます。 '[name*="ACMS_POST_ShoppingForm"]'
calbacks クレジットカード情報入力用のコンポーネントにイベントを追加できます。squareで用意されているイベントが設定できます。詳しくはこちらを参照してください。 {}
focus 初期化時に、クレジットカード情報入力用のコンポーネント内の特定のフィールドにフォーカスをセットします。指定できるフィールドについてはこちらを参照してください。フィールドを文字列形式でしていできるほか、関数を指定することも可能です。関数を指定した場合 focus メソッドが指定した関数の引数に渡されます。 undefined
recalculateSize クレジットカード情報入力用のコンポーネントのサイズを再計算します。カードコンポーネントは通常、購入者のブラウザのサイズに基づいて自動的にサイズ変更されますが、カードコンポーネントが display: none の計算スタイルプロパティを持つ要素に含まれている場合、カードコンポーネントは定義された幅を持たなくなり、したがってモバイルとデスクトップの構成間で適切にサイズ変更されなくなります。再び表示されたとき、Card コンポーネントはブラウザウィンドウに合わせて自動的にサイズを更新しません。
このメソッドrecalculateSize()を使用すると、Cardコンポーネントのサイズを強制的に再計算し、モバイルまたはデスクトップ用に適切に表示することで、このエッジケースを処理することができます。関数で設定でき、設定された関数には、recalculateSize  メソッドが引数として渡されます。
() => {}
squareCardOptions クレジットカード情報入力用のコンポーネントのスタイルや動作をカスタマイズするためのオプションです。こちらに記載されている項目がそのまま利用可能です。 { postalCode: '' }

オプション設定例

オプションを設定する例になります。

<script>
  acmsSquare.creditCard('#js-sq-card-container', {
    submitterElementOrSelector: '#js-shoppingForm-submit'
    callbacks: {
      cardBrandChanged(event) {
        console.info(event)
      },
      errorClassAdded(event) {
        console.info(event)
      },
      errorClassRemoved(event) {
        console.info(event)
      },
      escape(event) {
        console.info(event)
      },
      focusClassAdded(event) {
        console.info(event)
      },
      focusClassRemoved(event) {
        console.info(event)
      },
      postalCodeChanged(event) {
        console.info(event)
      },
      submit(event) {
        console.info(event)
      },
    },
    focus: 'cardNumber', // or (focus) => { focus('cardNumber') }
    recalculateSize: (recalculateSize) => {
      document
        .querySelector('.js-recalculate-size-trigger')
        .addEventListener('change', () => {
            recalculateSize();
         });
    },
    squareCardOptions: {
      postalCode: '',
      includeInputLabels: true,
      style: {
         "input": {
           "color": "red",
         },
         "@media screen and (max-width: 600px)": {
           "input": {
             "fontSize": "12px",
           }
         }
       }
     },
  });
</script>

イベント

Square 用の JavaScriptライブラリ では以下のイベントを用意しています。イベントを活用することで、特定のアクションが発生した時に処理を挟み込めます。



イベント名 概要
acmsSquareTokenizeSuccessed クレジットカード情報の取得に成功したときに発生します。
acmsSquareTokenizeFailed クレジットカード情報の取得に失敗したときに発生します。

イベント設定例

window.addEventListener('acmsSquareTokenizeSuccessed', (event) => {
  // クレジットカード情報の取得に成功したとき
  console.info(event)
})

window.addEventListener('acmsSquareTokenizeFailed', (event) => {
  // クレジットカード情報の取得に失敗したとき
  console.info(event)
})

メールテンプレートで利用可能な変数

Square を利用して決済した場合、メールテンプレートで以下の変数が利用可能です。



変数名 概要
square-last4 クレジットカード番号の下4桁を表示できます。
square-receiptNumber
Ver. 2.1.0〜
Square によって発行されるレシート番号
square-receiptUrl
Ver. 2.1.0〜
Square によって発行されるレシートのURL

お取引一覧のメモをカスタマイズする Ver. 2.2.2〜


Square の管理画面内のお取引一覧ページ

Square のお取引一覧ページ

Square のお取引一覧ページに表示されるメモをカスタマイズすることができます。デフォルト値は "a-blog cms による決済" です。

購入フォームにカスタムフィールドで square-note の値として、任意のメモを送信することで、Square のお取引一覧ページに表示されるメモを任意のテキストにカスタマイズできます。

以下は フォームのサンプルコードになります。

<input type="hidden" name="square-note" value="ウェブサイト決済" />
<input type="hidden" name="field[]" value="square-note" />

上記の例では、お取引一覧ページに表示されるメモを "ウェブサイト決済" という文字にカスタマイズしています。

おめでとうございます。ついに、ECサイトにクレジットカード決済機能を導入することができました。ここまでできたら ECサイトとしての機能はひととおり実装できているでしょう。

【非推奨】マイページ機能を利用して、閲覧ページ上からユーザー情報を変更できるようにする

Ver. 3.1 より、a-blog cms にマイページ機能が追加されたためこの機能は非推奨になりました。マイページ機能を利用したい場合は、標準機能のモジュールをご利用ください。


Shopping Cart 拡張アプリを使用することでマイページ機能を実装することができます。通常では、ユーザーの情報(基本設定・カスタム設定)を変更するためには管理画面上で編集する必要がありますが、マイページ機能を利用することで閲覧ページ上からユーザーの情報(基本設定・カスタム設定)を変更することができるようになります。


このエントリーではマイページ機能を実装して、閲覧ページ上でユーザー情報を変更できるようにする方法を解説します。

Mypage モジュール

Shopping Cart 拡張アプリをインストールすることで Mypage モジュールという GET モジュールが利用できるようになります。

Mypage モジュールでは、ユーザーの情報(基本設定・カスタム設定)の表示、更新時にエラーを検知した場合や更新に成功した場合に表示するブロックを提供しています。

ユーザーの情報(基本設定・カスタム設定)の表示

Mypage モジュールを利用することで、ユーザーの情報(基本設定・カスタム設定)の表示ができます。例えば、以下のように記述することでユーザーの名前を表示できます。

<!-- BEGIN_MODULE Mypage -->
<input id="name" type="text" name="name" autocomplete="name" class="" value="{name}" placeholder="山田太郎"data-validator="name">
<input type="hidden" name="user[]" value="name">
<input type="hidden" name="name:v#required"> <!-- 必須項目 -->
<!-- BEGIN name:v#required -->
<p class="form-error-text">名前を入力してください</p>
<!-- END name:v#required -->
<!-- END_MODULE Mypage -->

更新時にエラーを検知した場合にエラーメッセージを表示する

ユーザーの情報(基本設定・カスタム設定)の更新時に、フォームのバリデーターに引っかかった場合などでエラーが発生してユーザー情報(基本設定・カスタム設定)の更新ができないことがあります。Mypage モジュールを利用することで、更新時のエラーを検知して、エラーメッセージを表示することができます。

Mypage モジュールでは、 msg#error ブロックを記述することで、エラー時に msg#error ブロックを表示することができます。

<!-- BEGIN msg#error -->
<p class="alert-message">マイページの更新に失敗しました</p>
<!-- END msg#error -->

ユーザー情報の更新に成功した場合に、更新成功メッセージを表示する

Mypage モジュールでは、ユーザーの情報(基本設定・カスタム設定)の更新に成功した場合に msg#update ブロックを表示します。

<!-- BEGIN msg#update -->
<p class="success-message">マイページの更新に成功しました</p>
<!-- END msg#update -->

MypageUpdate モジュール

Shopping Cart 拡張アプリをインストールすることで MypageUpdate モジュールという POST モジュールが利用できるようになります。

MypageUpdate モジュールは、ユーザーの情報(基本設定・カスタム設定)の更新を行うためのモジュールになります。使い方は、他の POSTモジュールと同様に送信したいフォームの submit ボタン要素の name 属性の値に ACMS_POST_Mypage_Update を指定します。

<form action="" method="post">
  <!-- フォーム部品を読み込むためのinclude文 -->
  @include("/login/basic.html")
  <div class="form-btn-wrap">
    <button type="submit" class="btn" name="ACMS_POST_MypageUpdate">マイページ情報を更新する</button>
  </div>
</form>

また、MypageUpdate モジュールの仕様として、基本設定には更新可能な項目と不可能な項目が存在します。カスタム設定はユーザーのカスタムフィールドになるので、すべての値が更新可能です。

MypageUpdate モジュールで更新できるユーザー情報(基本設定)



ユーザー情報 フィールド 概要
名前 name ユーザーの名前です。(日本語可)
ユーザーID code ユーザーがログイン時に入力するIDです。半角英数字で設定します。
アイコン画像 icon ユーザーのアイコン画像です。
メールアドレス mail ユーザーのメールアドレスです。
メールマガジン mail_magazine この値が有効だとメールマガジンを送信できます。
メールアドレス (携帯) mail_mobile ユーザーの携帯電話のEメールアドレスです。
メールマガジン(携帯) mail_mobile_magazine この値が有効だとメールマガジンを送信できます。
URL url ユーザーがwebサイトを持っている場合のURLです。
ロケール locale ユーザーのロケールです。
パスワード pass ユーザーのパスワードです。

MypageUpdate モジュールで更新できないユーザー情報(基本設定)



ユーザー情報 フィールド 概要
ステータス status ユーザーのステータスです。
有効期限 login_expire ユーザーの有効期限です。
ログイン端末の制限 user_login_terminal_restriction この値が有効だと許可された端末からしかログイン出来なくなります。
どこでもログイン login_anywhere この値が有効だとユーザーが所属するブログ以下のどのブログでもログインできるようになります。
インデキシング indexing この値が有効だとユーザー一覧に表示されます。
子ブログへの権限 global_auth この値が有効だとユーザーに子ブログへの権限を与えます。

MypageUpdate モジュールでユーザー情報を更新する場合の注意点

MypageUpdate モジュールでユーザー情報を更新する場合、基本設定の項目はフィールドが送信されなかった場合、空として保存されてしまいます。更新が不要な項目は以下のように hidden で設定しておくことで、ユーザー情報が空で保存されてしまうことを防ぐことができます。

<form action="" method="post" class="h-adr js-validator">
  <!-- マイページ更新時に空で保存されないようにする -->
  <input type="hidden" name="code" value="{code}">
  <input type="hidden" name="user[]" value="code">

  <input type="hidden" name="url" value="{url}">
  <input type="hidden" name="user[]" value="url">

  <input type="hidden" name="locale" value="{locale}">
  <input type="hidden" name="user[]" value="locale">
  
  <!-- 更新するフィールドは省略 -->
  <button type="submit" class="btn" name="ACMS_POST_MypageUpdate">
    <!--T-->保存する<!--/T-->
  </button>
</form>

カスタムフィールドのデータの場合、こちらのドキュメントで説明されている内容を実装することで、送信されなかった項目が空になることを回避することができます。

まとめ

マイページ機能を実装することで、閲覧画面上からユーザー自身でユーザーの情報(基本設定・カスタム設定)を変更することができるようになり、ユーザーの引っ越しなどで、お届け先の住所が変更した場合でも、ユーザー側で住所を自由に変更するといったことができるようになります。ECサイトにおいては便利な機能かと思いますので、ぜひご活用ください。

Shopping Cart 拡張アプリの設定

このエントリーでは、Shopping Cart 拡張アプリの設定について以下のことを説明します。

  • 税金について設定する
  • 適格請求書発行事業者について設定する
  • 決済方法について設定する
  • 配送について設定する
  • 追加手数料について設定する

税金について設定する

Shopping Cart 設定 > 基本設定 > 税金設定では、税金についての設定ができます。Shopping Cart 拡張アプリの税金設定では以下の項目の設定ができます。

  • 消費税区分(内税・外税)
  • 税計算方式(積み上げ・割り戻し)
  • 税計算端数処理(切り捨て・四捨五入・切り上げ)

消費税区分の設定は、注文内容の金額や convertToTax 校正オプションの計算などで利用されます。
消費税区分が外税の場合、エントリー(商品)のカスタムフィールド(item_price)で設定した販売価格は、消費税を含んでいないものとして扱われます。消費税区分を外税で使用する場合、商品価格の総額表示が義務付けられておりますので、商品価格を掲載する際は税込価格を表示する必要があることに注意してください。

税計算方式の設定は、注文内容の金額や convertToTotalPrice 校正オプションの計算などで利用されます。
割り戻し計算は商品の税別合計金額から消費税を計算する方式。積み上げ計算は商品毎に消費税を計算し合計する方式(令和5年9月30日以降使用不可)となっております。

税計算端数処理の設定は、注文内容の金額や、convertToIncludingTax 、convertToTotalPrice 、convertToTax 校正オプションの計算などで利用されます。

Shopping Cart 拡張アプリでは、税金設定に合わせて税込価格を計算するための GET モジュールと校正オプションを用意していますのでご活用ください。詳細はリファレンスを参照してください

適格請求書発行事業者について設定する

Shopping Cart 設定 > 基本設定 > 適格請求書発行事業者の設定では、以下の項目の設定ができます。

  • 登録番号
  • 氏名または名称

決済方法ついて設定する

Shopping Cart 設定 > 決済方法設定では、注文画面で表示する決済方法を設定します。

決済方法設定で重要な設定項目は、ブロックと手数料です。

基本的にはブロックは任意の文字列を設定することができますが、クレジットカード決済を設定する場合は creditcard ​という文字列を設定する必要があります。また手数料についても注文内容の金額の計算に使用されるため、正しい数値を設定する必要があります。手数料を空で設定した場合は決済手数料が0円ということになります。

利用条件設定

利用条件によって決済手数料を変動させたいといった場合には、決済方法の利用条件を設定することができます。

例えば、以下のように設定することで、注文の合計金額が0円 ~ 9999円の場合の決済手数料は 330 円、10000円 以上の場合の決済手数料は 440 円 とすることができます。



利用条件設定を有効にすることで、代引き手数料など、金額によって決済手数料が変動するような決済方法を販売者側の損になることなく導入することが可能になります。

配送について設定する

Shopping Cart 設定 > 配送設定では、配送についての設定をすることができます。

送料無料のしきい値(小計)

注文商品の小計金額(消費税を含む)が設定した値を超えている場合、送料を無料にする金額を数値で設定できます。

送料の適用方法

注文時に複数の商品を購入した場合の送料の適用方法を設定できます。

配送グループ

配送グループを設定します。配送グループには名前と全国一律の送料、送料の計算方法を設定できます。全国一律の送料は送料設定で送料が設定されていなかった場合に適用される送料になります。配送グループを追加すると、追加された名前と同名のタブが送料設定に追加され、送料設定で設定できるようになります。

送料設定

送料設定では、配送グループで設定したグループに対して、地域と送料を設定できます。配送地域ごとに送料を変更したい場合に設定する設定項目になります。

追加手数料について設定する

Shopping Cart 設定  > 追加手数料の項目では追加手数料についての設定をすることができます。例えば、ギフト用のラッピング手数料の設定などにお使いいただけます。

まとめ

ここまでで、Shopping Cart 拡張アプリ 設定について学びました。ここまでの内容を理解することができたら、次は商品データ(エントリー)を登録する方法を学ぶと良いでしょう。商品データ(エントリー)を登録する方法についてはこちらのエントリーで解説しています。

Ver.3.1.x インストール方法

こちらでは a-blog cms Ver.3.1.x のインストール方法について紹介します。

1. サーバー環境

PHP 7.3.x - 8.3.x & MySQL 5.x - 8.0 の動作するウェブサーバーをご用意ください。

旧バージョンである Ver. 2.11.x までであれば、PHP 5.3.3 - 7.4.x で動作させることができます。詳しくは 旧バージョンのインストール方法 をご覧ください。

簡単にテストで試してみたいという方については、無料で30日間のお試し可能な a-blog cms インストール済みのレンタルサーバーサービスとして ablogcms.io を提供しておりますので、そちらもご活用ください。



2.ダウンロード & アップロード

ダウンロードページより新規インストールパッケージをダウンロードください。

新規インストールパッケージ ダウンロード

ZIPファイルを解凍すると ablogcms フォルダがありますので、ablogcms フォルダ自身はアップロードぜずに、ablogcms フォルダの中のファイルのみをサーバーの指定場所にアップロードしてください。

ファイル数 7,000ファイル以上で 90MB以上のデータ量を FTP する際には時間がかかりますので、20KBほどの PHPファイル1つをアップロードするだけで、この 2. 3. 4. の工程を自動化する「簡単セットアップ」というプログラムが用意されていますので、こちらの利用もおすすめ致します。



omake フォルダには、build・snippets 等が用意されていますので、必要に応じてご活用ください。

CMSの設置場所について

一般的には、ドキュメントルートに設置することが通常ですが、ディレクトリの中に設置することも可能です。またインストール後に、他のディレクトリに移すことも可能です。その場合、ファイルを移動するだけで問題なく動作します。

3.パーミッションの設定

PHP の動作モードによって設定が異なります。

共用サーバー

共用サーバーをご利用の場合には、一般的には CGIモードで動作していることが多く、この場合にはパーミッションの変更をする必要はありません。もし、インストーラーの画面で「パーミッションの変更が必要」だとメッセージが表示されるようであれば「専用サーバー / VPS など」と同様の設定を行ってください。

専用サーバー / VPS など

専用サーバーや VPS のようなサーバーについては、モジュールモードで PHP が動作していることが多いですので、読み書き可能な権限を設定します。

  • config.server.php
  • archives
  • archives_rev
  • media
  • cache
  • themes

パーミッションの設定については、サーバーのセキュリティに関わることになりますので、分かる方が自己責任で対応ください。

4.ファイル名の変更

アップロードしたファイルの中に htaccess.txt というファイルが、いくつかあります。このファイルを .htaccess というファイル名に変更してください。

  • htaccess.txt
  • archives/htaccess.txt
  • archives_rev/htaccess.txt
  • media/htaccess.txt
  • cache/htaccess.txt
  • private/htaccess.txt
  • themes/htaccess.txt

また、htaccess.txt 以外に、以下の 3つのファイルも同様にドットをファイル名の前につけて、.txt を消してください。

  • editorconfig.txt
  • env.txt
  • gitignore.txt

FTPソフトによっては、ドットで始まるファイルは初期設定では表示させないこともありますので、名前を変更した時点で見えなくなってしまうことがあります。

5.セットアップの開始

Webブラウザから、各ファイルをアップロードした URL にアクセスします。 最初に利用規約のページが表示されますので、ご利用規約をよくお読みのうえ、[同意してインストールを続ける]を押してください。


インストール画面が表示されます。事前準備を確認し必要な作業・情報確認をおこなってください。



セットアップページのメッセージに従って、セットアップを進めます。

5-1. 動作環境のチェック

3 4 の作業が完了しているかのチェックが行われます。



5-2. ドメインの設定

一般的には、インストール環境から自動的にドメインが編集されます。



5-3. データベースの設定

データベースの情報を設定します。以下情報を環境に合わせて設定ください。



項目名 説明 デフォルト値
データベースサーバー名 MySQLサーバーのホストを指定ください。ポートが3306では無い場合「hostname:port」のようにポート番号を指定することができます。
データベース名 MySQLのデータベース名を指定ください。
データベースユーザー名 MySQLのユーザー名を指定ください。
データベースパスワード MySQLのパスワードを指定ください。
テーブル先頭文字列 作成されるテーブルの先頭文字(接頭辞)になります。必要がなければ変更する必要はありません。 acms_
データベース文字コード データベースの文字コードを設定します。必要がなければ変更する必要はありません。(utf8mb4だと絵文字が利用可能になります) utf8mb4
データベース照合順序 データベースの照合順序を設定します。詳しくは以下を参照ください。 utf8mb4_general_ci

照合順序について

照合順序は文字を並び替えや比較・検索するときのルールになります。 大文字と小文字の区別や、文字の並び順を指定します。

例えば「utf8(mb4)_general_ci」は、アルファベットの大文字小文字は区別しませんが他は全て区別します。「utf8(mb4)_unicode_ci」は、大文字小文字/全角半角を区別しないようになります。

これにより、検索などで「utf8(mb4)_unicode_ci」を使用すると、曖昧な検索ができるようになります。

比較表 区別する場合は「×」、区別せず同じ扱いになるのが「○」になります。



照合順序 A、a はは、ぱぱ はは、ハハ びょういん、びよういん ?、? +、+
utf8mb4_unicode_ci
utf8mb4_general_ci × × × ×
utf8mb4_0900_ai_ci ×
utf8mb4_0900_as_ci × ×
utf8mb4_ja_0900_as_cs × × × ×
utf8mb4_ja_0900_as_cs_ks × × × × ×


5-4. テーブルの作成

データベースの接続情報が正しければ、テーブルが作成されます。


5-5. ブログとユーザーの設定

初心者の方は「beginner テーマ」を、多くの機能を試したい方は「siteテーマ」か「UTSUWAテーマ」を選択されることをおすすめします。



6.セットアップの終了

セットアップを最後まで進め、「セットアップ完了」というメッセージが表示されたら、setup ディレクトリの名前を変更する事で全てインストール作業が完了となります。

以下の画面で(移動)ボタンをクリックすれば、自動で setup ディレクトリがリネームされます。



setup ディレクトリーを変更するまで他のページにはアクセスすることができません。 インストールが完了すると setup ディレクトリーはメンテナンス用のログイン画面に役割が変わります。



これで a-blog cms のインストールが完了しました。サイトにアクセスし、表示できることを確認しましょう。

管理ページにアクセスする際には URL の後に /login をつけてアクセスしてください。