先日の記事で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定期課金モジュールを作成しました


カートの支払い方法の選択画面での各メソッドの影響箇所は


soyshop_payment


このようになる。

次へのボタンをクリックして、次のページへの遷移の途中でonSelectメソッドが実行される。


クレジットカードの入力画面を必要とするプラグインの場合は、

hasOptionPageメソッドでtrueを返すと、

注文終了後にプラグインで新たなページを持つことができるようになります。


hasOptionPageでtrueに指定した場合は、

getOptionPageでフォームのHTML(文字列)を返すと、


soyshop_payment1


このようなフォームの画面を持つことができ、

この画面でPOST送信をすると、onPostOptionPageが読み込まれます。


カートに入れた商品によっては支払い選択画面で当モジュールを項目として追加したくない場合にgetMethodメソッドで制御します。

getMethodの注意点として、各種支払いモジュール(プラグイン)で表示の有無の指定をするのではなく、最後に読み込まれるプラグインでインストールしている支払い系のプラグインの表示の有無の指定をします。


getCartとsetCartはセッター、ゲッターなので、説明するほどの処理はありません。


これを踏まえた上で、

銀行振込支払いモジュール(ID:payment_furikomi)のsoyshop.payment.phpのソースコードを読んでみると良いです。