経緯
EC-CUBE4系にてペイジェントの導入案件の対応。
案件途中で公式からプラグインが出たので、プラグインを使ってみました。
ペイジェント決済プラグイン(4.0系) プラグインリンク
#手順
管理画面 > オーナーズストア > プラグイン一覧 から他のプラグイン同様、インストールしてください。
一覧画面から有効化後、一覧画面から設定に移動し、契約時に取得した情報を設定します。
(設定しないと使えない)
#導入後
ペイジェントのプラグインでは、リンク型に対応します。
通常のEC-CUBEにおけるショッピングフローの確認画面にて、「完了ボタン」が「次へ」ボタンに変更され、
次へボタンを押すとペイジェントのサイトに飛びます。
決済後、サイトトップページに遷移します。
#注意点
##完了画面はshopping/completeにしたい
デフォルトでは決済後、サイトトップページに遷移しますが、プラグイン内のコードを修正することで遷移先を変更できます。
function setParameter($order, $config, $paymentMethod){
......
// 戻りURL・中断時URL
$params['return_url'] = $sUrl . "shopping/complete";
$params['stop_return_url'] = $sUrl;
......
}
return_urlが処理完了後に遷移させるurlを設定させることができるパラメータです。
stop_return_urlは、処理を中断するときに遷移させるurlを設定させることができるパラメータです。
本来であればstop_return_urlは遷移元であるshopping/confirmに飛ばすのが理想的ですが、
処理の関係上それだけではうまくいかないので結構な書き直しが必要かもしれません。
カートがクリアされてしまうので、カートまで戻すのも少し微妙です。
逆にreturn_urlは上記のように書き直しますが、そのままではエラーになります。
原因は、デフォルトの管理画面ではshopping/completeの画面でセッションからorder_idを取得して、注文情報を復帰させているところです。
ペイジェントのプラグインではプラグイン側で処理を完了し、セッションをクリアするところまでしてしまうので、
ShoppingControllerのcompleteメソッド内の記述をクリアし、静的ページを表示するだけのようにしてしまい、
twig側でもorder.idを表示しないようにすることで、完了画面を表示することができます。
#決済フロー以外でクレジットカード決済を行いたいとき
決済フロー以外でクレジットカード決済を行うときには、
- 処理タイミングでカード情報を入力してもらい、トークンを作成。トークンを利用して決済を行う
- 事前にカード情報を入力してもらって、トークンを作成。トークンを利用してカード情報を登録しておく。
→ 任意のタイミングでカード情報に対して金額を設定して決済を行う。
の2パターンが大きくあります。
(トークンを利用しないパターンは利用不可です。)
##トークンの取得方法
トークンの取得方法は割愛します。
契約後に確認できるドキュメントを参照して、トークンをController側にPOSTするようにしてください。
##トークンを利用して処理を行うためのあれこれ
一番簡単に実装を行うには、プラグインにてインストールされたプログラムを基底クラスにしてあげるのがいいかと思います。
それをServiceにまとめてペイジェントのプラグイン以下を使った処理として書き、機能単位でControllerから呼び出すのがいいかなと思います。
以下にペイジェント側に入力されたカード情報を保管するための処理の実装イメージで抜粋します。(システム内の情報が出ない程度に)
/**
* とりあえず呼び出し元を適当に
* @param $Customer : Customerエンティティ
* @param $token : フロントで作ったトークン
*/
private function process(Customer $Customer, $token){
......
$this->paygentCustomizeService->registCard($Customer, $token);
......
}
// ペイジェントプラグインでインストールされたもののうち、Baseクラスを継承しとけばいろいろ楽
use Plugin\PaygentPayment\Service\PaygentBaseService;
class PaygentCustomizeService extends PaygentBaseService {
// サービス側も色々省略
......
/**
* クレカ登録
* @param $Customer : Customerエンティティ
* @param $token : フロントで作ったトークン
*/
public function registCard(Customer $Customer, $token){
// Baseクラスのメソッド.共通処理でPOSTする電文が作れる
// POSTする値は要確認
$params = $this->commonNormalMakeParam("XXX");
// その他のパラメータ(トークンやcustomer.idなど)はここで設定
// Baseクラスのメソッド.
// 実行処理と応答電文の解析をしてくれる
$arrRes = $this->callApi($params);
// 以下は$arrResを確認してみよう
}
......
}
#最後に
API用のプログラムは別途ライブラリみたいな形で渡されますが、
せっかくプラグインで同じようなプログラムをダウンロードしているので、
こちらのほうが無駄なプログラムがなくていいかな、なんて思います。
#あとがき
ペイジェントプラグインなんですが、2020/04/20現在はVer.1.0.1です。
この時点で把握してるのが、登録したクレカ情報を引っ張り出す処理をするときにエラーが起こります。
処理の修正をすれば動きますが、このあたりは正直きれいではないので掲載は見送ります。
お問い合わせいただければ、ご回答させていただきます。