Group
Extension

QQ-weixin-work/lib/QQ/weixin/work/oa/calendar.pm

package QQ::weixin::work::oa::calendar;

=encoding utf8

=head1 Name

QQ::weixin::work::oa::calendar

=head1 DESCRIPTION

日历

=cut

use strict;
use base qw(QQ::weixin::work::oa);
use Encode;
use LWP::UserAgent;
use JSON;
use utf8;

our $VERSION = '0.10';
our @EXPORT = qw/ add update get del /;

=head1 FUNCTION

=head2 add(access_token, hash);

创建日历
最后更新:2023/04/23

=head2 SYNOPSIS

L<https://developer.work.weixin.qq.com/document/path/93647>

=head3 请求说明:

该接口用于通过应用在企业内创建一个日历。

=head4 请求包结构体为:

	{
		"calendar": {
			"admins":[
					"admin1",
					"admin2"
			],
			"set_as_default": 1,
			"summary": "test_summary",
			"color": "#FF3030",
			"description": "test_describe",
			"shares": [{
					"userid": "userid2",
					"permission": 1
				},
				{
					"userid": "userid3",
					"permission": 3
				}
			],
			"is_public": 1,
			"public_range": {
				"userids": ["abel", "jack"],
				"partyids": [1232, 34353]
			},
			"is_corp_calendar": 1
		},
		"agentid": 1000014
	}

=head4 参数说明:

	参数	是否必须	说明
	calendar	是	日历信息
	admins	否	日历的管理员userid列表,管理员必须在通知范围成员的列表中。最多指定3人
	set_as_default	否	是否将该日历设置为access_token所对应应用的默认日历。
	0-否;1-是。默认为0,即不设为默认日历
	第三方应用不支持使用该参数
	summary	是	日历标题。1 ~ 128 字符
	color	是	日历在终端上显示的颜色,RGB颜色编码16进制表示,例如:"#0000FF" 表示纯蓝色
	description	否	日历描述。0 ~ 512 字符
	is_public	否	是否公共日历。0-否;1-是。注意:每个人最多可创建或订阅100个公共日历。该属性不可更新
	public_range	否	公开范围。仅当是公共日历时有效
	public_range.userids	否	公开的成员列表范围 。最多指定1000个成员
	public_range.partyids	否	公开的部门列表范围 。最多指定100个部门
	is_corp_calendar	否	是否全员日历。0-否;1-是。注意:
	1. 每个企业最多可创建20个全员日历
	2. 全员日历也是公共日历的一种,需要指定public_range
	3. 全员日历不支持指定颜色、默认日历、只读权限
	4. 该属性不可更新
	shares	否	日历通知范围成员列表。最多2000人
	shares.userid	是	日历通知范围成员的id
	shares.permission	否	日历通知范围成员权限(不填则默认为「可查看」)。
	1:可查看
	3:仅查看闲忙状态
	agentid	否	授权方安装的应用agentid。仅旧的第三方多应用套件需要填此参数

=head3 权限说明

=head3 RETURN 返回结果

	{ 
		"errcode": 0,
		"errmsg" : "ok",
		"cal_id":"wcjgewCwAAqeJcPI1d8Pwbjt7nttzAAA",
		"fail_result": {
			"shares":[{
				"errcode": 40001,
				"errmsg": "not found",
				"userid": "userid3"
			}]
		}
	}

=head3 RETURN 参数说明

	参数		说明
	errcode	错误码
	errmsg	错误码说明
	cal_id	日历ID
	fail_result	无效的输入内容
	fail_result.shares	无效的日历通知范围成员列表
	shares.errcode	错误码
	shares.errmsg	错误码说明
	shares.userid	日历通知范围成员的id

=cut

