ECOS百科全書|高級搜索|RSS訂閱|加入收藏|服務中心|聯系我們歡迎您光臨!

ECStore對接微信報token錯誤的解決辦法

來源:商鳴網絡科技 發布時間:2020-01-04 14:55 字體:【   點擊

故障現象:微信后臺配置都正確,但是同步微信菜單時總是報出“token錯誤,請稍后重試”的提示。

問題分析:如果兩邊配置都沒有問題,這個可能是由于token在kvstore中緩存值不對導致的,系統會優先使用緩存值。

解決辦法:

方法是強制刷新緩存值。

將文件“ /app/weixin/lib/wechat.php”復制一份放到二次開發目錄中,修改其中的get_basic_accesstoken方法,大約在112行,如下:

    // 獲取微信基礎信息ACCESS_TOKEN
    public function get_basic_accesstoken($bind_id){
        if( base_kvstore::instance('weixin')->fetch('basic_accesstoken_'.$bind_id, $access_token) !== false){
            logger::info('kv獲取ACCESS_TOKEN'.$access_token);
            return $access_token;
        }else{
            $bindinfo = app::get('weixin')->model('bind')->getRow('appid, appsecret, email',array('id'=>$bind_id));
            if( $bindinfo['appid'] && $bindinfo['appsecret']){
                $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$bindinfo['appid']}&secret={$bindinfo['appsecret']}";
                $httpclient = kernel::single('base_httpclient');
                $response = $httpclient->set_timeout(6)->get($url);
                $result = json_decode($response, true);

                if( $result['errcode']==0 ){
                    if( !base_kvstore::instance('weixin')->store('basic_accesstoken_'.$bind_id, $result['access_token'], $result['expires_in']) ){ // 微信ACCESS_TOKEN的有效期,單位為秒
                        logger::info("KVSTORE寫入公眾賬號登錄郵箱為 {$bindinfo['email']} 的ACCESS_TOKEN錯誤");
                    }
            logger::info('遠程獲取ACCESS_TOKEN'.$result['access_token']);
                    return $result['access_token'];
                }else{
                    logger::info("獲取公眾賬號登錄郵箱為 {$bindinfo['email']} 的ACCESS_TOKEN錯誤,微信返回的錯誤碼為 {$result['errcode']}");
                    return false;
                }
            }else{
                logger::info("沒有取到公眾賬號ID為 {$bind_id} 的 appid 或者 appsecret 的信息");
                return false;
            }
        }
    }


將其中的:

if( base_kvstore::instance('weixin')->fetch('basic_accesstoken_'.$bind_id, $access_token) !== false)

修改為:

if( base_kvstore::instance('weixin')->fetch('basic_accesstoken_'.$bind_id, $access_token) !== false && 1==2)

這樣做的目的是強制重新取得token并存入到kvstore中。

接著去后臺更新微信菜單,更新成功一次后,把剛才修改了的代碼改回去。下次如果修改了公眾號配置,重新操作一次即可。 


------分隔線--------

關鍵詞:token錯誤,ecstore,重試

轉載請保留:http://www.879609.live/html/jszx/ecstore/article-2861.html

------分隔線--------
尚未注冊暢言帳號,請到后臺注冊
辽宁快乐12技巧最新