laravel下实现微信企业号网页授权

class QyWechatController extends Controller
{
    public $agentid;

    public $corpId;

    public $secret;

    public function __construct()
    {
        $this->agentid = 'xxx';
        $this->corpId = 'xxx';
        $this->secret = 'xxx';
    }

    public function index()
    {
        $code = request()->get('code');

        if ($code) {

            //获取用户信息
            $user_ticket = $this->getUserTicket($code, $this->getAccessToken());

            $user_info = $this->getUserInfo($user_ticket, $this->getAccessToken());

            //更新获取的最新信息到用户表

        }

        return redirect(request()->url());
    }

    /**
     * 获取access_token
     *
     * @return mixed
     */
    private function getAccessToken()
    {
        //从redis中获取有效的access_token
        $access_token = Cache::get('access_token');

        if ($access_token) return $access_token;

        $curl = Curl::to('https://qyapi.weixin.qq.com/cgi-bin/gettoken')
            ->withData(['corpId' => $this->corpId, 'corpsecret'=> $this->secret])
            ->get();

        $curl = json_decode($curl, true);

        //重新设置缓存,有效期120分钟
        Cache::put('access_token', $curl['access_token'], 120);

        return $curl['access_token'];
    }

    /**
     * 获取用户信息
     *
     * @param $code
     * @param $access_token
     * @return mixed
     */
    private function getUserTicket($code, $access_token)
    {
        $user = Curl::to('https://qyapi.weixin.qq.com/cgi-bin/user/getuserinfo')
            ->withData(['access_token' => $access_token, 'code' => $code])
            ->get();

        $user = json_decode($user, true);

        return $user['user_ticket'];
    }

    /**
     * 获取用户详情
     *
     * @param $user_ticket
     * @param $access_token
     * @return mixed
     */
    private function getUserInfo($user_ticket, $access_token)
    {
        $user_detail = Curl::to('https://qyapi.weixin.qq.com/cgi-bin/user/getuserdetail?access_token='.$access_token)
            ->withData(['user_ticket' => $user_ticket])
            ->asJson()
            ->post();

        //转换对象到需要用的数组
        $data = [
            'nickname' => $user_detail->userid,
            'truename' => $user_detail->name,
            'avatar' => $user_detail->avatar,
        ];


        //存入用户信息到session
        session(['userid' => $user_detail->userid]);
        session(['name' => $user_detail->name]);
        session(['avatar' => $user_detail->avatar]);

        return $data;
    }
}

猜你喜欢

转载自blog.csdn.net/hu_feng903/article/details/79542312