sub add {
    if ( @_ && $_[0] && ref $_[1] eq 'HASH' ) {
        my $access_token = $_[0];
        my $json = $_[1];
        my $ua = LWP::UserAgent->new;
        $ua->timeout(30);
        $ua->env_proxy;

        my $response = $ua->post("https://qyapi.weixin.qq.com/cgi-bin/oa/calendar/add?access_token=$access_token",Content => to_json($json,{allow_nonref=>1}),Content_type =>'application/json');
        if ($response->is_success) {
            return from_json($response->decoded_content,{utf8 => 1, allow_nonref => 1});
        }

    }
    return 0;
}

=head2 update(access_token, hash);

更新日历
最后更新:2023/08/31

=head2 SYNOPSIS

L<https://developer.work.weixin.qq.com/document/path/97716>

=head3 请求说明:

该接口用于修改指定日历的信息。

注意,更新操作是覆盖式,而不是增量式

=head4 请求包体:

	{
		"skip_public_range" : 0,
		"calendar": {
			"cal_id": "wcjgewCwAAqeJcPI1d8Pwbjt7nttzAAA",
			"admins":[
					"admin1",
					"admin2"
			],
			"summary": "test_summary",
			"color": "#FF3030",
			"description": "test_describe_1",
			"shares": [{
					"userid": "userid1",
					"permission": 1
				},
				{
					"userid": "userid2",
					"permission": 3
				}
			],
			"public_range": {
				"userids": ["abel", "jack"],
				"partyids": [1232, 34353]
			}
		}
	}

=head4 参数说明:

	参数		是否必须		说明
	skip_public_range	否	是否不更新可订阅范围。0-否;1-是。默认会为0,会更新可订阅范围
	calendar	是	日历信息
	cal_id	是	日历ID
	admins	否	日历的管理员userid列表。最多指定3人
	summary	是	日历标题。1 ~ 128 字符
	color	是	日历颜色,RGB颜色编码16进制表示,例如:"#0000FF" 表示纯蓝色
	description	否	日历描述。0 ~ 512 字符
	public_range	否	公开范围。仅当是公共日历时有效
	public_range.userids	否	公开的成员列表范围 。最多指定1000个成员
	public_range.partyids	否	公开的部门列表范围 。最多指定100个部门
	shares	否	日历通知范围成员列表。最多2000人
	shares.userid	是	日历通知范围成员的id
	shares.permission	否	日历通知范围成员权限(不填则默认为「可查看」)。
							1:可查看
							3:仅查看闲忙状态

=head3 权限说明

注意, 不可更新组织者。

=head3 RETURN 返回结果

	{ 
		"errcode": 0,
		"errmsg" : "ok",
		"fail_result": {
			"shares":[{
				"errcode": 40001,
				"errmsg": "not found",
				"userid": "userid3"
			}]
		}
	}

=head3 RETURN 参数说明

	参数		说明
	errcode	错误码
	errmsg	错误码说明
	fail_result	无效的输入内容
	fail_result.shares	无效的日历通知范围成员列表
	shares.errcode	错误码
	shares.errmsg	错误码说明
	shares.userid	日历通知范围成员的id

=cut

sub update {
    if ( @_ && $_[0] && ref $_[1] eq 'HASH' ) {
        my $access_token = $_[0];
        my $json = $_[1];
        my $ua = LWP::UserAgent->new;
        $ua->timeout(30);
        $ua->env_proxy;

        my $response = $ua->post("https://qyapi.weixin.qq.com/cgi-bin/oa/calendar/update?access_token=$access_token",Content => to_json($json,{allow_nonref=>1}),Content_type =>'application/json');
        if ($response->is_success) {
            return from_json($response->decoded_content,{utf8 => 1, allow_nonref => 1});
        }

    }
    return 0;
}

=head2 get(access_token, hash);

获取日历详情
最后更新:2023/04/11

=head2 SYNOPSIS

L<https://developer.work.weixin.qq.com/document/path/97717>

=head3 请求说明:

该接口用于获取应用在企业内创建的日历信息。

=head4 请求包结构体为:

    {
    	"cal_id_list": ["wcjgewCwAAqeJcPI1d8Pwbjt7nttzAAA"]
    }

