ECCUBEの受注管理からのメールが送れない

ECCUBE 2.12.6を使っていてい
受注管理>受注管理
受注を検索して、個別通知
eccube-order

メールのテンプレートを選択して、確認画面へ、送信とすると
なぜか未入力のエラーが..
eccube-order2

ECCUBEのエラーログをみても、サーバーのエラーログをみても何もない..
メールは送られてない様子..

ソースコードを読み込んでやっとわかりました

差分はこちらです

data/Smarty/templates/admin/order/mail_confirm.tpl

[code lang=php:php]
// before
<!–{foreach key=key item=item from=$arrForm}–>
<input type="hidden" name="<!–{$key}–>" value="<!–{$item.value|h}–>" />

// after
<!–{foreach key=key item=item from=$arrHidden}–>
<input type="hidden" name="<!–{$key}–>" value="<!–{$item|h}–>" />
[/code]

hiddenへ渡す変数名が変わってる..バージョアップ時に適用もれてたみたいです
ピンポイント過ぎますがだれかの参考になるでしょうか..

ECCUBEのバージョンアップはなんとかならないでしょうか

ECCUBEで管理者画面にログインするときにシステムエラー

ECCUBEのカスタマイズをすることになったので、ローカルに環境を移行しました
管理者画面にログインするときにシステムエラーが発生

eccube-error

エラーログを確認
$ vim data/logs/error.log
2014/11/23 17:42:24 [/admin/index.php] Fatal error(E_USER_ERROR): on [/vagrant/data/class/SC_Response.php(182)] from 10.0.2.2
login_id = sample(0)[dafdfijewfijapif34fa5]
/vagrant/admin/index.php(33): LC_Page_Admin_Index_Ex->process
/vagrant/data/class_extends/page_extends/admin/LC_Page_Admin_Index_Ex.php(56): LC_Page_Admin_Index->process
/vagrant/data/class/pages/admin/LC_Page_Admin_Index.php(56): LC_Page_Admin_Index->action
/vagrant/data/class/pages/admin/LC_Page_Admin_Index.php(88): SC_Response->sendRedirect
/vagrant/data/class/SC_Response.php(182): trigger_error

いまいち何が悪いかわからない

