ECCUBE 2.17 & ベリトランス決済モジュール(DGFT)

前シーズン、クライアントから、
ECCUBEにて「PAYPAY決済が使えないか?」との要望を受けたが、
決済モジュールをあーだーこうだするのが、嫌だったので、
「個別開発になるので、開発費かかるんで・・・」
と逃げていたのだけど、
2022年4月、DGFT(デジタルガレージ・ファイナンシャル・テクノロジー)より、
2系統用のPAYPAY決済モジュールが用意されており、
問い合わせたところ、結構な大事になり、
思ってもみない特単を頂ける運びとなった。

 

そして、9月よりDGFTに切り替えての準備を、この間際に行っている。
「事前にテストしとけよ!」は、その通りなんだけど、
決済までのシステムの統合を図っていたので、
どうせ決済だけなら、と、高をくくっていたが、
ちょっと、まあ間に合いそうなんだけど、すったもんだした記録↓

***

ダミーモード

テスト決済用で、本物のカード情報をいれるも、
「NH02000000000000/取引が無効です」
と、表示される。

8/26~使えるとのことだったので、
結果、テクニカルサポートに問い合わせ、専用の番号でないと、通らないと教わる。
どっか?書いてましたっけ?(汗

 

入金済みのステータス更新

モジュールの設定「お客様の入金通知URL」
(https://xxxx.net/sbivt3g/res.php)を、MAPの本人認証

https://www.ec-cube.net/upload/manual_file/04141415_6257add4793c7.pdf
【P17】

に登録し、コールバックを受け取り、受注状況を更新します。(成功・失敗etc)

 

クレジットカード決済の場合、
「ダウンロード販売時のステータス更新機能」にチェックを入れると、
Status:入金済みにしてくれるようですが、
PAYPAYなど、他の決済では、新規受注(ORDER_NEW)のままで、
都度、人海戦術でチェックして、変更する必要があるようです。

 

魔改造するしか、ありません・・・

 

ということで、ソース解析をしたところ、

res.phpで受け取って、
LC_Page_SBIVT3G_Receive.phpで、成功・失敗の判別処理しており、
こっちをさわると、アップデート時に泥沼になりそうなので、
res.phpのLC_Page_SBIVT3G_Receiveの処理の前後に、追加処理を追加します。

キャンセルや値段変更があった場合にも、
このres.phpがコールバックされるので、
LC_Page_SBIVT3G_Receive読み出し前に、

該当データが、ORDER_PENDINGであることを、控えます。

foreach($_REQUEST as $key => $val) {
	if (preg_match('/\[orderId\d+\]/', $key) {
		$order_id	= $val;

		$objQuery		=& SC_Query_Ex::getSingletonInstance();
		$arrOldOrder	= $objQuery->select('status, deliv_id', 'dtb_order', 'del_flg = 0 and order_id	= ?', [$order_id]);
	}
	break;
}

で、処理に問題なかった場合、
どの決済でも、ORDER_NEWとなるので、

ORDER_PENDING >> ORDER_NEW

の変化を条件に、最終処理を追加します。

if ($arrOldOrder[0]['status'] == ORDER_PENDING) {
	$arrOrder	= $objQuery->select('status, deliv_id', 'dtb_order', 'del_flg = 0 and order_id	= ?', [$order_id]);	
	if ($arrOrder[0]['status']	== ORDER_NEW) {
		if (in_array([2, 5, 12], $arrOrder[0]['deliv_id'])) {
			$Order['status']	= ORDER_DELIV; // 発送済み

			// QRコード送信
			send_shippingmail_qr($order_id);
			break;
		default
			$Order['status']	= ORDER_PRE_END; // 入金済み
		}

		// update
		$objQuery->update('dtb_order', $Order, 'order_id = ?', $order_id);
	}
}

配達方法(deliv_id)ごとに、取り扱う商品が異なる=システム分岐しているので、
2,5,12の場合だけ、QRコードを送信し、

statusを更新している。

 

なんで、入金済みを自動にしないのだろうね?
よくわからない。

 

ECCUBE 2.17 & ベリトランス決済モジュール(DGFT)