微信获取access_token并存入配置文件 的类和代码

刚写的微信获取access_token的代码,发上来做个记录,也希望大家共同探讨.

<?php

/**
 * 用于更新微信access_token
 * Class WechatAccessToken
 */
namespace Wechat;
class WechatAccessToken {
    private $appId;
    private $appSecret;
    private $WechatAccessToken = array();
    // 最后申请时间
    protected $lastApplyTime = 0;
    // 间隔时间 : 50秒内的申请算连击,根据每天只能调用2000次估算出来
    protected $intervalTime = 50;

    public function __construct($WechatAccessToken, $appId='xxxxxxx', $appSecret='xxxxx') {
        $this->WechatAccessToken = $WechatAccessToken;
        $this->appId = $appId;
        $this->appSecret = $appSecret;
    }

    /**
     * 取得微信的accessToken
     */
    public function getWechatAccessToken() {
        # 提前10分钟获取token
        $pre = 110 * 60;

        // 如果没有access_token信息,则更新access_token
        if (count($this->WechatAccessToken) == 0) {
            $this->setWechatAccessToken();
        }

        // 如果到期时间在10分钟内,就更新access_token
        if ($this->lastApplyTime || $this->lastApplyTime - time() >= $pre) {
            $this->setWechatAccessToken();
        }

        return $this->WechatAccessToken['access_token'];
    }

    /**
     * 申请token
     */
    private function setWechatAccessToken( ) {
        // 50 秒内不能查询两次,避免一下子将整天的查询次数都用光了
        if ( time() - $this->lastApplyTime < $this->intervalTime ) {
            return $this->returnArr(0,'获取微信公众号token失败,50 秒内不能查询两次','');
        }

        $appId = $this->appId;
        $secret = $this->appSecret;
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appId}&secret={$secret}";
        $curl = curl_init($url);
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($curl,CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
        $data = curl_exec($curl);
        curl_close($curl);

        if ( ! $data ) {
            return $this->returnArr(0,'获取微信公众号token失败,返回为空','');
        }

        $result = json_decode($data, true);
        // {"access_token":"16_pyPL1eL_jcT-EevdHGKZ6ohFxvQgQjYSl9AWKbEElW99aIDhtzJ6sI7oWHY1EXIuGI-KVPBxsgorLmNj6Ms83yR_cjGvLBGsg_o6UCaNtVENgm35XVFDTh0Snx4SGLfAGADRW","expires_in":7200}

        if ( ! $result ) {
            return $this->returnArr(0,'获取微信公众号token失败,返回异常:'.$data,'');
        }

        // 写文件
        $resultData = array(
            'WechatAccessToken' => array(
                'access_token' => $result["access_token"],
                'prev_time' => time(),
                'expires_in' => $result["expires_in"],
            )
        );
        file_put_contents("Data/Config/WechatAccessToken.inc.php", "<?php \nreturn " . var_export($resultData, true) . ";\n?>");
        $this->WechatAccessToken = $resultData['WechatAccessToken'];
        return $this->returnArr(1,'获取微信公众号token成功',$result["access_token"]);
    }

    public function returnArr($status, $msg, $data){
        $data = array(
            'status' => $status,
            'msg' => $msg,
            'data' => $data,
        );
        return $data;
    }
}

调用部分:

use Wechat\WechatAccessToken;
$WechatAccessToken = new WechatAccessToken(C('WechatAccessToken'));
echo $WechatAccessToken->getWechatAccessToken();

WechatAccessToken.inc.php如下:

<?php 
return array (
  'WechatAccessToken' => 
  array (
    'access_token' => '16_3KKxDqYFiak8RmG2TPVNbZvRqHwZUUMFqcVGlPyynalk9_vnpQZM1ozkG4TV0qr9d1uvtgwSLBI345ieUIkV3Cyfay2nUsNPzeDeEncVI2wTvzjG_PL0cTDTtNt1WgVPjTBMqJQ1Yg95zZvlJAIdAJACTB',
    'prev_time' => 1543912023,
    'expires_in' => 7200,
  ),
);
?>

猜你喜欢

转载自blog.csdn.net/a33130317/article/details/84790932