結局
$ data/config/config.php
のHTTP_URL、HTTPS_URLのアドレスが間違えてました
(vagrantだったのでhttp://localhost:8000/でした..)

heteml上のEC-CUBEにJ-Paymentのクレジット決済を追加する

EC-CUBEにクレジット決済を追加してみました
いろいろありますが、今回はJ-Paymentを使いました

J-Paymentの導入方法はいくつかあります
EC-CUBEなのでEC-CUBEモジュールを使いました

ちなみに他には
HTMLリンク方式
HTMLにリンクを埋め込むだけ
リンクをクリックするとJ-Paymentが用意しているページへ飛んでクレジット情報を入力する流れです

Gateway方式
クレジット情報をいれるフォームを自作、自由なデザインでできる

があります

J-Paymentに申し込む

まずはJ-Paymentの審査を通らないと行けないので申し込みます
10日以上かかるみたいです
申し込みの流れ http://www.j-payment.co.jp/service/payment/flow.html
審査が通れば、J-Paymentの店舗IDが付与されアカウントがもらえます

hetemlでSSLを購入

サーバーにSSLを導入します
手頃な証明書を買ってきて..と思いましたがhetemlでは他社の証明書は利用できません
hetemlで申し込みました
http://heteml.jp/support/manual/d-ssl/
DNSへ反映されるのに最大72時間だそうです
2日くらい待つと、httpsでもアクセスできるようになってました

EC-CUBEのSSLのアドレスを変更

SSLアドレスをhttpsにしてなければ設定します
hetemlにSSHでログイン、phpファイルを修正します
SSHのログインは、hetemlの管理者ページでSSHアカウントを作成して行います

$ vi web/data/config/config.php
define(‘HTTPS_URL’, ‘https://sample.co.jp/eccube/’);
というふうに、アドレスをhttpsにします

J-Paymentの設定

アカウントがもらえるとJ-Paymentのコントロールパネルへアクセスできるようになります
設定>決済システムの設定、決済ゲートウェイ&CTI決済設定、決済データ送信元IPにhetemlのサーバーのIPアドレスを設定します
このページのシステムモードがテストモードであれば、決済は発生しません

hetemlのサーバーのIPアドレスは、hetemlの管理ページ、アカウント情報に記載されています

EC-CUBEのJ-Paymentモジュールを購入

EC-CUBEオーナーズストアより導入するサイトに紐づいたアカウントでEC-CUBEバージョンにあったものを購入します
でしたが、今はEC-CUBEオーナーズストアになくなり、J-Payment側から直接もらうようになったようです(なぜでしょう?)

EC-CUBEをメンテナンス状態にする

クレジット機能導入時に不備が起きたりするとまずいので、自分以外は操作できないようにします
WEBサーバーで.htaccessを使って、制限しようと思いましたがhetemlでできなかったのでhetemlのアクセス制限を利用しました
Basic認証をかけるようですが、なんだか日本語が文字化けするので英語で設定しました

EC-CUBEのプラグイン導入

EC-CUBEの管理者ページへログイン
オーナーズストア>モジュール管理
モジュール取得、をクリック、J-Payment決済モジュールをダウンロードします
インストールできたら、設定リンクをクリック
J-Paymentから付与された店舗IDを入力、使うものにチェックを入れていきます
eccube-module

EC-CUBEの設定変更

支払方法設定

基本情報設定>支払方法設定、でクレジットカード決済の表示名など設定します
eccube-payment-config-detail

配送方法設定

基本情報設定>配送方法設定、で取扱い商品種別のクレジットカード決済にチェックをつけます
eccube-delivery-configeccube-delivery-config2

決済のテスト

EC-CUBEでダミー商品とダミー商品を購入するためのテストアカウントを用意して、購入してみます
使うカード情報はJ-Paymentに聞いたダミーのカード番号で行います
(なんでもいいのかも)

うまくいけば、ダミー商品は非公開か削除かします

本番運用開始

J-Paymentへ本番運用する連絡をいれ、設定変更してもらってコントロールパネルへアクセス、設定>決済システムの設定、システムモードをテストモード→本番モードにします
hetemlのアクセス制限を削除します

これでクレジットカード決済が導入されました

途中時間がかかるときは、いったんEC-CUBEの配送設定からクレジットカード決済を外して、アクセス制限を外し、運用するといいと思います



EC-CUBEの管理者パスワードを忘れた時

ひさしぶりにEC-CUBEをさわろうと
http://(EC-CUBEサーバーアドレス)/admin
にアクセス、ユーザー、パスワードを忘れた時
PHPをいじって、無条件に入れるようにしました
※本番環境では危険です

手元にあった、EC-CUBE 2.12.3でためしました

data/class/pages/admin/LC_Page_Admin_Index.php 85行目
if (SC_Utils_Ex::isBlank($this->arrErr))

if (! SC_Utils_Ex::isBlank($this->arrErr))
としたら、なんでもログインできるようになります


function action() {
    // パラメーター管理クラス
    $objFormParam = new SC_FormParam_Ex();

    switch ($this->getMode()) {
        case 'login':
            //ログイン処理
            $this->lfInitParam($objFormParam);
            $objFormParam->setParam($_POST);
            $this->arrErr = $this->lfCheckError($objFormParam);
            if (! SC_Utils_Ex::isBlank($this->arrErr)) { // ここを反転した
                $this->lfDoLogin($objFormParam->getValue('login_id'));

                SC_Response_Ex::sendRedirect(ADMIN_HOME_URLPATH);
            } else {
                // ブルートフォースアタック対策
                // ログイン失敗時に遅延させる
                sleep(LOGIN_RETRY_INTERVAL);

                SC_Utils_Ex::sfDispError(LOGIN_ERROR);
            }   
            break;
        default:
            break;
    }   
}

ログインできたら、パスワードを変更してPHPを元に戻したらいいですね