error_reporting(E_ALL);
ini_set("display_errors", 1);
require_once 'google-api-php-client/src/Google/autoload.php';
require_once 'google-api-php-client/src/Google/Client.php';
require_once 'google-api-php-client/src/Google/Service/YouTube.php';
session_start();


/*
 * You can acquire an OAuth 2.0 client ID and client secret from the
 * Google Developers Console <https://console.developers.google.com/>
 * For more information about using OAuth 2.0 to access Google APIs, please see:
 * <https://developers.google.com/youtube/v3/guides/authentication>
 * Please ensure that you have enabled the YouTube Data API for your project.
 */

$OAUTH2_CLIENT_ID = 'XXXXXX';//AC
$OAUTH2_CLIENT_SECRET = 'XXXXXXXX';//AC

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('http://www.googleapis.com/auth/youtube');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
//print_r($client);
//exit;
// Define an object that will be used to make all API requests.
$youtube = new Google_Service_Youtube($client);
if (isset($_GET['code'])) {
  if (strval($_SESSION['state']) !== strval($_GET['state'])) {
    die('The session state did not match.');
  }
  $client->authenticate($_GET['code']);
  $_SESSION['token'] = $client->getAccessToken();
  header('Location: ' . $redirect);
}
if (isset($_SESSION['token'])) {
  $client->setAccessToken($_SESSION['token']);
}
if ($client->getAccessToken()) {
    $youtube->videos->delete( $videoid );
    //echo 'deleting...';
}else if($client->isAccessTokenExpired()) {
    $state = mt_rand();
    $client->setState($state);
    $_SESSION['state'] = $state;
    $authUrl = $client->createAuthUrl();
    header('Location: ' . filter_var($authUrl, FILTER_SANITIZE_URL));

} else {
  $state = mt_rand();
  $client->setState($state);
  $_SESSION['state'] = $state;
  $authUrl = $client->createAuthUrl();
  ?>
  <h3>Authorization Required</h3>
  <p>You need to <a href="<?php echo $authUrl;?>">authorize access</a> before proceeding.<p>

}

我已经写了上面的代码来删除我在普通PHP文件中从我的帐户上传youtube视频 . 它工作正常 . 当我在drupal中实现相同时,它给我302找到状态并终止ajax http请求 .

$element['remove_button'] = array(
  '#type' => 'button',
  '#value' => t('Remove Video'),
  '#id' => 'youtube-button-remove',
  '#attributes' => array('class' => array('youtube_video_uploader_option')),
  '#ajax' => array(
    'callback' => 'youtube_video_uploader_ajax_remove',
  ),
);

删除视频按钮我们称之为ajax回调函数 - youtube_video_uploader_ajax_remove

function youtube_video_uploader_ajax_remove($form, $form_state) {
 $node=$form['nid']['#value'];
 // $_SESSION['videoid']=$node;
 $commands[] = ajax_command_invoke("#youtube-story-id", "val", array(''));
 $commands[] = ajax_command_invoke("#youtube_preview_launcher", "html", array(''));
 youtube_video_delete_video($node);
 print ajax_render($commands);
 exit;
 }
 function youtube_video_delete_video($nid)
 {
 global $base_url;

 $video_node=node_load($nid);
 //print_r($video_node);

if($video_node->type=='child_profile_videos')
{
    $videoid=$video_node->field_child_profile_video['und'][0]['Video'];
}
if($video_node->type=='youtube_videos')
{
    $videoid=$video_node->field_video_['und'][0]['Video'];
}

if($video_node->type=='programs_videos')
{
    $videoid=$video_node->field_program_video['und'][0]['Video'];
}
$options = youtube_video_uploader_options();


error_reporting(E_ALL);
ini_set("display_errors", 1);
require_once 'google-api-php-client/src/Google/autoload.php';
require_once 'google-api-php-client/src/Google/Client.php';
require_once 'google-api-php-client/src/Google/Service/YouTube.php';
session_start();


/*
 * You can acquire an OAuth 2.0 client ID and client secret from the
 * Google Developers Console <https://console.developers.google.com/>
 * For more information about using OAuth 2.0 to access Google APIs, please see:
 * <https://developers.google.com/youtube/v3/guides/authentication>
 * Please ensure that you have enabled the YouTube Data API for your project.
 */
$OAUTH2_CLIENT_ID = 'XXXXXXX';//AC
$OAUTH2_CLIENT_SECRET = 'XXXXXXXX';//AC

$client = new Google_Client();
$client->setClientId($OAUTH2_CLIENT_ID);
$client->setClientSecret($OAUTH2_CLIENT_SECRET);
$client->setScopes('http://www.googleapis.com/auth/youtube');
$redirect = filter_var('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['PHP_SELF'], FILTER_SANITIZE_URL);
$client->setRedirectUri($redirect);
//print_r($client);
//exit;
// Define an object that will be used to make all API requests.
$youtube = new Google_Service_Youtube($client);
if (isset($_GET['code'])) {
  if (strval($_SESSION['state']) !== strval($_GET['state'])) {
    die('The session state did not match.');
  }
  $client->authenticate($_GET['code']);
  $_SESSION['token'] = $client->getAccessToken();
  header('Location: ' . $redirect);
}
if (isset($_SESSION['token'])) {
  $client->setAccessToken($_SESSION['token']);
}
if ($client->getAccessToken()) {
    $youtube->videos->delete( $videoid );
    //echo 'deleting...';
}else if($client->isAccessTokenExpired()) {
    $state = mt_rand();
    $client->setState($state);
    $_SESSION['state'] = $state;
    $authUrl = $client->createAuthUrl();
    header('Location: ' . filter_var($authUrl, FILTER_SANITIZE_URL));

} else {
  $state = mt_rand();
  $client->setState($state);
  $_SESSION['state'] = $state;
  $authUrl = $client->createAuthUrl();
  ?>
  <h3>Authorization Required</h3>
  <p>You need to <a href="<?php echo $authUrl;?>">authorize access</a> before proceeding.<p>
}

}

这是ajax回拨功能,依次调用删除视频,以便Youtube API删除视频

你可以帮我解决这个错误吗?