/** * download a media * @param string $filename - file for downloading to * @param string $mediaId - mediaId of file * @param bool $https(optional default true) - if downloading video-type file, * set $https to false for http request * @return int - filesize of the media or string - json for error message(if error) */ public function download($filename, $mediaId, $https = true) { if ($https) { $client = new HttpClient("https://api.weixin.qq.com/cgi-bin/media/get?access_token={$this->access_token}&media_id={$mediaId}"); } else { $client = new HttpClient("http://api.weixin.qq.com/cgi-bin/media/get?access_token={$this->access_token}&media_id={$mediaId}"); } $client->get(); if ($client->getState() == 200) { if (!is_null(json_decode($client->getResponse()))) { //data of json format(error here) return $client->getResponse(); } else { file_put_contents($filename, $client->getResponse()); return filesize($filename); } } else { return false; } }
/** * call an api endpoint. automatically adds needed authorization headers with access token or parameters * * @param string $endpoint * @param string $method default 'GET' * @param array $uriParameters optional * @param mixed $postBody optional, can be string or array * @param array $additionalHeaders * @return string */ public function callApiEndpoint($endpoint, $method = 'GET', array $uriParameters = array(), $postBody = null, array $additionalHeaders = array()) { $token = $this->_dataStore->retrieveAccessToken(); //check if token is invalid if ($token->getLifeTime() && $token->getLifeTime() < time()) { $token = $this->refreshAccessToken($token); } $parameters = null; $authorizationMethod = $this->_configuration->getAuthorizationMethod(); switch ($authorizationMethod) { case Service\Configuration::AUTHORIZATION_METHOD_HEADER: $additionalHeaders = array_merge(array('Authorization: OAuth ' . $token->getAccessToken()), $additionalHeaders); break; case Service\Configuration::AUTHORIZATION_METHOD_ALTERNATIVE: if ($method !== 'GET') { if (is_array($postBody)) { $postBody['oauth_token'] = $token->getAccessToken(); } else { $postBody .= '&oauth_token=' . urlencode($token->getAccessToken()); } } else { $uriParameters['oauth_token'] = $token->getAccessToken(); } break; default: throw new Exception("Invalid authorization method specified"); break; } if ($method !== 'GET') { if (is_array($postBody)) { $parameters = http_build_query($postBody); } else { $parameters = $postBody; } } if (!empty($uriParameters)) { $endpoint .= (strpos($endpoint, '?') !== false ? '&' : '?') . http_build_query($uriParameters); } $http = new HttpClient($endpoint, $method, $parameters, $additionalHeaders); $http->execute(); return $http->getResponse(); }