# 企业微信服务

## 功能介绍

企业微信服务提供了企业微信的消息发送、用户管理、部门管理等功能，帮助企业在微信生态中实现内部沟通和管理。

## 核心方法

### WechatWorkService

#### getAccessToken()

获取企业微信的 access_token。

**返回值：** access_token

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 获取企业微信的 access_token
$accessToken = Wechat::work()->getAccessToken();
echo $accessToken;
```

#### sendTextMessage(array $message)

发送文本消息。

**参数：**
- `$message` - 消息配置数组

**返回值：** 操作结果

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 发送文本消息
$message = [
    'touser' => 'UserID1|UserID2|UserID3',
    'toparty' => 'PartyID1|PartyID2',
    'totag' => 'TagID1|TagID2',
    'msgtype' => 'text',
    'agentid' => 1,
    'text' => [
        'content' => 'Hello World'
    ],
    'safe' => 0
];

$result = Wechat::work()->sendTextMessage($message);
print_r($result);
```

#### sendImageMessage(array $message)

发送图片消息。

**参数：**
- `$message` - 消息配置数组

**返回值：** 操作结果

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 发送图片消息
$message = [
    'touser' => 'UserID1',
    'msgtype' => 'image',
    'agentid' => 1,
    'image' => [
        'media_id' => 'MEDIA_ID'
    ],
    'safe' => 0
];

$result = Wechat::work()->sendImageMessage($message);
print_r($result);
```

#### sendNewsMessage(array $message)

发送图文消息。

**参数：**
- `$message` - 消息配置数组

**返回值：** 操作结果

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 发送图文消息
$message = [
    'touser' => 'UserID1',
    'msgtype' => 'news',
    'agentid' => 1,
    'news' => [
        'articles' => [
            [
                'title' => '测试图文消息',
                'description' => '这是一个测试图文消息',
                'url' => 'http://www.example.com',
                'picurl' => 'http://example.com/pic.jpg'
            ]
        ]
    ],
    'safe' => 0
];

$result = Wechat::work()->sendNewsMessage($message);
print_r($result);
```

#### getUserInfo(string $userId)

获取用户信息。

**参数：**
- `$userId` - 用户的 UserID

**返回值：** 用户信息

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 获取用户信息
$userInfo = Wechat::work()->getUserInfo('zhangsan');
print_r($userInfo);
```

#### createUser(array $user)

创建用户。

**参数：**
- `$user` - 用户信息数组

**返回值：** 创建结果

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 创建用户
$user = [
    'userid' => 'zhangsan',
    'name' => '张三',
    'department' => [1],
    'mobile' => '13800138000',
    'email' => 'zhangsan@example.com',
    'position' => '产品经理'
];

$result = Wechat::work()->createUser($user);
print_r($result);
```

#### updateUser(array $user)

更新用户。

**参数：**
- `$user` - 用户信息数组

**返回值：** 更新结果

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 更新用户
$user = [
    'userid' => 'zhangsan',
    'name' => '张三',
    'position' => '高级产品经理'
];

$result = Wechat::work()->updateUser($user);
print_r($result);
```

#### deleteUser(string $userId)

删除用户。

**参数：**
- `$userId` - 用户的 UserID

**返回值：** 删除结果

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 删除用户
$result = Wechat::work()->deleteUser('zhangsan');
print_r($result);
```

#### getDepartmentList(int $id = 0)

获取部门列表。

**参数：**
- `$id` - 部门 ID，为 0 时获取全部门列表

**返回值：** 部门列表

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 获取全部门列表
$departments = Wechat::work()->getDepartmentList();
print_r($departments);

// 获取指定部门的子部门列表
$departments = Wechat::work()->getDepartmentList(1);
print_r($departments);
```

#### createDepartment(array $department)

创建部门。

**参数：**
- `$department` - 部门信息数组

**返回值：** 创建结果

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 创建部门
$department = [
    'name' => '技术部',
    'parentid' => 1,
    'order' => 1
];

$result = Wechat::work()->createDepartment($department);
print_r($result);
```

#### updateDepartment(array $department)

更新部门。

**参数：**
- `$department` - 部门信息数组

**返回值：** 更新结果

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 更新部门
$department = [
    'id' => 2,
    'name' => '研发部',
    'order' => 2
];

$result = Wechat::work()->updateDepartment($department);
print_r($result);
```

#### deleteDepartment(int $id)

删除部门。

**参数：**
- `$id` - 部门 ID

**返回值：** 删除结果

**示例：**
```php
use Kylin\Wechat\Facades\Wechat;

// 删除部门
$result = Wechat::work()->deleteDepartment(2);
print_r($result);
```

## 实际应用场景

### 1. 企业内部通知

```php
use Kylin\Wechat\Facades\Wechat;

// 发送企业内部通知
function sendInternalNotification($title, $content, $departmentId = null)
{
    $message = [
        'msgtype' => 'news',
        'agentid' => env('WECHAT_WORK_AGENT_ID'),
        'news' => [
            'articles' => [
                [
                    'title' => $title,
                    'description' => $content,
                    'url' => 'http://www.example.com',
                    'picurl' => 'http://example.com/notice.jpg'
                ]
            ]
        ],
        'safe' => 0
    ];
    
    if ($departmentId) {
        $message['toparty'] = $departmentId;
    }
    
    return Wechat::work()->sendNewsMessage($message);
}

// 调用示例
sendInternalNotification('公司通知', '全体员工请注意，明天下午2点将举行全体大会', 1);
```

### 2. 员工入职流程

```php
use Kylin\Wechat\Facades\Wechat;

// 员工入职流程
function employeeOnboarding($employeeInfo)
{
    // 创建用户
    $user = [
        'userid' => $employeeInfo['userid'],
        'name' => $employeeInfo['name'],
        'department' => [$employeeInfo['department_id']],
        'mobile' => $employeeInfo['mobile'],
        'email' => $employeeInfo['email'],
        'position' => $employeeInfo['position']
    ];
    
    $result = Wechat::work()->createUser($user);
    
    if ($result['errcode'] == 0) {
        // 发送欢迎消息
        $welcomeMessage = [
            'touser' => $employeeInfo['userid'],
            'msgtype' => 'text',
            'agentid' => env('WECHAT_WORK_AGENT_ID'),
            'text' => [
                'content' => "欢迎加入我们的团队，{$employeeInfo['name']}！"
            ],
            'safe' => 0
        ];
        
        Wechat::work()->sendTextMessage($welcomeMessage);
    }
    
    return $result;
}

// 调用示例
$employeeInfo = [
    'userid' => 'lisi',
    'name' => '李四',
    'department_id' => 2,
    'mobile' => '13900139000',
    'email' => 'lisi@example.com',
    'position' => '前端开发工程师'
];

$result = employeeOnboarding($employeeInfo);
print_r($result);
```
