CS-CARTアドオンのオリコ決済改造方法

らら
らら

はじめに

CS-CARTバージョンv4.10の現在でもそうなのですが。

オリコ決済で決済完了後、オリコ画面から、ECサイトへ自動転送されません。

また、コンビニ決済時、コンビニお支払い番号がメールで添付されません。

上記の2つの対応方法です。

本項では、アドオンのソースを直接修正する必要があるため、バージョンアップ時に注意が必要です。

上書きされないよう。元のアドオンをコピーしてアドオンIDを変えて運用するのがおすすめです。

CS-CARTに早く正式対応してほしいですね。

変更方法

下記のファイルを変更します。


\app\addons\oricopp_sw\func.php

fn_oppsw_get_params関数の最後の方に追加します。

AUTO_RETURN_WAITING_TIMEは、即時遷移でない場合、時間が指定できます。今回は即時で対応します


	$params['AUTO_RETURN_FLAG'] = 1;			#自動遷移 1:即時 2:AUTO_RETURN_WAITING_TIMEによる
//	$params['AUTO_RETURN_WAITING_TIME'] = 1;	#秒単位
	$params['RESPONSE_TYPE'] = 1;				#結果メッセージ拡張 1:拡張

次に下記のファイルに追加します。


\jp_extras\oricopp_sw\notify.php

場所はコメント 注文データ内の支払関連情報を取得とある上に下記のコードを追加します。

これは既存のソースを触りたくないので、一度こちらで支払関連情報を読み込み、変更、書き込みを行い、既存の支払関連情報を読み込みをさせます。

ここでは、メッセージを、notes変数に入れて対応します。


	// 注文データ内の支払関連情報を取得
	$payment_info = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = ?s", $order_id, 'P');
	// 注文データ内の支払関連情報が存在する場合
	if (!empty($payment_info)) {
		if($payment_method_data['processor'] == "OricoPayment Plus(SimpleWeb)" && $payment_method_data['processor_params']['type']== "02") { #オリコでコンビニの場合
			$payment_info = db_get_field("SELECT data FROM ?:order_data WHERE order_id = ?i AND type = ?s", $order_id, 'P');
			$info['orico_cvs_ReceiptNo']	= $_REQUEST['receiptNo'];
			$info['orico_cvs_haraikomiUrl']	= $_REQUEST['haraikomiUrl'];
			$timelimit_payment = (int)Registry::get('addons.oricopp_sw.timelimit_payment');
			$info['orico_cvs_PayLimit']		= "ご注文日より".$timelimit_payment."日後が期限になります";
			$notes = db_get_field("SELECT notes FROM ?:orders WHERE order_id = ?i", $order_id);
			$update_order['notes'] = (!empty($notes) ? $notes . "\n" : '') . "コンビニ支払い情報"."\n"."お支払い番号:".$info['orico_cvs_ReceiptNo'] ."\n"."お支払い期限:".$info['orico_cvs_PayLimit']."\n"."お支払方法は下記を参考にしてください"."\n".$info['orico_cvs_haraikomiUrl']."\n";
			db_query('UPDATE ?:orders SET ?u WHERE order_id = ?i', $update_order, $order_id);
		}
	}

さいごに

オリコ決済は、ベリトランスと同様のシステムなのでそのまま使用ができます。

その他、アクセス集中した場合の不具合など、対応もありますが今回は記載はしておりません。

オリコ決済の場合。リンクタイプなので在庫管理を行った場合、在庫独り占め、入荷待ちになってしまいますので、CS-CART管理画面、一般設定、注文ステータスである程度回避することができます。

CS-CARTの注文ステータスでは、ステータスによって在庫の減少、増減が割付できます。

Aステータス減少→Bステータス減少→Cステータス減少とあっても在庫は1度しか減少しません。増加も同様です。

CS-CARTのノーマルなステータスは注文受付→支払い確認済み→配送済みです。この流れにもう1つステータスを追加することで制御できることもあります。ただし 決済などのプラグインを修正する必要があります。

変更は下記の感じで


		$force_notification = array();
		$force_notification['C'] = false;
		$force_notification['A'] = false;
		$ret = fn_change_order_status($order_info['order_id'], "A", '', $force_notification);
		$current_status = db_get_field("SELECT status FROM ?:orders WHERE order_id = ?i", $order_info['order_id']);
		if($current_status == 'B') {	#入荷待ちだったらエラーにする
			$ret = false;
		}
		if($ret == false) {
			fn_set_notification('E', __('jp_oppsw_error'), $err_msg);
			$return_url = fn_oppsw_get_error_return_url();
			fn_redirect($return_url, true);
		}

上記では入荷待ちをエラーにする処理がありますが、エラーにしたくない場合は必要ありません。

関連記事