wechat_config = config('site.wechatApp'); } /** * 获取openid * @return string|mixed */ public function getUserAccessUserInfo($code = "") { if (empty($code)) { $baseUrl = request()->url(true); $url = $this->getSingleAuthorizeUrl($baseUrl, "123"); Header("Location: $url"); exit(); } else { $access_token = $this->getSingleAccessToken($code); return $access_token; return $this->getUserInfo($access_token); } } /** * 微信授权链接 * @param string $redirect_uri 要跳转的地址 * @return [type] 授权链接 */ public function getSingleAuthorizeUrl($redirect_url = "", $state = '1') { $redirect_url = urlencode($redirect_url); return "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $this->wechat_config['appid'] . "&redirect_uri=" . $redirect_url . "&response_type=code&scope=snsapi_userinfo&state={$state}#wechat_redirect"; } /** * 获取token * @return [type] 返回token */ public function getSingleAccessToken($code) { $url = 'https://api.weixin.qq.com/sns/oauth2/access_token?appid=' . $this->wechat_config['appid'] . '&secret=' . $this->wechat_config['appsecret'] . '&code=' . $code . '&grant_type=authorization_code'; $Http = new Http(); $access_token = $Http->get($url); return $access_token; } /** * @explain * 通过code获取用户openid以及用户的微信号信息 * @return array|mixed * @remark * 获取到用户的openid之后可以判断用户是否有数据,可以直接跳过获取access_token,也可以继续获取access_token * access_token每日获取次数是有限制的,access_token有时间限制,可以存储到数据库7200s. 7200s后access_token失效 **/ public function getUserInfo($access_token = []) { if (!$access_token) { return [ 'code' => 0, 'msg' => '微信授权失败', ]; } $userinfo_url = 'https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token['access_token'] . '&openid=' . $access_token['openid'] . '&lang=zh_CN'; $Http = new Http(); $userinfo_json = $Http->get($userinfo_url); //获取用户的基本信息,并将用户的唯一标识保存在session中 if (!$userinfo_json) { return [ 'code' => 0, 'msg' => '获取用户信息失败!', ]; } return $userinfo_json; } }