【記事要約】
Amazonアカウントでログインした場合、EC CUBEの画面は購入確認画面へ遷移させ、アドレスウィジットと支払いクレジットカード選択ウィジットを表示させる必要がある。
1. event.ymlにフックポイントを記載
2. EventファイルにonRouteShoppingRequestの処理内容を記載
3. EventファイルにonShoppingIndexRenderの処理内容を記載
カート画面の[Amaozonアカウントでお支払]ボタンを押して、Amazonへのログインが完了した場合、EC CUBE3の画面は購入確認画面へ遷移し、さらにアドレスウィジットと支払いクレジットカード選択ウィジットを表示させる必要がある。
そのためには、通常非会員の場合は、会員ログインまたはゲスト購入のボタンが表示された画面へ遷移するが、会員ログイン状態と同じ画面遷移にする必要がある。
※ここに書いてある記事はあくまで概要です。プログラムは自己責任で開発してください。
1. event.ymlにフックポイントを記載
EC CUBE3のおおまかな購入ロジックはsrc>Eccube>Controller>ShoppingController.phpで定義されている。
そのため、プラグイン作成時にはこのプログラムも良く見て置いたほうがよい。
ShoppingController.phpを読み解くと、非会員でも一度注文者情報($Customer)が作られている場合は、一度入力された情報を保持して、購入確認画面へ飛ばしていることが分かる。
そのため、Amazonログインと同時にこの$Customerを擬似的に作成し、購入確認画面へダイレクトに遷移させる。
Amazonアカウントに登録されている個人情報はウィジット表示後でないと取得できないため、ダミーの値等で仮作成しておく。
ShoppingController.php読み込み前にこの仮注文情報を作成するためのフックポイントは下記となる。
1 2 |
eccube.event.route.shopping.request: - [onRouteShoppingRequest, NORMAL] |
function名は命名規則に則り、onRouteShoppingRequestとする。
さらにウィジットを表示させるために、下記フックポイントを追加
1 2 |
Shopping/index.twig: - [onShoppingIndexRender,NORMAL] |
function名は命名規則に則り、onShoppingIndexRenderとする。
2. EventファイルにonRouteShoppingRequestの処理内容を記載
eventファイルにonRouteShoppingRequestの処理を記載するが、その前に、ここでAmazonPayのPHP SDKを使用するため、eventには下記のように事前にAmazonSDKの環境設定を記述しておく。
例:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public function __construct(Application $app) { $this->app = $app; //テスト環境 $this->amazonconfig = array( 'merchant_id' => '*********', 'access_key' => '*********', 'secret_key' => '*********', 'client_id' => '*********', 'region' => 'jp', 'currency_code' => 'JPY', 'sandbox' => true); } |
*********には、独自の情報を入力。ログイン時点(ウィジット表示前)の時点でAPIから取得できるのは、氏名とEmailといった限られた情報のため、それらで仮注文者情報($Customer)を作る。
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 29 |
public function onRouteShoppingRequest(GetResponseEvent $event) { $app = $this->app; $request = $this->app['request']; $amazonconfig = $this->amazonconfig; // Instantiate the client class with the config type $amazonclient = new Client($amazonconfig); // Calling the function getUserInfo with the access token parameter returns object $userInfo = $amazonclient->getUserInfo($access_token); //名前を全角スペースで姓名に変更 $namestr = explode(" ", $userInfo['name']); $amazonDMname01 = $namestr[0]; $amazonDMname02 = $namestr[1]; //顧客情報を設定 $Customer = new Customer(); $Customer ->setName01($amazonDMname01) ->setName02($amazonDMname02) ->setEmail($userInfo['email']); // 非会員用セッションを作成 $nonMember = array(); $nonMember['customer'] = $Customer; $nonMember['pref'] = '1'; $app['session']->set($this->sessionKey, $nonMember); |
上記コード中の$access_tokenは、Cookie中から取得することができた。
各々、取得ロジックを独自に設定してほしい。
都道府県情報がないとエラーになるため、仮に1を設定している。
紹介したコードはあくまで最低限の内容のため、その他必要ロジックを書き足して欲しい。
3. EventファイルにonShoppingIndexRenderの処理内容を記載
onShoppingIndexRenderの処理内容には、Amazonログイン中の場合に、下記内容に表示を差し替える指示を記載する
①お客様情報エリアにアドレスウィジットと支払いクレジットカードウィジットを表示
②お客様情報変更ボタンを非表示
③配送情報変更ボタンを非表示
④配送日時指定のみ表示
⑤お支払い方法選択エリアには、AmazonPayとのみ表示し、他の決済手段を非表示とする
基本的に下記パターンで上記の表示差し替え指示をコーディングする
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
public function onShoppingIndexRender(TemplateEvent $event) { $app = $this->app; $request = $this->app['request']; //ソース・ファイルを取得 $source = $event->getSource(); //AmazonPayログイン中の処理 if(AmazonPayログイン中の場合を判別する条件分){ $search = '差し替え部分の文字列'; $replace = '置き換える文字列'; $source = str_replace($search, $replace, $source); $event->setSource($source); } |
正しくコーディングできれば、Amazonログインと同時に購入確認画面へ遷移し、アドレスウィジットと支払いクレジットカードウィジットが表示される。