Archive for the 'EC-CUBE' Category

EC-CUBE:本番用決済モジュール

eccubelogo

ここで、EC-CUBEに決済モジュールを組み込むときの手順を書いたんだけど、当然のことながら、テスト環境でのお話。
さて、テストはうまくいったから、さぁ本番というとき、決済会社からは以下のような書類が送られてきます。

  1. README.txt
  2. 本番環境登録情報
  3. モジュール用クライアント証明書(*.pem)
  4. 本番環境接続用モジュールのプロパティファイル(サンプル)

README.txtにはどういうことが書いてあるかというと、「本番用は試験環境と同じだからそれを使ってね」、「プロパティファイルだけは差替えてね」、「本番環境登録情報は各電文の共通ヘッダに設定すべき情報ですよ」、「説明書を見てね」、「わからなかったら問い合わせてね」ということです。
 

  1. まず、プロパティファイルを差替えます。
    試験環境と決済URL等が違うだけなので、試験環境用の決済URLを本番用に書き換えて、クライアント証明書ファイルパス(*.pem)も書き換えておきます。(ファイルももちろんコピーしておきます)
  2. このまま、クレジット決済をやってみるとエラーになります。
    「P002:認証情報が不正です。」というエラーです。なぜでしょうか。本番環境登録情報というやつをどこにも登録していないからですね。
  3. オーナーズストアで決済モジュールの設定を行います。
    kessai

    みんな、この辺のこと、スパッと気づくんでしょうかね。頭いいんですね。

ちゃんと共通ヘッダに情報がセットされたら、P002はでなくなると思います。

EC-CUBE:決済モジュールの組込み

eccubelogo

EC-CUBEに決済モジュールを組み込むときの手順。
あまり公開しているサイトがないので、どうしてかなぁ?と思いつつ、もしかしたら守秘義務うんたらかんたらが関係あるかもしれないので、とりあえず、どこの会社の決済モジュール組込みかは特定しないで手順のみメモ。

  1. EC-CUBE OWNERS STOREの会員になる。そうすると、オーナーズストア認証キーが送られてくる。これが必要。
  2. オーナーズストアの決済サービスから自分が入れたい決済モジュールを選択。ダウンロード無料。
  3. EC-CUBE管理画面の『OWNERS STORE』で認証キー設定をしたうえで、購入商品一覧から自分が購入した決済モジュールを選択してダウンロード。続いて設定したいところだが、インストールが済んでないとダメなので後回し。
  4. ここからは、○○決済モジュールのインストール。cURL関数を使っているから、PHPで使えるようにしておけと。
  5. うちの php5.2.6-3ubuntu4.5 では curlが入っていなかったので、まずこれを入れる。PHPが –with-curl[=DIR] をつけたコンパイルしてあるかどうかは後で確認。
    # apt-get install php5-curl
    # /etc/init.d/apache2 restart
    
  6. これで PHPから cURL関数が使えるようになったかどうか、簡単なテストコードを書いてみる。
    
    

    ちゃんとログファイルにHTMLが書かれたので OKっぽい。(logディレクトリは、www-data:www-data にしておくか、777にしておかないと Permissionエラーになるよ)

  7. ○○決済モジュールで用意された PHP版モジュールをサーバへコピー。
    eccube-2.4.4/data/downloads/module/mdl_○○ の下にPHP版モジュールをごっそりと。オナ―はwww-data:www-data にしておかないとたぶんダメ。
  8. php.ini に include_path を追加する。(どこの php.ini を使用しているかは、phpinfo()のLoaded Configuration Fileを見ること)
    # e /etc/php5/apache2/php.ini
    include_path = ".:/usr/share/php:/usr/share/pear:/home/www/eccube-2.4.4/data/downloads/module/mdl_○○"
    
  9. ○○決済モジュールの接続モジュール用パラメータを設定(modenv_properties.php)

    # cd /home/www/eccube-2.4.4/data/downloads/module/mdl_○○
    # e modenv_properties.php
    
    ○○B2Bmodule.client_file_path=/home/www/eccube-2.4.4/data/downloads/module/mdl_○○/client_mdev_20090123.pem
    ○○B2Bmodule.ca_file_path=/home/www/eccube-2.4.4/data/downloads/module/mdl_○○/curl-ca-bundle.crt
    ○○B2Bmodule.log_output_path=/home/www/eccube-2.4.4/data/downloads/module/mdl_○○/connectmodule.log
    
  10. ここまで終わったら、以下の2ファイルのオナ―を変更しておきます。(○○決済モジュール設定時に、SPSモジュール連携用に新たに書き加えられた部分を削除するようです)
    /home/www/eccube-2.4.4/html/shopping/load_payment_module.php
    /home/www/eccube-2.4.4/html/mobile/shopping/load_payment_module.php
    
  11. EC-CUBE管理画面の『OWNERS STORE』で購入商品一覧から○○決済モジュールの『設定』を選択します。ここまでちゃんとやれれば、エラーなくOKがでるはず。

