如何除錯ucenter中傳送的api通知訊息

大東瓜123發表於2015-02-12

ucenter可以整合多個應用,在一個應用中登入了,就可以無縫地切換到另外應用中,原因是在登入的時候,應用通知了ucenter,ucenter又通知了其它的幾個應用,這樣就可以做到流暢的切換了

最近遇到一個問題,就是在destoon登入了,但是在ecmall中登入不正常,但是在本地是正常的啊,會不會是ucenter沒有通知了,那麼怎麼看ucenter的訊息傳送了嗎?我沒找到辦法只好,用寫檔案的形式來解決,在api/uc.app.php中找到synlogin這個函式,加入這樣一段,這個目的是在uc.app.php所在目錄下生成一個synlogin.txt,看看能不能成功地接收到ucenter的訊息,從新從其它的目錄中登入,如果目錄中沒synlogin.txt這個檔案,說明通訊不能成功,如果有的話,開啟看看其它的訊息,自己分析一下就可以了

 define(`DT_ROOT`, str_replace("\", `/`, dirname(__FILE__)));
        $fp = fopen(DT_ROOT . "/synlogin.txt", "w"); //檔案被清空後再寫入
        if ($fp)
        {
            $content= "username=$username and uid=$uid get class is:".get_class($this->user_mod);
            $content.="
 and the ec_user id is:".$ec_user[`user_id`];
            $flag = fwrite($fp, $content);
            if (!$flag)
            {
                echo "寫入檔案失敗<br>";
                fclose($fp);
                exit();
            }
        } else
        {
            echo "開啟檔案失敗";
        }
        fclose($fp);

結果找出原因來了,在ucenter中有使用者而在ecmall中沒有使用者,是不會登入成功的因為

        //note 同步登入 API 介面
        $ec_user = $this->user_mod->get($uid);
        if ($ec_user)
        {
            $this->_do_login($ec_user[`user_id`]);
        }

$this->user_mod->get($uid);中會找不到使用者,所以在ucenter中的使用者一定要先在ecmall中登入一次,讓ecmall給你加入到他的使用者表中,這樣才能通知成功.

相關文章