SOY CMS / SOY Shop

ブログトップ

SOY Shopプラグインの解説 ポイント支払

2014年03月05日

前回まででポイント制設定プラグインの動作を見ていきました。

今回はポイントによる支払を見ていきます。

SOY Shopプラグインの解説 ポイント制2




ポイントによる支払は簡易ポイント支払プラグイン(ID : common_point_payment)を利用して行います。


ポイント制設定プラグインと分けた理由は、

ポイントの付与のルールは大体が購入に対して何パーセントという具合で決まっているが、

ポイントの使用については運営によってバラバラなので、

拡張性を持たせるように付与と支払を分けています。


当然、

会員登録やレビューを書いた時にもポイントを付けたいという要望があるかもしれませんので、

その場合はポイント制設定プラグインと一緒に動かすプラグインを用意すれば良いです。


話は戻りまして、

簡易ポイント支払プラグインの詳細は下記の通りです。



soyshop.info.phpとsoyshop.order.mail.phpは省略します。

SOY Shopプラグインの解説 詳細画面の作成

SOY Shopプラグインの解説 メールの文面に追加


soyshop.point.payment.phpという拡張ポイントを見ると

SOY Shopプラグインの解説 拡張ポイントについて


/soyshop/webapp/src/logic/plugin/extensions/soyshop.point.payment.php

class SOYShopPointPaymentBase implements SOY2PluginAction{
	
	private $cart;

	/**
	 * ポイント支払金額の計算とモジュールの登録
	 */
	function doPost($param){

	}
	
	function clear(){
		
	}
	
	/**
	 * 注文確定時に動作する
	 */
	function order(){
		
	}
	
	/**
	 * エラーチェック
	 * @return Boolean
	 */
	function hasError($param){
		return false;
	}
	
	/*
	 * エラーメッセージ
	 * @return string
	 */
	function getError(){
		return "";
	}

	/*
	 * カートで表示するモジュール名
	 * (空にするとそのモジュールは丸ごと表示されない)
	 */
	function getName(){
		return "";
	}

	/*
	 * カートで表示するフォーム
	 * name="discount_module[***]"
	 */
	function getDescription(){
		return "";
	}

	function getCart() {
		return $this->cart;
	}
	function setCart($cart) {
		$this->cart = $cart;
	}
}

doPost、getNameとgetDescription関数は配送モジュールと同様、

SOY Shopプラグインの解説 配送モジュール



Cart03ページで上記の様に読まれ、

次へをクリックするとdoPostが読まれます。


この時、

<input type="checkbox" name="point_module" value="1" id="point_payment">

nameがpoint_moduleのinputタグを出力するようにします。


hasError関数はdoPostが読み込まれる前に呼ばれる関数で、

ポイント支払いの条件を記載して条件が合わなければここで処理を終わらせます。


hasErrorでエラーを返した後、諸々の処理を行ってCart03ページにリダイレクトしますが、

hasErrorでエラーを返した内容をgetError関数で表示します。


function clear(){
		
	$cart = $this->getCart();
		
	$cart->clearAttribute("point_payment");
	$cart->clearOrderAttribute("point_payment");
	$cart->removeModule("point_payment");
}

clear関数はhasErrorでチェックを行う前に、

ポイント周りの初期化を行うために用意しています。


大事な処理であるdoPostを見ていくと、


function doPost($param, $userId){
		
	$cart = $this->getCart();
		
	if(isset($param) && $param == 1){

		$module = new SOYShop_ItemModule();
		$module->setId("point_payment");
		$module->setName("ポイント支払");
		$module->setType("point_payment_module");
	
		$point = $this->getPoint($userId);
	
		$module->setPrice(0 - $point);//負の値
		
		if($point > 0){
			$cart->addModule($module);
		}else{
			$cart->removeModule("point_payment");
		}

		//属性の登録
		$cart->setAttribute("point_payment", $point);
		$cart->setOrderAttribute("point_payment", "使用するポイント", $point . "ポイント");
	}
}

$moduleに選択内容を放り込んだ後、

$cart->setAttribute("point_payment", $point);

で値引き額をセッションに入れます。


値引きの処理は簡易ポイント支払いプラグインでは持っておらず、

ポイント制設定プラグインの注文確定時の拡張ポイントで行いますので、

CartLogicのセッションでポイント制設定プラグインに値を渡す必要があります。


最後にorder関数ですが、

注文確定前に読み込まれる関数で、

確定の前にしておきたい処理を書きましょう。