=head4 参数说明:

	参数	            必须	说明
    access_token	是	调用接口凭证
    cal_id_list	是	日历ID列表,调用创建日历接口后获得。一次最多可获取1000条

=head3 权限说明

=head3 RETURN 返回结果

	{
		"errcode": 0,
		"errmsg": "ok",
		"calendar_list": [{
			"cal_id": "wcjgewCwAAqeJcPI1d8Pwbjt7nttzAAA",
			"adminis":[
					"admin1",
					"admin2",
			],
			"summary": "test_summary",
			"color": "#FF3030",
			"description": "test_describe_1",
			"shares": [{
					"userid": "userid2",
					"permission": 1
				},
				{
					"userid": "userid1",
					"permission": 3
				}
			],
			"is_public": 1,
			"public_range": {
				"userids": ["abel", "jack"],
				"partyids": [1232, 34353]
			},
			"is_corp_calendar": 1
		}]
	}

=head3 RETURN 参数说明

	参数	    说明
    errcode	错误码
	errmsg	错误码说明
	calendar_list	日历列表
	cal_id	日历ID
	admins	日历的管理员userid列表
	summary	日历标题。1 ~ 128 字符
	color	日历颜色,RGB颜色编码16进制表示,例如:"#0000FF" 表示纯蓝色
	description	日历描述。0 ~ 512 字符
	is_public	是否公共日历。0-否;1-是
	public_range	公开范围。仅当是公共日历时有效
	public_range.userids	公开的成员列表范围
	public_range.partyids	公开的部门列表范围
	is_corp_calendar	是否全员日历。0-否;1-是
	shares	日历通知范围成员列表。最多2000人
	shares.userid	日历通知范围成员的id
	shares.permission	日历通知范围成员权限。
						1:可查看
						3:仅查看闲忙状态

=cut

sub get {
    if ( @_ && $_[0] && ref $_[1] eq 'HASH' ) {
        my $access_token = $_[0];
        my $json = $_[1];
        my $ua = LWP::UserAgent->new;
        $ua->timeout(30);
        $ua->env_proxy;

        my $response = $ua->post("https://qyapi.weixin.qq.com/cgi-bin/oa/calendar/get?access_token=$access_token",Content => to_json($json,{allow_nonref=>1}),Content_type =>'application/json');
        if ($response->is_success) {
            return from_json($response->decoded_content,{utf8 => 1, allow_nonref => 1});
        }

    }
    return 0;
}

=head2 del(access_token, hash);

删除日历
最后更新:2022/12/01

=head2 SYNOPSIS

L<https://developer.work.weixin.qq.com/document/path/97718>

=head3 请求说明:

该接口用于删除指定日历。

=head4 请求包体:

    {
    	"cal_id":"wcjgewCwAAqeJcPI1d8Pwbjt7nttzAAA"
    }

=head4 参数说明:

	参数	            必须	说明
    access_token	是	调用接口凭证
    cal_id	是	日历ID

=head3 权限说明

=head3 RETURN 返回结果

    {
        "errcode": 0,
        "errmsg": "ok"
    }

=head3 RETURN 参数说明

	参数	    说明
    errcode	错误码
	errmsg	错误码说明

=cut

sub del {
    if ( @_ && $_[0] && ref $_[1] eq 'HASH' ) {
        my $access_token = $_[0];
        my $json = $_[1];
        my $ua = LWP::UserAgent->new;
        $ua->timeout(30);
        $ua->env_proxy;

        my $response = $ua->post("https://qyapi.weixin.qq.com/cgi-bin/oa/calendar/del?access_token=$access_token",Content => to_json($json,{allow_nonref=>1}),Content_type =>'application/json');
        if ($response->is_success) {
            return from_json($response->decoded_content,{utf8 => 1, allow_nonref => 1});
        }

    }
    return 0;
}


1;
__END__


Powered by Groonga
Maintained by Kenichi Ishigaki <ishigaki@cpan.org>. If you find anything, submit it on GitHub.