微信公众号基础开发(获取access_token)

微信公众号开发 基础支持 获取access_token

下班闲来无事,写的微信基础授权接口,纯手打,并非网上复制,有兴趣的朋友可以参考一下

网页用户授权和拉取用户信息可查看博主其他文章

有兴趣的朋友或者PHP新手可以关注我,不定时更新PHP代码
代码基于 Apache2.4.39 + MySql5.7.26 + PHP7.4.3nts + 小皮面板 + Thinkphp 5.0.24

	/**
	 *  获取基础 access_token 与网页服务的 access_token 不同
	 */
	 
	//自定义sql连接
    public $Db = [
        'type' => 'mysql',//
        'hostname' => '',
        'database' => '',
        'username' => '',
        'password' => '',
        'hostport' => '3306',
        'prefix' => 'w_',
    ];
	public $Appid = "";
    public $AppSecret = "";
	public $GetToken = "https://api.weixin.qq.com/cgi-bin/token?grant_type=";
    
	public function GetToken()
    {
        $Db = Db::connect($this->Db)->name("wechat_token");
        $grant_type = "client_credential";// 获取access_token填写client_credential
        $token_url = $this->GetToken . "$grant_type&appid=" . $this->Appid . "&secret=" . $this->AppSecret;
        /**
         * 判断Token是否已经存在
         * 1. 根据缓存判断(自行修改条件)
         *  1.1 直接判断缓存是否为空
         *  1.2 因为微信返回为 7200s 和 缓存时长一致,可直接判断
         * 2. 根据SQL数据判断 (推荐)
         *  2.1 查出SQL数据
         *  2.2 根据上次 (更新|添加) 时间 + 微信返回的可用时长
         *  2.2 若大于当前时间 ? 未超时 : 超时
         */
        $AcctokenData = $Db->where(["name" => "access_token"])->find();
        if (empty($AcctokenData) or $AcctokenData['expiration'] < time()) {
            // 不存在
            //获取链接内容
            $TokenInfo = $this->PostCurl($token_url);
            //获取内容默认:JSON,需要转为数组方便调用
            $TokenInfo = !empty($TokenInfo) ? json_decode($TokenInfo, true) : NULL;
            // 判断是否获取到 access_token
            if (!empty($TokenInfo['access_token'])) {
                //已获取到 access_token 存入session 或 存入SQL (缓存存在局限性,建议存到SQL)
                $AcctokenCount = $Db->where(["name" => "access_token"])->count();
                if ($AcctokenCount == 0) {
                    $Db->insert([
                        'name' => "access_token", "token" => $TokenInfo['access_token'],
                        'obtain' => time(), 'expires_in' => $TokenInfo['expires_in'],
                        "expiration" => time() + $TokenInfo['expires_in']
                    ]);
                } else {
                    $Db->where(["name" => "access_token"])->update([
                        "token" => $TokenInfo['access_token'], 'obtain' => time(),
                        'expires_in' => $TokenInfo['expires_in'], "expiration" => time() + $TokenInfo['expires_in']
                    ]);
                }
                $access_token = $TokenInfo['token'];
            } else {
                return $this->msg(404, "获取Token失败,失败原因:" . $TokenInfo['errmsg'], $TokenInfo, 0);
            }
        } else {
            // Token存在并且未超时
            $access_token = $AcctokenData['token'];
        }
        return $this->msg(200, "调用成功", ['access_token' => $access_token,], 1);
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白净生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值