google calendar api 错误 400 - 资源 ID 值无效

问题描述 投票:0回答:3

我想使用 Symfony 命令(批量)通过 API 在 Google 日历中插入事件。

当我插入 ID 类似于“event01487”的事件时,它会抛出以下错误:“code”:400,“message”:“无效的资源 id 值。”

这个 ID 是唯一的,因为没有插入任何事件 - 它甚至没有插入一次。该 ID 似乎符合 Google 要求...

你知道我为什么得到这个吗?

foreach($bookingsToSync as $booking){
     $event = new Google_Service_Calendar_Event();
     $event->setId($booking['id']);
     $event->setSummary($booking['title']);
     $event->setDescription($booking['description']);

     $start = new \Google_Service_Calendar_EventDateTime();
     $start->setDateTime($booking['startDate']->format(DateTime::ATOM));
     $event->setStart($start);
     $end = new \Google_Service_Calendar_EventDateTime();
     $end->setDateTime($booking['endDate']->format(DateTime::ATOM));
     $event->setEnd($end);

     $output->writeln($event->getId());

     $service->events->insert($calendarId, $event);
}
symfony google-api google-calendar-api
3个回答
6
投票

您必须遵循此处定义的指南:https://developers.google.com/google-apps/calendar/v3/reference/events/insert

基本上,ID 必须介于 5 到 1024 个字符之间,并且由以下字母表中的字符组成:0123456789abcdefghijklmnopqrstuv


2
投票

你应该将你的id编码为base32

$encoded = bin2hex( $booking['id'] );

解码

$decoded = hex2bin( $encoded );

0
投票

如果您是 Typescript/Node.js 用户

用它来十六进制转换

eventId
字符串。这是最好的方法,因为它确实保留了原始 ID 的唯一性。

 /**
   * Converts a given string to its hexadecimal representation.
   *
   * @param {string} str - The input string to be converted.
   * @return {string} The hexadecimal representation of the input string.
   */
  public static stringToHex(str: string): string {
    return str.split("")
        .map((char) => char.charCodeAt(0).toString(16).padStart(2, "0"))
        .join("");
  }
© www.soinside.com 2019 - 2024. All rights reserved.