Sabre.io Baikal REST API



我已经使用https://sabre.io/baikal/设置了一个CardDav服务器。它的工作如预期的那样,但我现在想用Laravel创建一个自定义CRM,它可以将联系人发布到地址簿。

是否有人知道如果Baikal有自己的REST API,我可以使用它来发送POST/PUT请求来创建新的联系人?我在Github问题https://github.com/sabre-io/Baikal/issues/4中遇到了这个问题,这是在2014年发布的,在查看了Baikal2之后,它现在已经存档了。

如果Baikal没有自己的REST API,你有什么建议我如何设置CardDav服务器与自己的REST API,以便我创建和列出所有的地址簿联系人在外部CRM?

我用贝加尔湖。我喜欢它。实际上,它使用起来相对简单,你只需要掌握它的窍门。所以你需要花时间来摆弄它,在上面进行试验和错误。

我认为大部分项目已经存档了,因为主开发者@evert已经离开了。但他创造了一个伟大的CALDAV/CARDDAV。@ByteHamster仍然在看它,我相信他做出了贡献,或者至少在git上提供了尽可能多的帮助来回答问题。没有带有JSON有效负载的传统REST,但是一旦您理解了XML,就可以将其分解并构建JSON响应。我照做了,看起来效果不错。我现在就是找不到。

我没有机会冒险进入CARDDAV,但是一旦baikal作为子域安装,或者无论你想怎么做,子域是推荐的,你可以在PHP中通过curl调用你需要的端点来接收XML响应。

请注意,这是一个混乱和脱离上下文。我也从来没有时间为了提高效率或使它美观,抱歉。但希望它能给你线索。在终端上使用curl

练习调用
use SabreVObject;  //this is to use the vobjects
use SabreDAVClient;
require_once( str_replace( 'classes', '',  __DIR__ . '/baikal/vendor/autoload.php') );
class ical{
public function getVTODOS($model, $cnx){
/*
*   getVEVENTS and getVTODOS are practically the same, deprecate this to make only one call dumbass
*/
//array(3) { ["datestamp"]=> string(10) "2021-07-27" ["start"]=> string(8) "20210401" ["end"]=> string(9) "20220731 " }
$ical = new ical;
$accounts = $ical->authenticate($cnx);
if(!empty($accounts['accounts'])){
if(isset($model['start']) && isset($model['end'])){
$start = date('Ymd', strtotime($model['start'])) . 'T000000Z';
$end = date('Ymd', strtotime($model['end'])) . 'T000000Z';
}else{
//  use $date and strtotime() to get last year and next year, date format ex. 20171214T000000Z
//  date('Ymd', strtotime($datestamp . '- 1 year'));  //ex. present year 2017
$start = date('Ymd', strtotime($datestamp . '- 1 year')) . 'T000000Z';//ex. 20161213T000000Z
$end = date('Ymd', strtotime($datestamp . '+ 1 year')) . 'T000000Z';//ex. 20181213T000000Z
}
$request = '<?xml version="1.0" encoding="UTF-8" ?>
<L:calendar-query xmlns:L="urn:ietf:params:xml:ns:caldav">
<D:prop xmlns:D="DAV:">
<D:getcontenttype/>
<D:resourcetype/>
<D:getetag/>
<L:calendar-data/>
</D:prop>
<L:filter>
<L:comp-filter name="VCALENDAR"><L:comp-filter name="VTODO">
<L:time-range start="'.$start.'" end="'.$end.'"/>
</L:comp-filter>
</L:comp-filter>
</L:filter>
</L:calendar-query>';
$headers = array(
'Content-Type: text/xml; charset=utf-8',
'Depth:1',
);
//$url = 'https://cal.domain.ca/cal.php/calendars/' . $user['caldav-username'] . '/default/';
$url = CALDAV . '/cal.php/calendars/' . $user['caldav-username'] . '/default/';
$userpwd = $user['caldav-username'] . ':' . $user['caldav-password'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, $userpwd);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'REPORT');
curl_setopt($ch, CURLOPT_POSTFIELDS, $request);
return curl_exec($ch);
curl_close($ch);
}//public function getVTODOS($model, $cnx, $datestamp)
}else{
$response = null;
}//if(!empty($accounts['accounts']))
}//ical

相关内容

  • 没有找到相关文章

最新更新