Я достиг своего разочарования и прошу помощи. Я провела все выходные, изучая новые вещи, чтобы попытаться выяснить, как использовать API-интерфейсы плагинов goolge, которые требуют аутентификации через Oauth 2.0. Я начал развиваться в php исключительно потому, что смог найти несколько примеров, которые помогли мне преодолеть путь. До того, как несколько дней назад я знал очень мало в этой области, и если вам интересно, почему я попробовал определенный подход в моем коде ниже, а не какой-то другой подход, простой ответ заключается в том, что это все, что я нашел.Неверные учетные данные Ошибка при передаче Oauth 2.0 Access Token to Fusion Tables API в PHP
Я смог успешно разработать страницу, которая запрашивала бы ответ кода от Google для доступа к моему личному профилю. Я также смог успешно разработать страницу, расположенную в требуемом месте перенаправления, который будет принимать этот код, передать его обратно в Google и запросить токен доступа и токен обновления, которые были успешно записаны в файл в защищенном паролем каталоге на моем веб-сайте , Я также смог успешно разработать страницу, которая будет передавать токен обновления в google и получать обновленный токен доступа и записывать его в файл, если это необходимо. Все это было сделано на php.
Теперь моя основная цель заключается в том, чтобы писать стили таблицы фьюжн в новые таблицы слияния. В настоящее время в моей учетной записи google docs есть несколько полностью разработанных таблиц слияния (наряду с правильным стилем). Я также загрузил тестовую таблицу слияния, которая имеет полностью разработанные данные, но еще не разработана. Я пытался просто написать код, который бы получил стиль из существующего полностью развитого FT и написал тот же стиль в этот тест FT.
Я смог успешно получить объект JSON стиля из существующего FT и изменить этот объект JSON таким образом, чтобы его свойство идентификатора таблицы было заменено на тест FT, чтобы объект JSON мог быть передан обратно в тестовый FT и написанных в стилях.
Однако, когда я пытаюсь передать данные моделирования в Google для обновления теста FT через POST, я получаю сообщение об ошибке «{" error ": {" errors ": [{" domain ":" global »,« reason »:« authError »,« message »:« Invalid Credentials »,« locationType »:« header »,« location »:« Authorization »}],« code »: 401,« message »:« Invalid Credentials "}}"
Возможно, что я неправильно форматировал POST. Тем не менее, я не делаю ничего необычного (до сих пор) с токеном доступа. Я просто сделал запрос, получил его из Google и скопировал и ввел его непосредственно в код, чтобы не было проблем с назначением переменных и/или таймингами.
Вот мой код для того, что я надеялся быть довольно простым процессом, с некоторыми важными элементами данных, отредактированными, но описанными. Пожалуйста, предложите предложения, если сможете.
<html>
<head>
<title>Google Fusion Tables API Example</title>
</head>
<body>
<?php
//table id of the FT that has fully developed styling.
$strTableID = '1r8CRtGalQ3vC0zd_xmsChzjALlriiV5UDYFVOJU';
//prepare your cURL request for GET of FT styling data from existing table. Initialize it, set the options and then execute it.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://www.googleapis.com/fusiontables/v1/tables/'.$strTableID.'/styles/1?&key=redactedKey');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
//print result to see if it works (it works)
echo "<br> Result: $result";
//the result returns as a JSON object. Decode the object into a standard array, then display the individual elements of the array to see that it worked.
$jsonResult = json_decode($result,true);
echo "<br><br> JSON Result: ".$jsonResult['polygonOptions']['fillColorStyler']['columnName'];
echo "<br> Table ID: ".$jsonResult['tableId'];
//update the tableID and the bound column
//this is the table id of the test FT
$strTableID = '1CnecsDL67YHjBzSmfLjODRWxHDuC39frZEaTEKQ';
$jsonResult['tableId'] = $strTableID;
$jsonResult['polygonOptions']['fillColorStyler']['columnName'] = 'redacted column name';
//print out the updated new JSON elements to see that they were properly applied (works)
echo "<br><br> JSON Result: ".$jsonResult['polygonOptions']['fillColorStyler']['columnName'];
echo "<br> Table ID: ".$jsonResult['tableId'];
//Re-encode the array into a JSON object
$jsonWrite = json_encode($jsonResult);
$postField = 'access_token=redactedAccessToken in the form of ya29.AHE...Rdw';
//set your header type so that Google knows what type of data it is receiving
$arrHeader = array('Content-Type'=>'application/json');
$url = "https://www.googleapis.com/fusiontables/v1/tables/".$strTableID."/styles";
//prepare your cURL request. Initialize it, set the options and then execute it.
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HTTPHEADER, $arrHeader);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postField.'&'.$jsonWrite);
$result = curl_exec($ch);
curl_close($ch);
//print out the response to see if it worked (doesn't work)
echo "<br><br>Post Result: $result";
?>
</body>
</html>
Я также попробовал один альтернативный метод. Я пытался поставить маркер доступа в заголовок POST как таковой:
$arrHeader = array('Content-Type'=>'application/json', 'access_token'=>'redactedAccessToken in the form of ya29.AHE...Rdw');
А потом упрощая параметры сообщения поля, как, например:
curl_setopt($ch, CURLOPT_POSTFIELDS, $jsonWrite);
Это возвращает другую ошибку: «{» error ": {" errors ": [{" domain ":" global "," reason ":" required "," message ":" Login Required "," locationType ":" header "," location ":" Authorization " }], «code»: 401, «message»: «Login Required»}} «
Просьба оказать любую помощь, если сможете. Спасибо за ваше время.
Спасибо, Кэтрин. Вы всегда так щедры с своим временем и своим опытом, и это очень ценится. –
Я использовал второе предложение Кэтрин успешно. Мне пришлось сделать еще одно изменение, чтобы заставить его работать, но мне пришлось изменить: значение моего массива заголовков из пары значений в одну строку. (Я вынул «=>» и просто сделал заголовок одной строкой с двоеточием в середине). Еще раз спасибо. –