POST-обновление данных в EventBrite API с помощью Guzzle

Я могу добавить События, используя сообщение со следующим кодом:

//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"
    ]
  ]
}

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("StackruTest",       "##########################");

$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
]);

Надеюсь, это работает!

Другие вопросы по тегам