EC-CUBEにPAYPAL支払いを組み込む事については以前も注意点などを書いたが、今回は住所氏名電話番号などをPAYPALに渡す方法について書いてみようと思う。
EC-CUBEは基本的にEUC-JPで動いている為、フォームを書いてPOSTで引数渡しする方法ではEUC-JP以外のエンコードで日本語を渡すのは難しい。
だから、私はGETによる引数渡しでPAYPALに渡す事にした。
前回記事を書いた時はEC-CUBEの支払い完了画面を2つ作って、1つをPAYPAL支払いへ飛ばすボタン付きの画面という風に設計した。
だけどこの方法ではEC-CUBEサイト->PAYPALサイトという明確な線引きが出来てしまいあまりスムーズとは言えない。
だから今回は確認画面で確認ボタンを押したらPAYPAL支払い画面へリダイレクトする事を考えてみる。
ショッピングの確認画面はhtml/shopping/confirm.phpで行われるわけだが、このファイル中に
header("Location: " . URL_SHOP_COMPLETE);
の行がある事が判るだろう。
これは正にPHPでリダイレクトを行っている箇所なわけなんだけど、このURL_SHOP_COMPLETEの部分を条件によって変える事で、PAYPAL支払い時にはPAYPALへ飛ぶという動作が実現可能となる。
とりあえず該当部分のコードだけ抜き出してみたので見て欲しい。
if($arrData['payment_id'] == PAYPAL_PAYMENT_ID)のif文の部分からPAYPAL支払いへ飛ぶコードとなっている。
PAYPAL_SERVERやPAYPAL_MAILADDRESSの記号定数は判るだろうから省略するとして、このコードではEUC-JPで収められているデータをUTF-8にコンバートした後URLエンコードしてGET引数として組み込む流れを記述している。
(notify_urlの指定は、飛ばす事だけしか考えないのであれば消してしまった方が良い)
また、コードを見れば判ることだが、市町村名を得る為に郵便番号データベースから検索をかけている関係上、これを使う前に予め郵便番号データベースを登録しておかなければならない。
コードの工夫点1として、EC-CUBEでは顧客の住所登録時、都道府県については別で管理するようになっているが市町村については別になっていない。
しかしPAYPALでは別で渡すようになっており、しかもその欄は空白には出来ない。
だからEC-CUBEで登録された住所データから市町村データを抜き出す必要があるわけだが、私はここで、市町村は郵便番号から得て、登録住所1から得た市町村名を削除するという方向で実装してみた。
通常、市町村は住所1の先頭に来るわけだが普通は郵便番号データベースに登録してあるままの名前で先頭に来るだろう。
無論、そのままの名前で登録していない場合もあるかもしれないが、いずれにせよPAYPAL支払い画面で一度確認する事になるので、その時に修正してもらう機会もある。
電話番号はnight_phone_bに全て纏めてあるわけだが、PAYPAL支払いの際に入力するべき欄での電話番号欄ではどうやらnight_phone_bしか使われないようである為である。
これは恐らく、海外の、とくにアメリカ等の場合の州ごとの電話番号違いの吸収機構がnight_phone_aという事で、日本では要らないからnight_phone_aは使われていないのではないかと推測してみる。
いずれにせよ、このような形でGET引数に組み込んでPAYPALに渡してやる事で、顧客の住所氏名電話番号は既に入力された状態でPAYPAL支払い画面に飛ばせる事が出来るので、顧客は他のショッピングサイトと同様にクレジットカード番号だけ気にすれば良いという感じにすることが出来、またシームレスな移行も実現できる。
(ただ、どうしても都道府県だけは予め入力しておく事が出来なかった。都道府県はリストボックス形式での選択となっているのだが、stateに県名を入れておいても、或いは数字を入れたりしても無反応だった為もしかしたらstateではない他の変数の設定が必要なのかもしれない)