ECcube Paypalモジュール。支払い後にメールを送信するようにハック

月額費用無しでクレジット決済が利用できるpaypalは非常に便利です。
今回、オープンソースのECcubeに無料で使えるPaypalモジュールが出来たというので使ってみました。
ペイパルのテスト環境で利用すると問題なく動作しているようです。

しかし、注文確認メールが決済前に送られてしまっているので、そこが少し気になりました。
そこで、決済後に注文確認メールが送られるように改造してみました。

PayPalサーバからIPN(支払い通知)を受け取るコードにメール送信機能を追加する。
/user_data/paypal_recv.php 87行くらい。

   if (in_array(‘VERIFIED’, $response)) {
       GC_Utils::gfPrintLog("IPN VERIFIED: status by ". $arrRequest[‘payment_status’], PAYPAL_LOG_PATH);
       $objQuery = new SC_Query();
       $objQuery->update("dtb_order", $arrVal, "order_id = ?", array($arrRequest[‘invoice’]));

   //追加部分開始///////////////////////////////////////////////////////////////////////////
       $order_id = $arrRequest[‘invoice’];
       // 完了メール送信
       if($order_id != "") {
           $mailHelper = new SC_Helper_Mail_Ex();
           // 携帯
           if (SC_MobileUserAgent::isMobile()) $mailHelper->sfSendOrderMail($order_id, ‘2’);
           // PC
           else $mailHelper->sfSendOrderMail($order_id, ‘1’);
       }
   //追加部分終了///////////////////////////////////////////////////////////////////////////

       return true;
   } else {
       return false;
   }

メールを送信する部分を削除しておく。ここを消さないと決済前にメールが送信されてしまいます。
/downloads/module/mdl_paypal/LC_Page_Mdl_Paypal_Helper_Link.php 215行くらい。

        // セッションに保管されている情報を更新
        $this->objCustomer->updateSession();

   //削除部分開始///////////////////////////////////////////////////////////////////////////
        // 完了メール送信
        if($order_id != "") {
            $mailHelper = new SC_Helper_Mail_Ex();
            // 携帯
            if (SC_MobileUserAgent::isMobile()) $mailHelper->sfSendOrderMail($order_id, ‘2’);
            // PC
            else $mailHelper->sfSendOrderMail($order_id, ‘1’);
        }
   //削除部分終了///////////////////////////////////////////////////////////////////////////
    }
}
?>

これで、決済前ではなく決済後に注文確認のメールが行くようになるはずです。
なお、不具合については特にチェックしていませんのでよくテストをした方が良いと思われます。
ハックの適用は自己責任でお願いします。

ペイパルのテスト環境は使いにくい部分があるのですが無料なので仕方がないかもしれません。
月額料金が無料で可能なクレジットカード決済ですので、利用価値は大いにあるのではないでしょうか。

中国的には銀連に対応。