バージョン選択

フォーラム

メニュー

オンライン状況

46 人のユーザが現在オンラインです。 (34 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 45
neha9873 もっと...

サイト内検索

 > フロント機能 > 【フロント機能(モバイル)】2.0系での空メール処理

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ゲスト
投稿日時: 2008/5/27 16:04
対応状況: −−−
【フロント機能(モバイル)】2.0系での空メール処理
掲題の通り、2.0系へのバージョンアップでモバイルの空メールが機能しなくなっていた問題があったため、とりあえず次の3点について修正して対応しました。



【/data/script/recieve_kara_mail.php】を以下のように変更。
#!/usr/bin/env php
<?php
/**
 * モバイルサイト/空メール受け付けスクリプト
 */
$base_dir = dirname(dirname(dirname(__FILE__))) . '/';
require_once($base_dir . 'html/define.php');
if (!defined("CLASS_PATH"))     define("CLASS_PATH",    $base_dir . "data/class/");
if (!defined("CLASS_EX_PATH"))  define("CLASS_EX_PATH", $base_dir . "data/class_extends/");
if (!defined("CACHE_PATH"))     define("CACHE_PATH",    $base_dir . "data/cache/");

require_once(CLASS_EX_PATH . "SC_Initial_Mobile_Ex.php");
// アプリケーション初期化処理
$objInit = new SC_Initial_Mobile_Ex();
$objInit->init();

require_once(CLASS_EX_PATH . "db_extends/SC_DB_DBFactory_Ex.php");
require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_DB_Ex.php");
require_once(CLASS_EX_PATH . "helper_extends/SC_Helper_Mobile_Ex.php");
require_once CLASS_PATH . '/SC_MobileKaraMail.php';
require_once CLASS_PATH . '/SC_SendMail.php';

$CONF = SC_Helper_DB_EX::sf_getBasisData();

$objMail =& SC_MobileKaraMail::factory();
$objMail->parse();
$token = $objMail->getToken();
$sender = $objMail->getSender();

if (SC_Helper_Mobile_Ex::gfRegisterKaraMail($token, $sender)) {
    $subject = '空メールを受け付けました';
    $reply_body = "下記のリンクをクリックして、次の手続きに進んでください。\n" .
//                SITE_URL . "redirect.php?token=$token";
                  MOBILE_SITE_URL . "redirect.php?token=$token";
} else {
    $subject = '空メール手続きが失敗しました';
    $reply_body = "時間切れなどにより、空メール手続きを行うことができませんでした。\n" .
                  "サイトのトップへ戻ってやり直してください。\n" .
                  SITE_URL . "\n";
}

$objReply = new SC_SendMail;
$objReply->setItem($sender, "【{$CONF["shop_name"]}】$subject", $reply_body,
                   $CONF['email03'], $CONF['shop_name'], $CONF['email03'], $CONF['email04']);
$objReply->sendMail();

$objMail->success();
?>


【/data/class/session/sessionfactory/SC_SessionFactory_UseCookie.php】内のSC_SessionFactory_UseCookieクラスで、initSessionメソッドを以下のように変更。
    function initSession() {
        ///////////////////////////////////////////////////////////////////////////////////////////
        // 空メール処理用のトークンが設定されている場合はトークンを元にセッションIDの取得を試行する。
        if (isset($_GET['token'])) {
            $token = $_GET['token'];
            $objQuery = new SC_Query;
            $arrRow = $objQuery->getrow('dtb_mobile_kara_mail', 'session_id, next_url, email',
                                        'token = ? AND email IS NOT NULL AND receive_date >= ?',
                                        array($token, date('Y-m-d H:i:s', time() - MOBILE_SESSION_LIFETIME)));
            if (isset($arrRow)) {
                $objQuery->delete('dtb_mobile_kara_mail', 'token = ?', array($token));
                list($sessionId, $next_url, $email) = $arrRow;
                if ($sessionId){
                    session_set_cookie_params(0, "/", DOMAIN_NAME);
                    session_id($sessionId);
                    session_start();
                    
                    if ($email){
                        $_SESSION['mobile']['kara_mail_from'] = $email;
                    }
                    if ($next_url){
                        $objURL = new Net_URL(MOBILE_SITE_URL . $next_url);
#                       $objURL->addQueryString(session_name(), $sessionId);
                        $url = $objURL->getURL();
                        $_SESSION['next_url'] = $url;
                    }
                }
            }
        }
        ///////////////////////////////////////////////////////////////////////////////////////////
        if (session_id() === "") {

            session_set_cookie_params(0, "/", DOMAIN_NAME);

            if (!ini_get("session.auto_start")) {
                // セッション開始
                session_start();
            }
        }
    }


【/data/class_ectends/page_extends/LC_Page_Redirect_Ex.php】のLC_Page_Redirect_Exクラスでモバイル用メソッドをオーバーライド。
    function mobileProcess() {
        define('SKIP_MOBILE_INIT', true);

        if (isset($_GET['token'])) {
            if (isset($_SESSION['next_url'])){
                $next_url = $_SESSION['next_url'];
            }else{
                $next_url = SC_Helper_Mobile_EX::gfFinishKaraMail($_GET['token']);
            }
        }
        // $next_url には, セッションID付与済み
        if (isset($next_url) && $next_url !== false) {
            $this->sendRedirect($next_url, true);
        } else {
            $this->sendRedirect(MOBILE_SITE_URL, true);
        }
    }

ゲスト
投稿日時: 2008/5/27 16:13
対応状況: −−−
Re: 【フロント機能(モバイル)】2.0系での空メール処理
前述3点の修正のみでは、会員登録完了時に「既に会員登録が完了しているか、無効なURLです。」というエラーメッセージが出るようになります。
ただ、このエラーが出ていても実際には登録成功しているため、空メール処理を通した場合はエラーが発生しないようにする必要がありました。

【/data/class_extends/page_extends/regist/LC_Page_Regist_Ex.php】内でLC_Page_Regist_ExクラスのlfErrorCheckメソッドを以下のようにオーバーライド。

    //---- 入力エラーチェック
    function lfErrorCheck($array) {
        $objQuery = new SC_Query();
        $objErr = new SC_CheckError($array);

        $objErr->doFunc(array("仮登録ID", 'id'), array("EXIST_CHECK"));
        if (! EregI("^[[:alnum:]]+$",$array["id"] )) {
            $objErr->arrErr["id"] = "無効なURLです。メールに記載されている本会員登録用URLを再度ご確認ください。";
        }
        if (! $objErr->arrErr["id"]) {
#             $sql = "SELECT customer_id FROM dtb_customer WHERE secret_key = ? AND status = 1 AND del_flg = 0";
#             $result = $objQuery->getOne($sql, array($array["id"]));
            ///////////////////////////////////////////////////////////////////////////////////////
            // 空メールに対応したとき、ステータスが2になっているため、空メール処理の有無で検索するステータスを切り替え
            $status = isset($_SESSION['mobile']['kara_mail_from']) ? 2 : 1;
            $sql = "SELECT customer_id FROM dtb_customer WHERE secret_key = ? AND status = ? AND del_flg = 0";
            $result = $objQuery->getOne($sql, array($array["id"], $status));
            ///////////////////////////////////////////////////////////////////////////////////////
            if (! is_numeric($result)) {
                $objErr->arrErr["id"] = "※ 既に会員登録が完了しているか、無効なURLです。<br>";
                return $objErr->arrErr;

            }
        }

        return $objErr->arrErr;
    }

ゲスト
投稿日時: 2008/5/27 16:16
対応状況: 保留
Re: 【フロント機能(モバイル)】2.0系での空メール処理
以上で空メールは問題なく処理出来るようになると思われますが、全体を完全に理解してはいないため他の場所に影響が出る場合もありえますので注意してください。


テストが十分とはいえないので対応状況は保留としておきたいと思います。


以上。
tao_s
投稿日時: 2011/5/16 20:48
対応状況: −−−
仙人
登録日: 2008/8/20
居住地: 東京
投稿: 799
【フロント機能(モバイル)】2.4系での空メール処理
久しぶりに空メール登録の設定をしようと思ったら、plesk上のqmailでは動きませんでした。
どうも拡張メールアドレスがうまく動かないので、tokenをsubjectに入れる方式に変更して、上記の修正を一部入れながらやりました。

subjectに入れたtokenは

引用:
require_once DATA_PATH . '/module/Mail/mimeDecode.php';

$fp = fopen('php://stdin', 'r');

// 残りのヘッダーを解析する。
$data = '';
while (!feof($fp)) {
$data .= fgets($fp);
if (rtrim($data, "\r\n") == '') {
break;
}
}
$structure = Mail_mimeDecode::decode(array('input' => $data));
$this->extension = @$structure->headers['subject'];

で取れます。

ご参考までに書いておきます。


----------------
EC-CUBEカスタマイズ相談してください。
緊急のEC-CUBEの障害対応
EC-CUBEカスタマイズブログ

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,699名です
総投稿数は109,943件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1283
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.