相変わらず、普通は「出来ない」と断るような注文を受けておりますが、
出来ると言ってしまった「しわ寄せ」での、追加作業で、

今回は、

GMOペイメントにおいて、サイトA・サイトBで、

同一のSHOPIDで、サイトごとに決済処理する

です。

***

単に、SHOPIDを追加すればよいのですが、
SHOPID毎に、登録費用がかかるので、単一SHOPIDで、

かつ、

30サイトもECCUBEを作ってしまうと、管理が大変!!!

ということで、
1つのコアで、ドメイン毎にテンプレートを切り替えて運用している、
(カンタンに言うと、define.phpや、Config.phpでドメインごとに分岐(後述))
超特殊なECCUBEの環境下での、お話です。

サーバーやディレクトリーが別の場合でも、通知を受けるPHPにて、
対象ドメインの同pg_mulpay_recv.phpにPOSTで通知してやれば、動くはずです。

* 受取るデータ構造のチェック

まずは、どういうデータが渡されるのかを、知る必要があり、
pg_mulpay_recv.phpにて、渡されたデータを確認

ずらーっと、配列データのある中、

まず当たりをつけたのは「Order_ID」

* モジュール「 EC-CUBEペイメント決済モジュール(2.13系)」

ソースを追いましょう。
まずは、
[OrderID] => 361-18114653を生成しているところを、Grepし、特定。

client/SC_Mdl_PG_MULPAY_Client_Base.php

試しに、5行目に、なんか追加してみます。

で、決済してみたところ、

なんか、普通に動いてる!

pg_mulpay_recv.logには、ちゃんと

と、渡されているのに、決済後の処理は、変更前と変わらず、
ちゃんと、PaymentID = 6 「支払い済み」になってる!

***

GMOからの通知後の処理をするpage/LC_Page_Mdl_PG_MULPAY_Recv.phpを調べてみると、

order_idをハイフォンで分解し、先頭のものをOrder_IDとして、返しています。

つまり、このあとに何をつけようが、先頭の2つしか、使われないので、
Order_IDの後に、ハイフォンをつけ、

ドメインが特定出来るように文字を足してやれば良さそうです。

***

* さて、実装です!!

原則、できるだけソースをいじらないをモットーの改造ポリシーですので、
いじるところは、上記のここだけ。

client/SC_Mdl_PG_MULPAY_Client_Base.php

オリジナルに書き加えると、不注意なアップデートで、大番狂わせを食らうので、
ちゃんと、class_exの方に、「sendOrderRequest」をコピーして、使いましょう!

また、文字制限があるようです。
足せる出来るのは、13文字(ハイフォン込)ですが、
実際には一桁目のOrder_IDがまだ3桁なので、一応6桁まで増えるとして、
残り使える文字数は、10文字

こうなると、ドメイン名を直接いれることは、もう無理です。
また、英数・ハイフォン以外は無効な文字として、跳ねられます。

なので、4文字程度の略語か数字で、
ドメイン対応表を基に、割り出すのが良さそうです。

この定義は、config.php で宣言。
変数でやってみたのですが、うまくいかず、
あと、記号が入ってると、決済時にエラーが表示されるので、要注意!
値が宣言されてない場合でも、sitecodeがついてしまいますが、正常に動きます。

***

あとは、受信側「pg_mulpay_recv.php」で、処理先を振分けてやれば良いだけです。

まず、対応表を作成し、受信したOrder_IDの3つ目の値と照合。

あとは、こちらを参考に、コードを足して下さい。

うちの環境では、単にデータベースを切り替えるだけで済むのですが、
細かなところを見直すと、ちょっとおかしな部分があって、
結局、file_get_contetsで、データを投げてることで、偽装しました。

あと、データを投げるときは、order_id の最後の識別文字を削除するように!
でないと、無限ループに陥ります。

うー、今日もマニアックでした・・・

ECCUBE 2.13系 * 同一のSHOPIDでサイト毎に決済する@GMOペイメント