【記事要約】
AmazonPay導入のためのEC CUBE3系のプラグイン作成の第一段階。カート画面に[Amazonアカウントでお支払]ボタンを表示するプラグイン要素を作成する。
で、 「2.AmazonPayプラグインの全体的な動き」に書いたように、Amazonプラグインは大きく3つの要素に分割できる。
そのまず最初のカート画面部分について説明する。
以下、プラグインはステップその4で紹介したEC CUBEのプラグイン開発ドキュメントの内容に基いて、EC CUBE3のapp>Pluginフォルダの中に、プラグインの初期ファイル一式が自動生成された状態であることを条件とする。
1. event.ymlにフックポイントを記載
カート画面にお支払ボタンを表示させるためのフックポイントは、直接Cart/index.twigとした。
そのため、event.ymlに、下記のコードを記載する。
1 2 |
Cart/index.twig: - [onCartIndexRender, NORMAL] |
2. Eventファイルに処理内容を記載
EC CUBEのプラグイン開発ドキュメントの内容に基いて、EC CUBE3のapp>Pluginフォルダの中に、プラグインの初期ファイルが自動生成された場合、指定した名前の***event.phpというファイルが生成される。
(僕は、AmazonPayEvent.phpという名前にした。)
このイベントファイルにフックポイントで指定し「onCartIndexRender」の動作の内容を記載する。
例:
1 2 3 4 5 6 7 8 9 |
public function onCartIndexRender(TemplateEvent $event) { //AmazonPayお支払い関連ブロックを表示 $insert = $this->app->renderView('AmazonPay/Resource/template/amazonpaybutton.twig'); $search = '</form>'; $replace = $search . $insert; $source = str_replace($search, $replace, $event->getSource()); $event->setSource($source); } |
上記のコードの場合、元ファイル(Cart/index.twig)中の</form>を探し出し、amazonpaybutton.twigの内容を追加して出力するというものだ。
よって、次にamazonpaybutton.twigを作成する。
3. Twigファイルを作成する
twigファイルは、プラグインフォルダ内のResource>templateの中に作成する。
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
<script type='text/javascript'> window.onAmazonLoginReady = function() { amazon.Login.setClientId('***クライアントIDを記載***'); }; </script> <!-- テスト環境JS --> <script type="text/javascript" src="https://static-fe.payments-amazon.com/OffAmazonPayments/jp/sandbox/lpa/js/Widgets.js"></script> <!-- amazonでお支払いボタン --> <div id="AmazonPayButton"></div> <!-- amazonでお支払いボタンJS --> <script type='text/javascript'> var authRequest; OffAmazonPayments.Button("AmazonPayButton", "***出品者IDを記載***", { type: "PwA", color: "Gold", size: "medium", authorization: function() { loginOptions = {scope: "profile payments:widget payments:shipping_address", popup: true}; authRequest = amazon.Login.authorize (loginOptions, "{{ path('cart_buystep') }}"); }, onError: function(error) { // your error handling code. // alert("The following error occurred: " // + error.getErrorCode() // + ' - ' + error.getErrorMessage()); } }); </script> |
作成したファイルをサーバにアップし、カート画面アクセス時にAmazonアカウントでお支払ボタンが表示されればOK。