Я могу добавить События, используя сообщение со следующим кодом:
//Create client
$client = new Client([
'base_uri' => 'https://www.eventbriteapi.com/v3/',
]);
$params = [
'event.name.html' => $this->Name,
'event.description.html' => $this->Description,
'event.listed' => false,
'event.start.utc' => $this->StartTime,
'event.start.timezone' => 'Europe/London',
'event.end.utc' => $this->EndTime,
'event.end.timezone' => 'Europe/London',
'event.currency' => 'GBP'
];
try {
//Send new event request
$res = $client->request('POST', "events/", [
'query' => ['token' => env('EVENTBRITE_TOKEN', '')],
'form_params' => $params
]);
} catch (GuzzleException $e) {
return false;
}
Однако, когда я пытаюсь обновить событие, используя идентификатор, созданный на первом этапе, и следующий код:
//Send update event request
$res = $client->request('POST', "events/$this->EventBriteID", [
'query' => ['token' => env('EVENTBRITE_TOKEN', '')],
'form_params' => $params
]);
Это не обновляет событие. Запрос выглядит успешным. Статус 200 возвращается долго с объектом события, однако ни одна из данных не обновляется. Информация остается той же, что была отправлена при создании события. Что я делаю не так, мне трудно отлаживать, потому что конечная точка возвращает статус 200.
Запрос работает в Почтальоне, поэтому я явно делаю что-то не так в Guzzle.
РЕДАКТИРОВАТЬ
Как и запрашиваемый вывод $ response-> request ()
Client {#289 ▼
-config: array:8 [▼
"base_uri" => Uri {#298 ▼
-scheme: "https"-userInfo: ""-host: "www.eventbriteapi.com"-port: null
-path: "/v3/"-query: ""-fragment: ""}
"handler" => HandlerStack {#165 ▼
-handler: StreamHandler {#292 ▼
-lastHeaders: []
}
-stack: array:4 [▼
0 => array:2 [▼
0 => Closure {#293 ▼
class: "GuzzleHttp\Middleware"parameters: {▼
$handler: {▼
typeHint: "callable"}
}
file: "/home/user/mysite/vendor/guzzlehttp/guzzle/src/Middleware.php"line: "54 to 69"}
1 => "http_errors"]
1 => array:2 [▼
0 => Closure {#296 ▼
class: "GuzzleHttp\Middleware"parameters: {▼
$handler: {▼
typeHint: "callable"}
}
file: "/home/user/mysite/vendor/guzzlehttp/guzzle/src/Middleware.php"line: "148 to 150"}
1 => "allow_redirects"]
2 => array:2 [▼
0 => Closure {#295 ▼
class: "GuzzleHttp\Middleware"parameters: {▼
$handler: {▼
typeHint: "callable"}
}
file: "/home/user/mysite/vendor/guzzlehttp/guzzle/src/Middleware.php"line: "27 to 43"}
1 => "cookies"]
3 => array:2 [▼
0 => Closure {#286 ▼
class: "GuzzleHttp\Middleware"parameters: {▼
$handler: {▼
typeHint: "callable"}
}
file: "/home/user/mysite/vendor/guzzlehttp/guzzle/src/Middleware.php"line: "216 to 218"}
1 => "prepare_body"]
]
-cached: null
}
"allow_redirects" => array:5 [▼
"max" => 5
"protocols" => array:2 [▼
0 => "http"1 => "https"]
"strict" => false
"referer" => false
"track_redirects" => false
]
"http_errors" => true
"decode_content" => true
"verify" => true
"cookies" => false
"headers" => array:1 [▼
"User-Agent" => "GuzzleHttp/6.2.1 PHP/7.0.8-0ubuntu0.16.04.3"]
]
}
Так что после многих часов отчаяния я наконец исправил это. Проблема заключалась в отсутствии косой черты в URL конечной точки:
$res = $client->request('POST', "events/$this->EventBriteID", []);
изменился на
$res = $client->request('POST', "events/$this->EventBriteID/", []);
Теперь работает как положено.
Хороший способ проверить свой токен и параметры — перейти к RapidAPI здесь. Я связал вас непосредственно с конечной точкой updateEvent EventbriteAPI. Вы должны пойти дальше и заполнить параметры и свой токен в форме и нажать «Тест». Вы должны увидеть подробный ответ JSON. Вот быстрый пример:
Если все выглядит так, как будто все работает правильно, нажмите CODE прямо над ответом на панели инструментов, зарегистрируйтесь, выберите PHP из выпадающего списка, и RapidAPI предоставит фрагмент кода php, который вы можете просто скопировать и вставить непосредственно в код, чтобы сделать Вызов API. Вот пример фрагмента кода PHP, который RapidAPI предоставит:
require __DIR__ . '/vendor/autoload.php';
use RapidApi\rapidApiConnect;
$rapid = new RapidApiConnect("StackOverflowTest", "##########################");
$result = $rapid->call('EventbriteAPI', 'updateEvent', [
'token' => '####################',
'eventId' => '31082267900',
'eventName' => 'Ghost Tour Test',
'eventStartUtc' => '2017-02-20T03:00:00Z',
'eventStartTimezone' => 'America/Los_Angeles',
'eventEndUtc' => '2017-02-20T06:00:00Z',
'eventEndTimezone' => 'America/Los_Angeles',
'eventCurrency' => 'USD',
'eventDescription' => ''
]);
Надеюсь это поможет!
Скорее всего, вы должны использовать body
вариант запроса для жрет, а не form_params
, С помощью form_params
за запрос вышлю application/x-www-form-urlencoded
данные, которые обычно не что ожидают современные API. В случае Eventbrite, я полагаю, что ожидается регулярный form-data
закодированный запрос.
Измените ваш запрос на жадность:
$res = $client->request('POST', "events/$this->EventBriteID", [
'query' => ['token' => env('EVENTBRITE_TOKEN', '')],
'body' => $params
]);
Надеюсь, это работает!