laravel微信公众号授权(原生)

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\Cache;
use Ixudra\Curl\Facades\Curl;

class WechatController extends Controller
{
    public $appId;

    public $appSecret;

    public function __construct()
    {
        $this->appId = config('xxx');
        $this->appSecret = config('xxx');
    }

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

        if ($code) {

            //获取用户的openId
            $openId = $this->getOpenId($code);

            //获取用户基本信息
            $user_info = $this->getUserInfo($openId);

            //绑定获取的微信信息到当前用户
            //更新openid到用户表,重新缓存用户信息
        }

		//完成授权跳转到之前的请求地址
		//授权是一般是在中间件中完成
        return redirect(request('url'));
    }

    /**
     * 获取用户的openId
     *
     * @param $code
     * @return mixed
     */
    private function getOpenId($code)
    {
        //从redis中获取有效的access_token
        $access_token = Cache::get('access_token');

        if ($access_token) return $access_token;

        $curl = Curl::to('https://api.weixin.qq.com/sns/oauth2/access_token?appid='.$this->appId.'&secret='.$this->appSecret.'&code='.$code.'&grant_type=authorization_code')
            ->get();

        $curl = json_decode($curl, true);

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

        return $curl['openid'];
    }

    /**
     * 获取用户详情
     *
     * @param $openId
     * @return mixed
     */
    private function getUserInfo($openId)
    {
        //从redis中获取有效的access_token
        $access_token = Cache::get('access_token');

        $curl = Curl::to('https://api.weixin.qq.com/sns/userinfo?access_token='.$access_token.'&openid='.$openId.'&lang=zh_CN')
            ->get();

        return $curl = json_decode($curl, true);
    }
}

猜你喜欢

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