微信返回40003错误 请求授权时要到openid 和 access_token
  • 首页 > 工作时间 > 微信公众平台 > 正文
  • 作者:山庄少主
  • 2015年7月14日 18:31 星期二
  • 浏览:35926 次
  • 字号:  
  • 评论:1 条
  • 字数:2247 个
  • 显示:1200px 1360px 1600px
  • 关灯  编辑

  • //清除$access_token  从新获取正确的$access_token
    if($classData->errcode == '42001' || $classData->errcode == '40001'){
    $this->_clearAccessToken($this->token);
    $access_token = $this->_getAccessToken ();
    LOG::write( "PassportAction.class.php, re openid:$openid"); 
    $url2 = 'https://api.weixin.qq.com/cgi-bin/user/info?openid=' . $openid . '&access_token=' . $access_token;
    $classData = json_decode ( curlGet ( $url2 ) );
    LOG::write( "PassportAction.class.php, re addUserInfo(..)");

    }


    有两种情况   主要可能就是access_token  太旧了不能获取  或者不对  要从新获取

    /**
    * 清空accesstoken ywfnew 2015-4-21
    */
    private function _clearAccessToken($token){
    $where = array (
    'token' => $token
    );
    $this->thisWxUser['access_token'] = '';
    $this->thisWxUser['acsgettime'] = 0;
    $this->thisWxUser['acsexpires_in'] = 0;
    $mt = M ( 'Wxuser' )->where ( $where )->save ($this->thisWxUser);
    if($mt){
    LOG::write("PassportAction.class.php:_clearAccessToken(..), update suc!");
    }else{
    LOG::write("PassportAction.class.php:_clearAccessToken(..), update faild!");
    }
    }


    //重新获取
    private function _getAccessToken() {
    $where = array (
    'token' => $this->token 
    );
    $this->thisWxUser = M ( 'Wxuser' )->where ( $where )->find ();
    // token 有效,没有超时。
    if ($this->thisWxUser ['access_token'] && ($this->thisWxUser ['acsgettime'] + $this->thisWxUser ['acsexpires_in']) > time ()) {
    $access_token = $this->thisWxUser ['access_token'];
    } else {
    $globalurl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $this->thisWxUser ['appid'] . "&secret=" . $this->thisWxUser ['appsecret'];
    $globalaccesObj = json_decode ( curlGet ( $globalurl ) );
    if (! $globalaccesObj->errmsg) {
    // 更新token
    $this->thisWxUser ['access_token'] = $globalaccesObj->access_token;
    $access_token = $globalaccesObj->access_token;
    $this->thisWxUser ['acsgettime'] = time ();
    $this->thisWxUser ['acsexpires_in'] = $globalaccesObj->expires_in;
    $wxmodel = M ( 'wxuser' )->save ( $this->thisWxUser );
    } else {
    LOG::write ( '获取globalaccesObj发生错误:错误代码' . $globalaccesObj->errcode . ',微信返回错误信息:' . $globalaccesObj->errmsg );
    exit ();
    }
    }
    return $access_token;
    }

    19
     您审批这篇奏折共花了: 
    TP运算符
    定位浏览记录延时加载页面的返回浏览记录
    二维码加载中...
    本文作者:山庄少主     文章标题: 微信返回40003错误 请求授权时要到openid 和 access_token
    本文地址:http://www.ningguoteng.com/?post=81 百度未收录
    版权声明:若无注明,本文皆为“宁国腾|专业分享网站开发-PHP,软件设计博客”原创,转载请保留文章出处。
      昵称  邮箱  主页
    这个方法别的地方还真的没看到 有用
    返回顶部返回首页
    版权所有:宁国腾|专业分享网站开发-PHP,软件设计博客站长:山庄少主主题:国腾博客 v3.3程序:emlog加载耗时:0.352秒查询数据库:43次消耗内存:2.29MB鲁ICP备1500751号