codeigniter 集成 zendesk 需绕过官方 sdk,使用 rest api v2 并严格遵循 token 认证、json 请求体、正确解析响应及 webhook 验签等规范。

CodeIgniter 本身不提供 Zendesk 官方 SDK,直接集成需绕过官方 PHP SDK 的 Composer 依赖限制,改用轻量 HTTP 封装 + Zendesk REST API v2。关键不是“装个包”,而是控制好认证、错误重试和响应解析。
Zendesk API 认证必须用 token 方式,不能只靠用户名密码
Zendesk 已弃用基本认证(username:password),强制使用邮箱 + token 组合(格式为 your_email/token:your_token)。若用错方式,会稳定返回 401 Unauthorized,且错误信息极简,不易定位。
- 在 Zendesk 后台 → 设置 → API → 生成新 Token,绑定到具体代理用户(非管理员账号)
- 构造
Authorization请求头时,必须 Base64 编码整个字符串,例如:base64_encode('user@example.com/token:abc123xyz') - 别把 token 硬编码进控制器——应通过
$this->config->item('zendesk_token')从配置文件读取
Api_client::post() 不适合 Zendesk 的 JSON 请求体
你知识库中提到的 Api_client::post() 默认用 application/x-www-form-urlencoded 发送 http_build_query($params),但 Zendesk API 要求所有写操作(如创建 ticket)必须是 application/json + raw JSON body。直接传数组进去会 400 或静默失败。
- 修改
post()方法:移除CURLOPT_POSTFIELDS的http_build_query(),改用json_encode($params) - 显式设置请求头:
['Content-Type: application/json', 'Authorization: Basic ' . $encoded_auth] - 注意:Zendesk 返回的 ticket ID 在
response->id,不是response->ticket->id(v2 API 已扁平化)
Zendesk webhook 回调需手动验签,input->raw_input_stream 是唯一可靠入口
如果你在 CodeIgniter 中接收 Zendesk 的事件回调(比如 ticket.created),不能依赖 $this->input->post() —— Zendesk 发送的是原始 JSON,且不带 Content-Type: application/x-www-form-urlencoded,CI 的默认 post 解析器会丢数据。
- 必须用
file_get_contents('php://input')或 CI 的$this->input->raw_input_stream - 验证签名:Zendesk 在
X-Zendesk-Webhook-Signature头里放了 HMAC-SHA256 签名,密钥是你在 webhook 设置里填的「Secret」 - 验签失败就直接
http_response_code(401); exit;,别进业务逻辑
最易被忽略的一点:Zendesk 的分页响应字段是 next_page(字符串 URL),不是标准的 Link header;而它的 rate limit 响应头是 X-Rate-Limit-Remaining,不是 Retry-After —— 这些细节不处理,批量拉 ticket 时会突然中断且无提示。











