ECCUBEにCloud Paymentの決済モジュールをインストールする

EC CUBE v.2.13.3に
cloud payment (旧 j-payment)の決済モジュールをインストールしました

モジュールを手に入れる

v.2.12の頃はEC CUBE オーナーズストアでモジュールがダウンロードできたのですが、いまは消されてます

cloud paymentに問い合わせたところ
なぜかアドレス教えてくれず、管理画面からのリンクを教えられる
(ログイン必要)

リンク貼ってもいいのかわからないので、リンクは貼らないでおきます
Cloud Payment管理画面からのリンクで、ファイルがてにはいりました

  • index.php
  • mdl_jpayment (ver2.13系).zip
  • EC-CUBEインストール・初期設定マニュアル.pdf

マニュアルは EC CUBE v.2.12用でした

zipを解凍してみる

$ unzip mdl_jpayment.zip

index.php
mdl_jpayment ディレクトリ

が解凍されます
index.phpは最初のダウンロードしたのと同じでした
(同じもの入れないでほしい..)

インストール

サーバーにログイン、適当なディレクトリを作り、そこをオーナーズストアとして認識させる
ECCUBEの公開ディレクトリに cloudpayment をつくりました
直下を公開ディレクトリにしてるので、

$ mkdir cloudpayment
(ふつうだとhtml/cloudpaymentでしょうか)

ここに解凍してできた index.php を入れます

$ mv (ダウンロードディレクトリ)/index.php cloudpayment

管理画面で設定を変える

OSTORE_URL
OSTORE_SSLURL

“http://www.ec-cube.net/”
“https://www.ec-cube.net/”
から
“cloudpayment/”

に変更、なんですがvagrantだったので

“http://localhost/cloudpayment/”

に変更

参照 vagrant上のECCUBEでオーナーズストアを自身にするとエラーが発生する

管理画面>オーナーズストア>モジュール管理、へアクセス
モジュール一覧の取得

あとは、店舗IDなどをいれて保存

OSTORE_URLなどは元に戻しておきます

Cakephpのテスト時にSessionの値が取れない

Cakephp 2.5.3でコントローラーのテストのとき

$this->testAction('/Sample/save', ['return' => 'vars']);
$flash = CakeSession::read('Message.flash');
$this->assertEquals('保存しました', $flash);

とすると CakeSession::read(‘Message.flash’) がとれませんでした

$this->testAction('/Sample/save');
$flash = CakeSession::read('Message.flash');
$this->assertEquals('保存しました', $flash);

として flash をとってやって

$this->vars
でパラメータは取ればとりあえず解決

詳しく理解しないとですが、ここまでで

CakephpのbeforeFilterでComponentを使うときのエラー

CakephpのbeforeFilterでComponentを使っているとなんやらメソッドがないとかエラーが

Fatal error: Call to a member function save() on a non-object ...

えー、普通に使ってるのに..と思ったら、beforeFilterでは、Componentのstartupがまだ呼ばれてないっぽい(使える準備ができてない)
仕方ないので、メインのメソッドに書きました

Cakephpで1つのフィールドだけバリデーションをかける

Cakephpでモデルのバリデーションをかけるには

$this->ModelName->set($data);
if (! $this->ModelName->validates()) {
    // バリデーションエラー
    $errors = $this->ModelName->validationErrors;
}

な感じでかけられますが、全項目はなくて一つの項目(フィールド)だけバリデーションを書けるには

$this->ModelName->set($data);
if (! $this->ModelName->validates(array('fieldList' => array('myField')))) {
    // バリデーションエラー
    $errors = $this->ModelName->validationErrors;
}

で、fieldListを使えばできます