pixso api调用需处理bom、编码验证、字段名不一致、bearer认证、二进制流导出及响应内容校验:先trim bom,用mb_detect_encoding确认utf-8,json_decode加json_throw_on_error;递归提取layer名称时按name→layername→name→title顺序isset检查;authorization头必须为bearer+用户token;导出png需curlopt_binarytransfer=true并校验文件头;调试优先var_dump前200字节。

Pixso API 返回 JSON 但 json_decode() 失败?检查 Content-Type 和 BOM
Pixso API 默认返回 UTF-8 编码的 JSON,但响应头可能缺失 Content-Type: application/json,或响应体开头存在 UTF-8 BOM(\xEF\xBB\xBF),导致 json_decode() 返回 null 且 json_last_error_msg() 报 “Syntax error”。
- 用
file_get_contents()或curl_exec()获取原始响应后,先用trim($raw, "\xEF\xBB\xBF")去 BOM - 不要依赖响应头判断是否为 JSON,强制用
mb_detect_encoding($clean, ['UTF-8'], true) === 'UTF-8'验证编码 - 调用
json_decode($clean, true, 512, JSON_THROW_ON_ERROR)—— 加上JSON_THROW_ON_ERROR能立刻暴露解析问题,比查json_last_error()更直接
如何安全提取 Pixso 文件结构中的图层名称(layer.name)?
Pixso API 的 /v1/files/{file_id}/structure 接口返回嵌套极深的树状结构,layer 可能是数组、对象或 null,且字段名大小写不统一(文档写 name,实测有 NAME 或 layerName 情况)。
- 别用
$data->layers[0]->name这类硬路径;改用递归函数 +isset()+strtolower()统一检查键名 - 关键字段优先尝试:
name→layerName→NAME→title(部分文本图层用这个) - 对每个节点做
is_object($node) || is_array($node)判断,跳过字符串/数字等非容器类型,避免Trying to get property 'name' of non-object
PHP cURL 请求 Pixso API 401 错误:Access token 到底怎么传?
Pixso API 要求在请求头中传递 Authorization: Bearer {token},但常见错误是拼错 header 名、token 过期、或用了项目 token(Project Token)而非用户 token(User Token)—— 后者才具备读取文件结构权限。
- 确认 token 来源:必须是 Pixso 开发者后台「个人访问令牌」(Personal Access Token),不是「项目令牌」或「Webhook Secret」
- cURL 设置 header 必须显式写全:
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Authorization: Bearer ' . $token, 'Content-Type: application/json']) - 如果仍 401,用
curl_getinfo($ch, CURLINFO_HEADER_OUT)打印发出的完整请求头,确认Authorization行存在且格式无空格/换行
处理 Pixso 导出 PNG 的二进制流:别用 file_put_contents() 直接写
调用 /v1/files/{file_id}/export 获取 PNG 时,API 返回的是 raw binary,若用 json_decode() 解析会失败,而直接 file_put_contents() 可能因 PHP 输出缓冲或默认文本模式损坏二进制数据。
- 用
curl_setopt($ch, CURLOPT_BINARYTRANSFER, true)和CURLOPT_RETURNTRANSFER, true获取原始字节 - 保存前加
bindec('1') === 1粗略校验(PNG 文件头是\x89PNG\r\n\x1a\n),避免把 HTML 错误页当图片存下来 - 用
file_put_contents($path, $png_data, LOCK_EX),确保原子写入;路径需提前dirname($path)并mkdir(..., 0755, true)
var_dump(substr($raw, 0, 200)) 看前两百字节,比猜更省时间。大量免费API接口:立即使用
涵盖生活服务API、金融科技API、企业工商API、等相关的API接口服务。免费API接口可安全、合规地连接上下游,为数据API应用能力赋能!











