クロネコペイメント等で受注確認をメールにて処理

クロネコペイメント等のクレジット処理では、支払完了後にEC-CUBE側に帰ってくることができません。そのため、本当に支払われたかメールを手動で確認する必要があるのですが、これを、システムで自動で処理するシステムのプログラムを紹介したいと思います。

プログラムの処理について簡単に紹介すると、POP3ライブラリを利用して、ログインを行い、受信メールをすべて読み、受信番号を検索。受信番号が存在すれば、このステータスを更新という処理になります。

以下がプログラム例になります。パース関数は現在のクロネコペイメントのものを対象としております。

        $pop3     = new Net_POP3();
        $response = $pop3->connect(KURONEKO_POP3_HOST, KURONEKO_POP3_PORT);
        if(!$response) {
            GC_Utils_Ex::gfPrintLog("Error POP3 Connect");
            return;
        }
        $response = $pop3->login(KURONEKO_POP3_USER, KURONEKO_POP3_PASS);
        if(!$response) {
            GC_Utils_Ex::gfPrintLog("Error POP3 Login");
            return;
        }

        $pop3List = $pop3->getListing();
        if(is_array($pop3List) && 0 < count($pop3List)) {
            foreach($pop3List as $pop3Item) {
                $id   = $pop3Item['msg_id'];
                $head = $pop3->getParsedHeaders($id);
                $body = $pop3->getBody($id);

                if(PEAR::isError($head)) {
                    continue;
                }

                if(PEAR::isError($body)) {
                    continue;
                }

                $subject = mb_decode_mimeheader($head['Subject']);
                $body    = mb_convert_encoding($body, "UTF-8", "JIS");

                $order_id = "";
                $order_id = $this->lfKuroParseM($subject, $body);
                if($order_id) {
                    $objQuery = new SC_Query();
                    $objQuery->update("dtb_order", array("status"=>ORDER_PRE_END), "order_id = ? AND status = ?", array($order_id, ORDER_NEW));
                }
            }
        }


/* 黒猫手紙のチェック */
    function lfKuroParseM($subject, $body) {
        if($subject != "クレジットカードお支払い手続きの完了") {
            return null;
        }

        $body = str_replace("\n",   "", $body);
        $body = str_replace("\r\n", "", $body);
        $body = str_replace("\r",   "", $body);
        $body = str_replace(" ",    "", $body);
        $body = str_replace(" ",   "", $body);
        $body = str_replace("↑",   "", $body);
        preg_match("/クロネコ@ペイメント受付番号([0-9]*)/", $body, $matches); // Check It
        return isset($matches[1]) ? $matches[1] : null;
    }