/** * 获取 AccessToken(从 API 获取) */ protected function _getAccessToken() { $request = Http::get(self::ACCESS_TOKEN_URL, array('query' => array('grant_type' => 'client_credential', 'appid' => $this->wechat['appid'], 'secret' => $this->wechat['appsecret']))); $response = $request->json(); if (array_key_exists('access_token', $response) && array_key_exists('expires_in', $response)) { return $response; } throw new \Exception($response['errcode'] . ': ' . $response['errmsg']); }
/** * 获取 Ticket(从 API 获取) */ protected function _getTicket($type) { $request = Http::get(self::TICKET_URL, array('query' => array('access_token' => $this->accessToken->getAccessToken(), 'type' => $type))); $response = $request->json(); if (array_key_exists('ticket', $response) && array_key_exists('expires_in', $response)) { return $response; } throw new \Exception($response['errcode'] . ': ' . $response['errmsg']); }
/** * 获取SNS用户信息 * * @return void * @author **/ public function getSnsApiUserinfo() { $access_token = $this->getAccessToken(false); if (!$access_token) { return false; } $data = $this->cache->get("niancode/wechat/auth/getSnsApiUserinfo/{$this->appid}/{$access_token->openid}"); if ($data === false) { $url = self::WECHAT_BASE_URL . "sns/userinfo?"; $params = ['lang' => 'zh_CN', 'access_token' => $access_token->access_token, 'openid' => $access_token->openid]; $url .= http_build_query($params); $request = Http::get($url); $response = $request->json(); if (array_key_exists('openid', $response)) { $res = $request->json(['object' => true]); if ($res->openid) { $data = new \stdClass(); $data->access_token = $access_token->access_token; $data->refresh_token = $access_token->refresh_token; $data->openid = $res->openid; $data->nickname = $res->nickname; $data->sex = $res->sex; $data->province = $res->province; $data->city = $res->city; $data->country = $res->country; $data->headimgurl = $res->headimgurl; $data->privilege = $res->privilege; $data->unionid = isset($res->unionid) ? $res->unionid : ''; $this->cache->set("niancode/wechat/auth/getSnsApiUserinfo/{$this->appid}/{$access_token->openid}", $data, 7000); return $data; } } } else { return $data; } }