※ 以上は、トライ&エラーの経過を記録したもので、○○決済モジュールのインストールのアドバイスはできません。エラーがでたときは素直に決済会社のサポートに聞きましょう。

EC-CUBE:新着情報でHTMLタグを有効化

スーパー小っちゃなTipsなので、書くかどうか迷ったのですが、7月はブログ強化月間ですので(今決めました)、この手のことを書かないで何を書くということで書いておきます。
 
EC-CUBEの新着情報に、<a href=”hogehoge.com”>お得な情報</a>みたいなリンクを書こうと思っても、<や>が <、> に変換されてしまってリンクになりません。
危ないことされたら嫌だからというのはわかりますが、コメント欄みたいに誰が書くかわからないならいざ知らず、新着情報って管理画面からしか書けないし、ESCAPEしなくていいんじゃないの?ということです。

# e data/Smarty/templates/default/bloc/news.tpl

<!--{$arrNews[data].news_comment|escape|nl2br}-->
          ↓
<!--{$arrNews[data].news_comment|nl2br}-->

Smartyの escapeをとればいいということですね。
 
ついでにコレも。Smartyで var_dumpみたいなことをやるときはコレ。


EC-CUBEから学ぶ PostgreSQLのリモート接続

なんかの雑誌みたいな見出しですが、EC-CUBEのインストールをしようとして、PostgreSQLのリモート接続ではじかれたので、対処法をメモ。
インストールのDB設定のところでこんなエラーが出たわけです。

