先日の記事でSOY Shopの配送モジュールのカスタマイズ例というものを投稿しましたが、
今回は上記の記事の説明も兼ねた支払い関連の拡張ポイント(soyshop.payment.php)を説明します。
はじめにインターフェースを確認してみる。
/soyshop/webapp/src/logic/plugin/extensions/soyshop.payment.php
class SOYShopPayment implements SOY2PluginAction{ /** * Cartで支払い方法選択後にCartLogicに支払い方法を登録する等の処理を行う */ function onSelect(CartLogic $cart){ } /** * @return string * Cartの支払い方法選択画面等で表示する支払い方法名 */ function getName(){ return ""; } /** * @return string * Cartの支払い方法選択画面で表示する支払い方法の説明文 */ function getDescription(){ return ""; } /** * @return integer * Cart等で支払い方法として選択した時に加算される金額 */ function getPrice(){ return 0; } /** * @return boolen * Cartの支払い方法選択画面で選択項目として表示するか? */ function getMethod(CartLogic $cart, $moduleId){ return true; } /** * @return boolean * クレジットカードのカード番号の入力ページ等の追加ページを持っているか? */ function hasOptionPage(){ return false; } /** * @return string * hasOptionPageがtrueの場合、注文完了後の追加ページの表示内容 */ function getOptionPage(){ return ""; } /** * 追加ページでPOSTを送信した後に読み込まれる */ function onPostOptionPage(){ } function getCart() { return $this->cart; } function setCart($cart) { $this->cart = $cart; } }
次に各メソッドについて見てみる。
PAY.JPクレジットカード支払いモジュール(ID:payment_pay_jp)を例にして各メソッドを見てみると、
SOY ShopでPAY.JP定期課金モジュールを作成しました
カートの支払い方法の選択画面での各メソッドの影響箇所は
このようになる。
次へのボタンをクリックして、次のページへの遷移の途中でonSelectメソッドが実行される。
クレジットカードの入力画面を必要とするプラグインの場合は、
hasOptionPageメソッドでtrueを返すと、
注文終了後にプラグインで新たなページを持つことができるようになります。
hasOptionPageでtrueに指定した場合は、
getOptionPageでフォームのHTML(文字列)を返すと、
このようなフォームの画面を持つことができ、
この画面でPOST送信をすると、onPostOptionPageが読み込まれます。
カートに入れた商品によっては支払い選択画面で当モジュールを項目として追加したくない場合にgetMethodメソッドで制御します。
getMethodの注意点として、各種支払いモジュール(プラグイン)で表示の有無の指定をするのではなく、最後に読み込まれるプラグインでインストールしている支払い系のプラグインの表示の有無の指定をします。
getCartとsetCartはセッター、ゲッターなので、説明するほどの処理はありません。
これを踏まえた上で、
銀行振込支払いモジュール(ID:payment_furikomi)のsoyshop.payment.phpのソースコードを読んでみると良いです。