とまと あんらいぷ…

エンジニアの活動記録とかつぶやきとか

GitHub
スポンサードリンク

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

スポンサードリンク

EC-CUBE PayPal決済の設定方法まとめ

PayPal(ペイパル)のIPN(即時支払い通知)がステータス503で届かない~


EC-CUBEでPayPal決済を利用することになったのだけれど
PayPalからIPNが届かず、PayPal側にログインしてみるとレスポンスコード503で停滞。
EC-CUBE側でpaypal_recv.phpの吐き出しているであろうPayPal.logを確認しても
まったく通った形跡もない。

この影響で
PayPalの決済が完了したにも関わらず、オーダーのdel_flgが「1」のままで
ステータスが「決済処理中」のまま、管理画面に注文情報が挙がってこないという状態に陥ります。
ドハマりしたので、解決するまでの道のりを残しておきます。

当エントリは、EC-CUBEで
「ペイパル ウェブペイメント プラス 決済モジュール(2.11系・2.12系・2.13系)」
を使っての記事ですが根本原因としては他のプロダクトでも当てはまるかもしれません。

今回利用するPayPal決済のサービスは
「ペイパル-ウェブペイメントスタンダード」です。

「ウェブペイメントプラス」との違いがわかり辛いのですが

このモジュール一つで、
「ペイパル-ウェブペイメントスタンダード」および「ウェブペイメントプラス」の両方に対応しています。

両者の違いはまた別の機会に・・・
スタンダードは月額費用3,000がかからない代わりに、
継続課金やiframeに対応しておらず、サイトに決済ボタンを設置するか
決済の為に一旦PayPalサイトに遷移する必要が出てくると理解しています。
「ウェブペイメントスタンダード」は月額費無料ですが、ビジネスアカウントが必要です。

EC-CUBEでペイパル ウェブペイメント プラス 決済モジュール(2.11系・2.12系・2.13系)をインストール


まず、最初にEC-CUBEのオーナーズストアより
http://www.ec-cube.net/products/detail.php?product_id=179
「ペイパル ウェブペイメント プラス 決済モジュール(2.11系・2.12系・2.13系) 」
のインストールを行いました。

20140426_eccube_paypal_01.png

設定リンクを押すと、PayPalアカウントの設定を行う画面がでてくるので
契約内容に従って

  • アカウント種別

  • メールアドレス

  • 支払情報

  • サンドボックスの使用

  • 決済サイトURL

  • 決済完了URL

  • 支払いキャンセルURL

を設定します。

アカウント種別は、「ウェブペイメントプラス」に申し込んでいないため
「ウェブペイメントスタンダード」を利用することになるので「通常」を選択します。
「決済サイトURL」「決済完了URL」「支払いキャンセルURL」は
特に複雑なカスタマイズをしていなければデフォルトのままでよいです。

20140426_eccube_paypal_02.png

この設定を行ったあと、

基本情報管理>支払方法設定の設定を行います。
20140426_eccube_paypal_03.png

これだけの設定で
何となくWEBサイトに支払い方法「PayPal決済」が表示され
決済のタイミングでPayPalに遷移されるようになります。

PayPal画面に遷移するところはこんなイメージです。
20140426_eccube_paypal_04.png

PayPalへ遷移中・・・
20140426_eccube_paypal_05.png

PayPal画面へ遷移後(画面のデータはダミーです)
20140426_eccube_paypal_06.png

決済完了後、決済完了画面(complete.php)に戻らない


ここまで設定すると、PayPal画面に遷移することはでき、
キャンセル画面に戻ってくることはできるのですが、

正常に決済を行ったあと、「決済完了画面」に戻ってくることができません。
決済完了後に、EC-CUBE側に遷移するにはPayPal側の設定が必要です。

PayPalのビジネスアカウントでログインします。
個人設定より、販売ツール>ウェブサイトの設定より


  • ウェブ ペイメントの自動復帰を「オン」

  • 復帰URLにECサイト側の「決済完了URL」

