EC-CUBE ダウンロード商品で通常モードのPayPal決済に対応させる。
2014年05月22日 18時00分 月齢:23.2[真夜中の月] 潮汐:小潮
(最終更新日:2019年09月02日)
11年前に投稿 | ウェブ・IT関係 | コメントはありません
6分ぐらいで読めます。
この記事は情報が古い場合があります。
月々の使用料無料でクレジットカード決済を導入できるのがPayPal決済のメリット。PayPal決済を導入するには「PayPalビジネスアカウント」の取得が必要ですが、これも無料で手続きできます。で、決済方法にもいろいろな種類があってまた迷うわけですが、ペイパルアカウントを持っていない一見のお客さんにもクレジットカードを使ってもらおうと思うと、「ウェブペイメントスタンダード」しかないようです。(「エクスプレスチェックアウト」は画面遷移が少なくて魅力的なのですが、お客さんがペイパルアカウントを持っているか、決済時にアカウントを作るかしなければならないんです。)
このウェブペイメントスタンダードは、「自サイトで購入手続き→PayPal決済画面に遷移→自サイトに戻る」という流れになります。この流れを実現するために必要なモジュールが「ペイパルエクスプレス チェックアウト決済モジュール」。エクスプレスとついていますが、スタンダードもこのモジュールで対応できます。
早速テストしてみて最初にハマッたのが、パーミッションの設定。public_html/user_data内のpaypal_cancel.phpとpaypal_recv.phpが666になっているとうまく動かないようなので644にしてやります。ただこの症状、必ず発生するってわけでもなくて、3サイトで試したところ1箇所だけで発生しました。いずれにしても導入時には確認しておいたほうがいいかも知れません。
特に問題がなければ、以上で設定は終了。クレジットカードに対応したショッピングサイトの完成です。(ホントは決済完了のステイタスをEC-CUBEに連携するとか、いろいろと課題はあるんですケド。)
…さて。
ここからが本題なのですが、通常発送の商品のみを扱うのだったら問題ないのですが、ダウンロード商品を扱う場合に大変なことがおこります。
通常なら、この画面がしばらく表示された後に「PayPal決済サイトへ遷移しています。しばらくお待ち下さい。」の文字とともにPayPalの画面に遷移するのですが、ダウンロード商品の場合はここで止まってしまい、先に進めません。仕方がないので「戻る」ボタンで戻るのですが、これじゃあPayPalでダウンロード商品を購入できません。
調べてみてもなかなか情報が見つからなかったのですが、ようやくそれっぽい情報を見つけることができました。
この中にあった回答
ウェブペイメント・スタンダードでは、セラープロテクション(売り手保護 https://www.paypal.com/jp/cgi-bin/webscr?cmd=xpt/Marketing/securitycenter/sell/SellerProtection-outside) の対応に伴って、配送先住所の入力が必須になっているため、ダウンロード商品の場合だとエラーになるようです。
data/downloads/module/mdl_paypal/LC_Page_Mdl_Paypal_Helper_Link.php の 147行目付近以降の EXIST_CHECK をはずしてみるといかがでしょうか。
とのことなので、早速該当する箇所を修正してみます。LC_Page_Mdl_Paypal_Helper_Link.phpの145行目からペイパルスタンダードのパラメータの記述が始まるのですが、「city」「address1」「state」「zip」「first_name」「last_name」の「array("EXIST_CHECK"), 」を消してやります。
$objFormParam->addParam("amount", "amount", STEXT_LEN, "n", array("NUM_CHECK", "EXIST_CHECK", "MAX_LENGTH_CHECK"), $arrOrder['payment_total']);
$objFormParam->addParam("undefined_quantity", "undefined_quantity", 1, "KVa", array("EXIST_CHECK", "MAX_LENGTH_CHECK"), PAYPAL_UNDEFINED_QUANTITY);
$objFormParam->addParam("city", "city", MTEXT_LEN, "KVa",
array("EXIST_CHECK"),$arrShipping[$min]['shipping_addr01']);$objFormParam->addParam("address1", "address1", MTEXT_LEN, "KVa",
array("EXIST_CHECK"),$arrShipping[$min]['shipping_addr02']);$objFormParam->addParam("state", "state", MTEXT_LEN, "KVa",
array("EXIST_CHECK"),$this->arrPref[$arrShipping[$min]['shipping_pref']]);$objFormParam->addParam("zip", "zip", MTEXT_LEN, "KVa",
array("EXIST_CHECK"),$arrShipping[$min]['shipping_zip01'] . $arrShipping[$min]['shipping_zip02']);$objFormParam->addParam("first_name", "first_name", MTEXT_LEN, "KVa",
array("EXIST_CHECK"),$arrShipping[$min]['shipping_name02']);$objFormParam->addParam("last_name", "last_name", MTEXT_LEN, "KVa",
array("EXIST_CHECK"),$arrShipping[$min]['shipping_name01']);
これで、ダウンロード商品をPayPal決済できるようになりました。
ただ、副作用というか、ちょっと新たな問題が発生しました。上記のデータチェックはずしを行うとダウンロード商品が購入できるようになる代わりに、遷移した後の画面でPayPalアカウントを使わずにクレジット決済をしようとするときに表示される入力フォームの項目すべてを手で埋めなければなりません。ちなみに改造前のファイルの場合はこんな感じで、会員登録したときの氏名・住所等が最初から入っています。
これをお客様サービスの低下と捉えるかどうかは微妙ですが、今のところどちらかを犠牲にしなければならない状態です。もっと核の部分をいじれば解決するんでしょうけど。
今回のファイル修正は、「ダウンロード商品を扱いたい」かつ「ペイパルウェブペイメントスタンダードを導入したい」場合に限ってのことなので、ダウンロード商品を扱わないのであればまったく関係のないお話なのでした。
古い記事・新しい記事
- 古い記事 [2014年05月17日]
- ← CSSでヘッダ・フッタを固定してみる。IE6にも対応(いまさら?)。
- 新しい記事 [2014年05月23日]
- → EC-CUBE 0円商品のPayPal決済を回避する。