# Webhooks Module for Perfex CRM
## 项目概述
- **项目类型**:Perfex CRM插件模块
- **主要功能**:
- 为Perfex CRM提供Webhook集成功能
- 支持多种CRM事件的实时通知
- 与第三方服务自动同步数据
- 支持自定义Webhook端点配置
- 支持多种HTTP请求方法
- JWT身份验证支持
- **技术栈**:
- PHP
- CodeIgniter 3/4(基于Perfex CRM框架)
- rmccue/requests库 (HTTP请求)
- firebase/php-jwt (JWT认证)
- MySQL数据库
## 模块结构
```
webhooks/
├── assets/ # 静态资源文件
├── config/ # 配置文件
├── controllers/ # 控制器
├── core/ # 核心类库
├── helpers/ # 辅助函数
├── includes/ # 包含文件
│ ├── assets.php # 资源加载
│ ├── sidebar_menu_links.php # 侧边栏菜单
│ └── staff_permissions.php # 权限配置
├── language/ # 语言文件
├── libraries/ # 类库
├── migrations/ # 数据库迁移
├── models/ # 数据模型
├── resources/ # 资源文件
├── third_party/ # 第三方库
├── vendor/ # Composer依赖
├── views/ # 视图模板
├── composer.json # Composer配置
├── composer.lock # 依赖锁定
├── install.php # 安装脚本
└── webhooks.php # 模块入口文件
```
## 核心业务逻辑
### 1. 支持的Webhook事件
#### 1.1 客户相关事件
- `client/add` - 新增客户
- `client/edit` - 编辑客户
- `client/delete` - 删除客户
#### 1.2 联系人相关事件
- `contact/add` - 新增联系人
- `contact/edit` - 编辑联系人
- `contact/delete` - 删除联系人
#### 1.3 线索相关事件
- `leads/add` - 新增线索
- `leads/status_change` - 线索状态变更
- `leads/delete` - 删除线索
#### 1.4 发票相关事件
- `invoice/add` - 新增发票
- `invoice/edit` - 编辑发票
- `invoice/delete` - 删除发票
- `invoice/recurring_create` - 创建周期性发票
#### 1.5 任务相关事件
- `tasks/add` - 新增任务
- `tasks/edit` - 编辑任务
#### 1.6 项目相关事件
- `projects/add` - 新增项目
- `projects/edit` - 编辑项目
- `projects/delete` - 删除项目
#### 1.7 提案相关事件
- `proposals/add` - 新增提案
- `proposals/edit` - 编辑提案
- `proposals/delete` - 删除提案
#### 1.8 估算相关事件
- `estimates/add` - 新增估算
- `estimates/edit` - 编辑估算
- `estimates/delete` - 删除估算
### 2. Webhook触发机制
```php
// 示例:客户创建时触发Webhook
hooks()->add_action('contact_created', 'wbhk_contact_added_hook');
function wbhk_contact_added_hook($contactID)
{
$CI = &get_instance();
$tableData = new stdClass();
$tableData->ContactData = $CI->clients_model->get_contact($contactID);
$tableData->ClientData = $CI->clients_model->get($tableData->ContactData->userid);
call_webhook($tableData, 'client', 'add', $tableData->ContactData->userid, $contactID);
}
```
### 3. 数据格式
Webhook发送的数据格式示例:
```json
{
"event": "client/add",
"data": {
"id": 123,
"company": "ABC Corp",
"firstname": "John",
"lastname": "Doe",
"email": "john@example.com",
"phonenumber": "+1234567890",
"address": "123 Main St",
"city": "New York",
"state": "NY",
"zip": "10001",
"country": "USA",
"created_at": "2024-01-15 10:30:00"
},
"timestamp": "2024-01-15 10:30:01"
}
```
### 4. 配置管理
#### 4.1 Webhook配置
- 端点URL配置
- HTTP方法选择(GET/POST/PUT/DELETE)
- 自定义Header配置
- 认证方式配置
- 事件订阅选择
#### 4.2 安全特性
- JWT令牌验证
- 请求签名验证
- IP白名单
- SSL/TLS加密
## 核心代码分析
### 1. 模块入口 (webhooks.php)
```php
define('WEBHOOKS_MODULE', 'webhooks');
// 获取CI实例
$CI = &get_instance();
// 加载依赖
require __DIR__ . '/vendor/autoload.php';
// 注册激活钩子
register_activation_hook(WEBHOOKS_MODULE, 'webhooks_module_activation_hook');
// 注册停用钩子
register_deactivation_hook(WEBHOOKS_MODULE, 'webhooks_module_deactivation_hook');
// 加载语言文件
register_language_files(WEBHOOKS_MODULE, [WEBHOOKS_MODULE]);
// 加载辅助函数
$CI->load->helper(WEBHOOKS_MODULE . '/webhooks');
$CI->load->helper(WEBHOOKS_MODULE . '/request_webhook');
```
### 2. 事件钩子注册
#### 2.1 客户事件
```php
// 新增客户
hooks()->add_action('contact_created', 'wbhk_contact_added_hook');
// 更新客户
hooks()->add_action('contact_updated', 'wbhk_contact_updated_hook');
// 删除客户
hooks()->add_action('before_delete_contact', 'wbhk_contact_deleted_hook');
```
#### 2.2 线索事件
```php
// 新增线索
hooks()->add_action('lead_created', 'wbhk_lead_added_hook');
// 线索状态变更
hooks()->add_action('lead_status_changed', 'wbhk_lead_status_changed_hook');
// 删除线索
hooks()->add_action('before_lead_deleted', 'wbhk_lead_deleted_hook');
```
### 3. HTTP请求处理
使用rmccue/requests库发送HTTP请求:
... (content truncated)