を入れます。

20140426_eccube_paypal_07.png

その他の設定については、以下の通り設定しました。

  • 支払いデータ転送(オプション):「オン」

  • 暗号化されたウェブ ペイメント:「オフ」

  • PayPalアカウントオプションサービス:「オフ」

  • 連絡先電話番号:「オフ(推奨)」

  • エクスプレス チェックアウトの設定:「いいえ」


この設定を行うことで、PayPal決済完了後、
ECサイト側に遷移することができます。

IPN通知の設定


さて、EC-CUBEのPayPal決済モジュールは、支払い完了のURL遷移とは別に
PayPalで支払いが完了した通知を受けて、
「決済処理中」であるステータスを「入金済」にする仕組みを持ち合わせています。

支払い通知は、PayPal側で、ECサイト側に通知するよう設定する必要があるので
これの設定も行います。

販売ツール>即時支払い通知 を選択し
「即時支払い通知(IPN)」を有効にします。

20140426_eccube_paypal_08.png

EC-CUBEでPayPal決済サービスをデフォルトで利用する場合
http://{ユーザードメイン}/user_data/paypal_recv.php
が受信URLになります。

paypal_recv.phpのパーミッションを変更


PayPalから、「http://{ユーザードメイン}/user_data/paypal_recv.php」に対して通知が行われ、
支払い完了のステータス更新が行われます。

CPI(レンタルサーバー)さんでは、パーミッションが666だと
サーバー仕様でNGのようなので、644に変更を行います。

この設定はレンタルサーバーによるものなので、必ずしも必要とはならないと思いますが念のため。

IPNのステータスが503で再送信ばかり


今回ドハマりした内容です。
paypal_recv.phpが吐き出すログは、
paypal.logというファイルに吐出されるのですが、まったく通知がきた気配がありませんでした。

EC-CUBEを導入するにあたり、
パッケージとして「メンテナンス中」の切り替え機能がないことにまずぶつかったため
サーバーの.htaccessで、IP制限をかけ、
特定のIP以外からのアクセスは「メンテナンス中」画面に強制的にリダイレクトさせてたのですが
これが原因でした・・・

.htaccessの設定を元に戻すと、IPNが届くように・・・
単純なことですが、ほんとに気付かずに悪戦苦闘しました。

文字コードがおかしい


IPNは届くようになったけれど、まだ不完全です。
日本語が化けてたり、Illegal receiver_email! とかいうログが出たり。

Illegal receiver_email! についてはメールアドレスの大文字、小文字が原因だったので
PayPal決済モジュールの再設定で解決するのだけど
文字コードです。

これは、PayPalのIPNの文字コードを設定する必要があり、
これが分かりにくい!

個人設定>販売ツール の下の方にある
「PayPalボタンの言語コード化」というリンクから設定しなければならず
なかなか行き着くことができなかった。。。

PayPalボタンの言語コード化のリンクをクリックすると
言語のエンコード設定があるので、ここで「詳細オプション」をクリック

20140426_eccube_paypal_09.png

「PayPalから送信されたデータと同じエンコード方式を使用しますか(IPN、ダウンロード可能なログ、メールなど)?
の設定で、「UTF-8」と設定することで、やっとこさEC-CUBEが意図したとおりに動くようになりました。

.htaccessでIP制限さえしてなければもう少し早く解決したのでしょうが
なかなかどうして簡単な事に気付くことができませんでした。
当エントリで、少しでもPayPal決済でお悩みの方が減れば幸いです。

EC-CUBE 2.13系に対応した公式ガイドブックです。
手探りでカスタマイズを行ってる方は一読をおすすめします。

▼この記事を読んだ方は、こんな記事も読んでいます。▼

スポンサードリンク

テーマ:プログラミング - ジャンル:コンピュータ

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://dalmore.blog7.fc2.com/tb.php/108-a34843b7
この記事にトラックバックする(FC2ブログユーザー)

FC2Ad

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。