微信获取access

<?php
/**
 * Description of HomeBase
 *前台基类
 * @author xinjun
 */
namespace Controller\Home;

use Controller\Com\Base;
use Framework\Net\Request;
use Model\Wx\TokenModel;
use Model\Wx\UserModel;

class HomeBase extends Base
{
    public static $appid = null;
    public static $secret = null;
    public static $access_token = null;

    public function __construct()
    {
        parent::__construct();
        $tokenModel = new TokenModel();
        //取基础access_token
        $data = $tokenModel->getAccessToken(array('id' => 1));
        //赋值公众号的appid和secret
        self::$appid = $data['nf_appid'];
        self::$secret = $data['nf_appsecret'];
        //判断数据库里值是否为空
        if (empty($data['nf_val'])) {
            //重新获取token
            $tokenData = $this->getAccessToken(self::$appid, self::$secret);
            $tokenData = json_decode($tokenData, 1);
            //存数据库
            $result = $tokenModel->edit(array('nf_val' => $tokenData['access_token'], 'nf_time' => time()), array('id' => 1));
            if ($result) {
                //赋值给变量
                self::$access_token = $tokenData['access_token'];
            } else {
                return false;
            }
        } else {
            if (($data['nf_time'] + 6000) <= (time())) {
                //超过7000秒重新获取access_token
                $tokenData = $this->getAccessToken(self::$appid, self::$secret);
                $tokenData = json_decode($tokenData, 1);
                $result = $tokenModel->edit(array('nf_val' => $tokenData['access_token'], 'nf_time' => time()), array('id' => 1));
                if ($result) {
                    self::$access_token = $tokenData['access_token'];
                } else {
                    return false;
                }
            } else {
                self::$access_token = $data['nf_val'];
            }
        }
    }

    /**
     * 获取基础access_token
     * @return type
     */
    public function getAccessToken($appid, $secret)
    {
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $secret;
        $https = true;
        $method = 'get';
        $data = null;
        $result = $this->request($url, $https, $method, $data);
        return $result;
    }

    
}
/**
    1 获取access_token 并保存到数据库只要有人访问就判断此access_token是否有效,
    如果失效就是超时了,就重新获得access_token保存数据库。
    2 判断当前用户是从分享过来的,还是直接从微信公众号过来的。
    如果是微信公众号过来的,即直接或的当前用户的openid(前端获得传给我)取出刚才的access_token
    用get方式请求https://api.weixin.qq.com/cgi-bin/user/info?access_token=ACCESS_TOKEN&openid=OPENID&lang=zh_CN 
    获取该用户的所有信息,保存到数据库
    如果是通过分享过来的分享的时候传当前用户的id值。用户同意后前端获取当前用户的code,然后传给我
    我get方式请求https://api.weixin.qq.com/sns/oauth2/access_token?appid=wx4c71e5c3aad7f536&secret=710738e8528df03210e4002d570861f5&code=".$_GET['code']."&grant_type=authorization_code
    获取当前用户的access_token(不是基础access_token)和他的openid,然后我拿着这两个值去请求https://api.weixin.qq.com/sns/userinfo?access_token=".$data['access_token']."&openid=".$data['openid']."&lang=zh_CN 
    获取当前用户的信息并保存。同时按照规定,如果当前用户
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx4c71e5c3aad7f536&redirect_uri=http%3A%2F%2Fwx.nongfaziran.com%2FHome%2Ftest%2FgetOne&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect
 **/

  

posted on 2017-08-02 16:59  泪滴  阅读(272)  评论(0编辑  收藏  举报