DB Error:
[nativecode=pg_connect() [function.pg-connect]:
Unable to connect to PostgreSQL server: could not connect to server:
Connection refused Is the server running on host "192.168.1.xxx" and accepting TCP/IP connections on port 5432?

TCP/IP接続が許可されてねーんじゃないのということです。
EC-CUBEは、ひとつ前のバージョンをインストールしてるんですけど、どーやってインストールしたんですかね?
 
ググるとここ(質問 > その他 > PostgreSQLでUNIXドメインソケット接続での使用は可能か)にそれらしいことが書いてありました。
ここでは、EC-CUBEのインストーラの方にパッチをあててますけど、今回は真っ当に PostgreSQLの方をリモート接続できるようにしてみます。
 
さらにググって、postgresql.conf と pg_hba.conf に設定を書けばいいということがわかったので、こんな風にしてみた。

# e postgresql.conf
listen_addresses = '192.168.1.3'

# e pg_hba.conf
host  all  all  192.168.1.0/24  trust

 
で、PostgreSQLをリスタートしたら、エラーで起動しないでやんの。

 * The PostgreSQL server failed to start. Please check the log output:
2010-07-03 12:39:31 JST LOG:  could not load root certificate file "root.crt": no SSL error reported
2010-07-03 12:39:31 JST DETAIL:  Will not verify client certificates.
2010-07-03 12:39:31 JST LOG:  could not bind IPv4 socket: Cannot assign requested address
2010-07-03 12:39:31 JST HINT:  Is another postmaster already running on port 5432? If not, wait a few seconds and retry.
2010-07-03 12:39:31 JST WARNING:  could not create listen socket for "192.168.1.3"
2010-07-03 12:39:31 JST FATAL:  could not create any TCP/IP sockets

 
結局、listen_addresses = ‘*’ じゃないといけなかったみたい。なにが問題なんだろうか。動くようになったからいいけど。

# e postgresql.conf
listen_addresses = '*'

EC-CUBE:エラー対応(タイムアウト)

さっきの記事でもちょこっと書いたんですが、「月度で集計する」をやったら、30秒タイムアウトにひっかかった件が未解決でした。これもほっておけないので、対処しておきます。
エラーメッセージはこんな感じ。

/*
*/
Fatal error: Maximum execution time of 30 seconds exceeded

 
対応は次の3つらしいです。

  1. php.ini
    max_execution_time = 90
  2. httpd.conf or .htaccess
    php_value max_execution_time 90
  3. PHPファイル
    set_time_limit(90);

 
今回は限定的な対応なので、3のPHPソースの先頭に set_time_limit() を入れる方法で対処しました。
しかし、TOPで見ると売上集計が動き出すと、CPUがあっという間に 100%近くに張り付いて気持ち悪いこと。nice とかかませる方法はないのかしらん。(売上集計ごときはもう少し遠慮して動いてほしいものです)

EC-CUBE:エラー対応

お仕事で EC-CUBEのカスタマイズをやっていて(いろんなことをやってますよね)、いままで触ったこともなかった「売上集計」を動かしてみたらエラーが出たので、その対応について少しメモ。(きっと誰かの役に立つと思うので)

/*
*/
Warning: imagettftext() [function.imagettftext]: No character set found in /hoge/data/class/graph/SC_GraphBase.php on line 298

最初、「月度で集計する」をやったら、30秒タイムアウトにひっかかって、「期間で集計する」をやってみたら出たエラーがこれです。
 
ググってみてみたら『PHP がバンドル版の GD で構築されていないからではないか?』などというひやっとするようなことが書いてあって(PHPを使っているのは EC-CUBEだけじゃないので、いまさら CONFIGを変えてコンパイルし直すなんてこと、怖くてできない!)、そんなぁと思いつつ、ほかも調べてたら、GDがバンドル版じゃなかったら、そもそも Warningじゃなくて Fatal errorになるんじゃないかと。

/*
*/
Fatal error: Call to undefined function: imagettftext() in ...

 
で、エラーメッセージに立ち戻ってみると、No character set found とあるので、キャラクターセットがないと言ってるんだなと。
どうやら、EC-CUBEに標準で付いてくる wlmaru20044.ttf というやつがマズイようなので、IPAのページから最新の「IPAexフォント」をダウンロードして、wlmaru20044.ttfのあるフォント・ディレクトリ(/hoge/data/fonts/)に突っ込んでやります。

そして、エラーの出てるファイル(SC_GraphBase.php)のデファインを IPAexフォントに変えて、わざわざ EUC-JPにしてるところをコメントアウトして、元のUTF-8をいかせばOKです。

/*
*/
/* /hoge/data/class/graph/SC_GraphBase.php */

/* TTFフォントファイル */
//define("FONT_PATH", DATA_PATH . "fonts/wlmaru20044.ttf");
define("FONT_PATH", DATA_PATH . "fonts/ipaexg.ttf");

         /*     http://www.php.net/imagettftext を見ると, UTF-8 にしろと
         *     書いてあるのに...
         *
         */
//        $text = mb_convert_encoding($text, "EUC-JP", CHAR_CODE);
        $text = mb_convert_encoding($text, CHAR_CODE);
        if($color != NULL) {
            ImageTTFText($this-&gt;image, $font_size, $angle, $left, $top + $font_size, $color, FONT_PATH, $text);
        } else {
            ImageTTFText($this-&gt;image, $font_size, $angle, $left, $top + $font_size, $this-&gt;text_color, FONT_PATH, $text);
        }

EUC-JPをそのままにしておくと、日本語が化け化けになります。
しかし、なんで EC-CUBEは wlmaru20044.ttf なんかを同梱してるんだろうか?
ライセンスの関係で IPAフォントがバンドルできないのかな?(ライセンスをざっと読んだ限りではそんな制限に引っ掛かるように思えないんだけど)