• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

php微信开发 大神看看有没有语法错误,能不能自动获取到最新access_token

php 搞代码 3年前 (2022-01-25) 15次浏览 已收录 0个评论
文章目录[隐藏]
<code>class Wechat_base_api{                private $appid='wx5d4b7d2e8bfd5793';        private $appsecret='4379ef7213c36eae5dc2ab91f9f6aced';        //构造函数        public function __construct($appid,$appsecret)        {            $this->appid = $appid;            $this->appsecret = $appsecret;        }            //获取access_token(支持自动更新凭证)        public function get_access_token()        {            $this->last_time = 1408851194;            $access_token = "jIGpovtFGZDXCB_K2vqDPTA05zP7VWZaKIHXC_qZDqEiSGONWfCzQ45fI9aksl2L188yhtPpNB61iOBS4TTtgw";            if(time() > ($this->last_time + 7200))            {                //GET请求的地址                $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appid}&secret={$this->appsecret}";                 $access_token_Arr =  $this->https_request($url);                 $this->last_time = time();                 return $access_token_Arr['access_token'];                        }            return $access_token;        }</code>
<code>//https请求(支持GET和POST)        protected function https_request($url,$data = null)        {            $ch = curl_init();            curl_setopt($ch,CURLOPT_URL,$url);            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);            if(!empty($data))            {                curl_setopt($ch,CURLOPT_POST,1);//模拟POST                curl_setopt($ch,CURLOPT_POSTFIELDS,$data);//POST内容            }            $outopt = curl_exec($ch);            curl_close($ch);            $outopt = json_decode($outopt,true);            return $outopt;        }}</code>

回复内容:

<code>class Wechat_base_api{                private $appid='wx5d4b7d2e8bfd5793';        private $appsecret='4379ef7213c36eae5dc2ab91f9f6aced';        //构造函数        public function __construct($appid,$appsecret)        {            $this->appid = $appid;            $this-<em>¥本文来%源[email protected]搞@^&代*@码)网5</em><strong>搞gaodaima代码</strong>>appsecret = $appsecret;        }            //获取access_token(支持自动更新凭证)        public function get_access_token()        {            $this->last_time = 1408851194;            $access_token = "jIGpovtFGZDXCB_K2vqDPTA05zP7VWZaKIHXC_qZDqEiSGONWfCzQ45fI9aksl2L188yhtPpNB61iOBS4TTtgw";            if(time() > ($this->last_time + 7200))            {                //GET请求的地址                $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$this->appid}&secret={$this->appsecret}";                 $access_token_Arr =  $this->https_request($url);                 $this->last_time = time();                 return $access_token_Arr['access_token'];                        }            return $access_token;        }</code>
<code>//https请求(支持GET和POST)        protected function https_request($url,$data = null)        {            $ch = curl_init();            curl_setopt($ch,CURLOPT_URL,$url);            curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);            if(!empty($data))            {                curl_setopt($ch,CURLOPT_POST,1);//模拟POST                curl_setopt($ch,CURLOPT_POSTFIELDS,$data);//POST内容            }            $outopt = curl_exec($ch);            curl_close($ch);            $outopt = json_decode($outopt,true);            return $outopt;        }}</code>

1.没有语法错误
2.这是谁家的id和secret…

问题大的很

  • 过期时间写死,会导致不停请求微信接口,可能会达到接口请求上限

  • access_token也是写死,当达到接口请求上限后,返回都是过期错误的access_token

  • 说到底,access_token没有缓存起来。

下面这个是根据微信提供的示例代码更改改过的:

<code><?php/** * Created by PhpStorm. * User: T.H * Date: 12/9/2015 * Time: 9:59 AM */class WxApi{    /**     * 填你的AppId     * @var string     */    private $appId = '';    /**     * 填你的Secret     * @var string     */    private $appSecret = '';    /**     * 填你的 access_token 缓存文件存存放的位置     * @var string     */    private $file_path = '/var/wx/AccessToken.json';    /**     * WxAccessToken constructor.     * @param string $appId     * @param string $appSecret     * @param string $file_path     */    public function __construct($appId = '', $appSecret = '', $file_path = '') {        //初始化        $this->appId = $appId ? $appId : $this->appId;        $this->appSecret = $appSecret ? $appSecret : $this->appSecret;        $this->file_path = $file_path ? $file_path : $this->file_path;    }    /**     * 获取微信AccessToken     * @return mixed     */    private function getAccessToken() {        $data = json_decode(file_get_contents($this->file_path));        if ($data->expire_time appId&corpsecret=$this->appSecret";            // 其它类型公众号使用这个URL获取access_token            $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$this->appId&secret=$this->appSecret";            //访问微信接口,拉取access_token等信息            $res = json_decode($this->httpGet($url));            //提取出access_token            $access_token = $res->access_token;            //判断access_token是否存在,存在保存到本地文件中            if ($access_token) {                $data->expire_time = time() + 7190;                $data->access_token = $access_token;                $fp = fopen($this->file_path, "w");                fwrite($fp, json_encode($data));                fclose($fp);            }        } else { //本地存储的access_token没有过期            $access_token = $data->access_token;        }        //返回        return $access_token;    }    /**     * 拉取数据     * @param $url     * @return mixed|string     */    private function httpGet($url) {        //本地请求,则跳过请求        if('127.0.0.1' == $_SERVER['SERVER_ADDR']){            return '';        }        $curl = curl_init();        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);        curl_setopt($curl, CURLOPT_TIMEOUT, 500);        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);        curl_setopt($curl, CURLOPT_URL, $url);        $res = curl_exec($curl);        curl_close($curl);        return $res;    }}</code>

微信官方文档中的 PHP 代码,感觉坑比较多,自己一个个接口试过去太耗时了(别问我是怎么知道的…)。

因为我们项目中用的是 CI 框架,在 GitHub 中这个项目:https://github.com/dodgepudding/wechat-php-sdk 的基础上稍加改动,就完成了微信的集成。

看这份代码比看官方文档要快,我是这么觉得的…

哥们 你们家的appid 跟appsecret 暴露了!!!
另外 access_token 是有次数限制的
记得缓存下来,不然请求次数过多,会出错的


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:php微信开发 大神看看有没有语法错误,能不能自动获取到最新access_token

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址