Как вы ссылаетесь на объект класса, который создается в одном файле php в другом файле php, называемом через ajax?
У меня есть проект, который использует API Tumblr для создания постов в блоге
Есть 2 файла: tumblr.php
а также ajaxTumblr.php
В tumblr.php
создается объект Tumblr:
include_once ("Tumblr/API/Client.php");
include_once ("Tumblr/API/RequestException.php");
include_once ("Tumblr/API/RequestHandler.php");
$consumerKey = "xxxxxx";
$consumerSecret = "xxxxxx";
$client = new Tumblr\API\Client($consumerKey, $consumerSecret);
$requestHandler = $client->getRequestHandler();
$requestHandler->setBaseUrl('https://www.tumblr.com/');
Затем он проходит последовательность oauth и заканчивается $client
полностью заполнен токеном доступа & token_secret. Я опустил код для этого, так как он, вероятно, не актуален.
Теперь пользователь подтвержден, и я могу делать такие вещи, как отображение информации о пользователе
$info = $client->getUserInfo();
Или даже сделать пост с некоторыми предустановленными данными.
$postData = array('title' => $title, 'body' => $body, 'format' => $format);
$client->createPost($userid, $postData);
Все идет нормально.
Теперь я собираю данные от пользователя (название & текст блога) через textareas и отправьте запрос ajax на ajaxTumblr.php
с этой информацией
$.ajax({
url: 'http://domain.com/ajaxTumblr.php',
type:'POST',
async: "false",
data: {'title': title,
'body': body,
'userid': userid,
'state': "draft",
'format': "html" },
success: function (res) {
console.log (res);
}
});
Вот где я застрял.
Как мы передаем, ссылки или воссоздать $client
в файле php ajax? Я не могу сгенерировать новый объект Tumblr, так как он требует авторизации пользователя.
Я хотел бы, чтобы мой код выполнял что-то вроде:
$title = $_REQUEST['title'];
$body = $_REQUEST['body'];
$format = $_REQUEST['format'];
$userid = $_REQUEST['userid'];
$postData = array('title' => $title, 'body' => $body, 'format' => $format);
$client->createPost($userid, $postData);
Благодарю.
Обновить
В Tumblr.php
, Я сохранил $client
:
$_SESSION['client'] = serialize($client);
А потом в ajaxTumblr.php
создал новый объект и скопировал исходный объект на новый. Это нормально делать?
include_once ("Tumblr/API/Client.php");
include_once ("Tumblr/API/RequestException.php");
include_once ("Tumblr/API/RequestHandler.php");
// OAuth Consumer Key:
$consumerKey = "xxxxxxx";
$consumerSecret = "xxxxxxxx";
$ajaxClient = new Tumblr\API\Client($consumerKey, $consumerSecret);
$client = unserialize($_SESSION['client']);
$ajaxClient = $client;
Когда я перезапустил тест, из одного из модулей класса были выданы тысячи ошибок с жалобами на неверные параметры. Возможно, я на правильном пути, но мне нужна конформация.
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_add_handle() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 181
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_exec() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 238
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_info_read() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 254
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_exec() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 238
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_info_read() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 254
[04-Oct-2015 14:46:27 America/Chicago] PHP Warning: curl_multi_exec() expects parameter 1 to be resource, integer given in /home3/me/vendor/guzzle/guzzle/src/Guzzle/Http/Curl/CurlMulti.php on line 238
В настройках приложения Tumblr запрашивается «URL обратного вызова по умолчанию». Это установлено на "tumblr.php"
, поэтому приложение может выполнять действия по аутентификации.
Проблема, казалось, возникла, когда ajaxTumblr.php
пытается выполнить вызовы API. Обратный вызов не равен вызывающему модулю.
Кроме того, было небольшое расхождение между $client
а также $ajaxClient
объекты. В одном из элементов был нулевой ресурс, что привело к ошибкам, показанным выше.
С этими проблемами, сдерживающими меня, я решил бросить ajaxTumblr.php
и URL в точке вызова AJAX tumblr.php
(т.е. сам) и добавил некоторую логику вверху, чтобы определить, является ли это $_POST
запрос.
В результате $client
объект идентичен, и мне удалось получить приложение для публикации в моем блоге Tumblr.
Вот фрагмент кода, который я добавил в tumblr.php
if (isset($_POST['blogTitle'])){
$token = $_SESSION['token'] ;
$secret = $_SESSION['secret'] ;
$client = new Tumblr\API\Client($consumerKey, $consumerSecret, $token, $secret);
$blogName = $_POST['blogName'];
$blogTitle = $_POST['blogTitle'];
$blogBody = $_POST['blogBody'];
<snip>
$postData = array('title' => $blogTitle, 'body' => $blogBody, 'format' => $format, 'state' => $state );
$res = $client->createPost($blogName, $postData);
exit;
}
Других решений пока нет …