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.hnqss.cn/html/jszx/ecstore/article-2861.html

------分隔线--------
尚未注册畅言帐号,请到后台注册