title: I am using php for uploading video on youtube. how do i get access code for it?
body: <p>I am using php for uploading video on youtube. how do i get access code for it? I am using following code. It gives me response as response_uri not match
  $OAUTH2_CLIENT_ID = 'my_client_key';</p>
  
  <pre><code>    $OAUTH2_CLIENT_SECRET = 'my_client_secret';
  
      $client = new Google_Client();
      $client-&gt;setClientId($OAUTH2_CLIENT_ID);
      $client-&gt;setClientSecret($OAUTH2_CLIENT_SECRET);
      $client-&gt;setScopes('https://www.googleapis.com/auth/youtube');
      $redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'],
          FILTER_SANITIZE_URL);
      $client-&gt;setRedirectUri($redirect);
  
      // Define an object that will be used to make all API requests.
      $youtube = new Google_Service($client);
      if (isset($_GET['code'])) {
        if (strval($_SESSION['state']) !== strval($_GET['state'])) {
          die('The session state did not match.');
        }
  
        $client-&gt;authenticate($key);
        print_r($client-&gt;authenticate($_GET['code']));die;
        $_SESSION['token'] = $client-&gt;getAccessToken();
        $redirect.="?r=site/UploadYoutubeVideo";
        header('Location: ' . $redirect);
      }
  
      if (isset($_SESSION['token'])) {
        $client-&gt;setAccessToken($_SESSION['token']);
      }
  
      // Check to ensure that the access token was successfully acquired.
      if ($client-&gt;getAccessToken()) {
        try{
          // REPLACE this value with the path to the file you are uploading.
          $videoPath = "images/video.mp4";
  
          // Create a snippet with title, description, tags and category ID
          // Create an asset resource and set its snippet metadata and type.
          // This example sets the video's title, description, keyword tags, and
          // video category.
          $snippet = new Google_Service_YouTube_VideoSnippet();
          $snippet-&gt;setTitle("Test title");
          $snippet-&gt;setDescription("Test description");
          $snippet-&gt;setTags(array("tag1", "tag2"));
  
          // Numeric video category. See
          // https://developers.google.com/youtube/v3/docs/videoCategories/list 
          $snippet-&gt;setCategoryId("22");
  
          // Set the video's status to "public". Valid statuses are "public",
          // "private" and "unlisted".
          $status = new Google_Service_YouTube_VideoStatus();
          $status-&gt;privacyStatus = "public";
  
          // Associate the snippet and status objects with a new video resource.
          $video = new Google_Service_YouTube_Video();
          $video-&gt;setSnippet($snippet);
          $video-&gt;setStatus($status);
  
          // Specify the size of each chunk of data, in bytes. Set a higher value for
          // reliable connection as fewer chunks lead to faster uploads. Set a lower
          // value for better recovery on less reliable connections.
          $chunkSizeBytes = 1 * 1024 * 1024;
  
          // Setting the defer flag to true tells the client to return a request which can be called
          // with -&gt;execute(); instead of making the API call immediately.
          $client-&gt;setDefer(true);
  
          // Create a request for the API's videos.insert method to create and upload the video.
          $insertRequest = $youtube-&gt;videos-&gt;insert("status,snippet", $video);
  
          // Create a MediaFileUpload object for resumable uploads.
          $media = new Google_Http_MediaFileUpload(
              $client,
              $insertRequest,
              'video/*',
              null,
              true,
              $chunkSizeBytes
          );
          $media-&gt;setFileSize(filesize($videoPath));
  
  
          // Read the media file and upload it chunk by chunk.
          $status = false;
          $handle = fopen($videoPath, "rb");
          while (!$status &amp;&amp; !feof($handle)) {
            $chunk = fread($handle, $chunkSizeBytes);
            $status = $media-&gt;nextChunk($chunk);
          }
  
          fclose($handle);
  
          // If you want to make other calls after the file upload, set setDefer back to false
          $client-&gt;setDefer(false);
  
  
          $htmlBody .= "&lt;h3&gt;Video Uploaded&lt;/h3&gt;&lt;ul&gt;";
          $htmlBody .= sprintf('&lt;li&gt;%s (%s)&lt;/li&gt;',
              $status['snippet']['title'],
              $status['id']);
  
          $htmlBody .= '&lt;/ul&gt;';
          print_r($htmlBody);
  
        } catch (Google_Service_Exception $e) {
          $htmlBody .= sprintf('&lt;p&gt;A service error occurred: &lt;code&gt;%s&lt;/code&gt;&lt;/p&gt;',
              htmlspecialchars($e-&gt;getMessage()));
        } catch (Google_Exception $e) {
          $htmlBody .= sprintf('&lt;p&gt;An client error occurred: &lt;code&gt;%s&lt;/code&gt;&lt;/p&gt;',
              htmlspecialchars($e-&gt;getMessage()));
        }
  
        $_SESSION['token'] = $client-&gt;getAccessToken();
      } else {
        // If the user hasn't authorized the app, initiate the OAuth flow
        $state = mt_rand();
        $client-&gt;setState($state);
        $_SESSION['state'] = $state;
  
        $authUrl = $client-&gt;createAuthUrl();
        $htmlBody = "END
        &lt;h3&gt;Authorization Required&lt;/h3&gt;
        &lt;p&gt;You need to &lt;a href=".$authUrl."&gt;authorize access&lt;/a&gt; before proceeding.&lt;p&gt;
      END";
          print_r($htmlBody);
      }
  </code></pre>