API 错误 — 每个代码的含义及修复方法
当请求失败时,FastOG 会返回机器可读的错误代码 — 无论是签名 OG 图片渲染,还是对产品内某个管理界面的调用。每个错误响应都包含:
error— 旧版短令牌。每次失败时仍然存在,以便旧版客户端继续正常工作。code— 相同的稳定、有文档记录的错误代码(见下表),使用公共 API 所用的名称。message— 一句话描述出错的原因。hint— 用通俗语言简短描述出错的原因以及如何修复。docs_url— 指向本页面的链接,锚定到该代码对应的章节。request_id— 将此 HTTP 失败关联到仪表盘 Render Logs 表中的一行(同时也会在X-Request-ID响应头中返回)。没有可关联内容的界面会返回null,但该键始终存在。
产品内界面 — Shopify 管理后台、WooCommerce Studio、Wix 桥接和演示 — 对以下代码返回相同的响应信封,因此无论你在哪里遇到失败,其含义都相同。模块界面可能会保留某个代码一直以来的 HTTP 状态(例如 render_failed 在封面导出时返回 503,在公共 API 上返回 502);代码、消息、提示和文档链接不会改变。
读取错误响应
{
"error": "invalid_signature",
"code": "invalid_signature",
"message": "The signature does not match.",
"hint": "The signature did not match. Re-sign with your HMAC secret after every param change.",
"request_id": "5f2a9c1e-..."
}
如果收到无法理解的响应,最快的排查路径是:
- 记下
code。 - 检查你的 URL 构建逻辑——大多数失败都是签名错误,而不是账户问题。
- 对照下面的错误码找到确切原因和修复方法。
- 在仪表盘中打开 Render Logs,按相同的
error_code过滤——每一行都会显示请求的参数,方便你复现(并确认request_id是否匹配)。
签名与身份验证
missing_signature
您的请求缺少 key 和/或 s(签名)查询参数。
修复: 请确保您的 URL 同时包含 key=<api-key> 和 s=<hmac-signature>。请使用 SDK 或 /docs/hmac-signature-guide 演练来构建它。
invalid_signature
s 的值与您的 HMAC 密钥为此 URL 生成的值不匹配。
修复: 签名覆盖 所有 查询参数(s 除外),且键已排序。更改任何参数——包括重新排序、URL 编码差异或添加空白——都会使签名失效。每次更改后请重新签名。请确认您的密钥与创建 API 密钥时显示的密钥相同。
invalid_signature_format
s 的值不是 64 个字符的十六进制字符串。
修复: 签名必须是原始 SHA-256 十六进制(小写 a-f0-9)。如果您对输出进行了 base64 编码或截断,请改用纯十六进制。
expired_timestamp
您提供的 t 时间戳已超过 5 分钟。
修复: 每次构建 URL 时请重新生成时间戳。此代码适用于旧版签名 URL 流程;当前的 HMAC v2 流程没有时间戳。
invalid_api_key
您传入的 key 不存在。
修复: 请从仪表板复制完整的 API 密钥——它是以 sk_ 开头的公开标识符。它是公开的,在 URL 中使用是安全的;密钥(绝不要放在 URL 中)才是证明所有权的凭据。
missing_hmac_secret
该 API 密钥未配置 HMAC 密钥。
修复: 请在仪表板中创建新的 API 密钥——HMAC 密钥会在创建时生成并仅显示一次。
参数 / 输入
invalid_image_url
带有 URL 的 prop(image、brand_logo、logo、avatar、background_image、...)不是公开的 http(s) URL。
修复: 请传入可公开访问的 https://... URL。为防止服务端请求伪造,localhost、私有 IP 和裸路径都会被拒绝。
订阅
subscription_required (402)
请求已到达 Dynamic API,但您的账户没有生效中的套餐。API 访问仅限订阅用户:套餐是准入门槛,并且提供与 FastOG 应用所售相同的覆盖范围与能力阶梯。渲染本身不计费——没有每月渲染配额,也没有超额计费。
修复: 请在仪表盘中选择一个 Dynamic API 套餐并创建 API 密钥。响应中包含一个指向套餐页面的 top_up_url。
渲染服务
store_blocked (403)
该密钥所对应店铺的渲染已被 FastOG 暂停(例如滥用或用量失控)。已缓存在边缘的封面图可能继续提供服务,直至过期。请联系支持团队解决;在请求中做任何更改都无法修复此问题。
render_unreachable
无法访问渲染服务(短暂重启窗口)。
修复: 请在几秒后重试。本次尝试未计入渲染次数。
render_failed
渲染服务为您的请求返回了错误。
修复: 请检查您的模板 props——过长/格式错误的值、不支持的字段,或无法访问的上游图片。响应中包含底层的 status。本次渲染未计入次数。
商店管理后台界面
这些代码从 Shopify 管理后台和 WooCommerce Studio 返回响应——即商家实际使用的嵌入式编辑器,而非已签名的 API。其中若干与公共 API 共用(invalid_image_url、render_failed、invalid_signature);这些代码保留上文记录的条目。
| 代码 | HTTP | 含义与处理方式 |
|---|---|---|
invalid_shop |
422 | 无法识别 Shopify 商店。请从 Shopify 管理后台重新加载 FastOG 应用,使嵌入式请求重新携带商店信息,然后重试。 |
invalid_shop_or_page |
422 | 商店或页面类型未知。请从 Shopify 管理后台打开 FastOG 应用,并在编辑器中选择一个封面页面类型。 |
invalid_store |
422 | 无法识别 WooCommerce 商店。请从 WordPress 管理后台重新打开 Studio,使商店令牌重新提交,然后重试。 |
invalid_store_or_page |
422 | 商店或页面类型未知。请从 WordPress 管理后台重新打开 Studio,并选择编辑器提供的封面页面类型。 |
missing_api_key |
422 | 商店没有签名密钥。请从 WordPress 管理后台完成插件安装,以便 FastOG 为商店签发签名密钥。 |
store_ownership_unverified |
403 | 无法验证 WordPress 站点。该站点必须可通过公共 HTTPS 访问,并启用其 REST API。 |
community_is_free |
422 | Community 方案是免费的。它是免费的默认方案,不可购买;请选择付费档位进行升级。 |
not_installed |
404 | 此商店尚未安装 FastOG。请从 Shopify App Store 为此商店安装 FastOG 应用,然后重新打开。 |
oauth_required |
409 | 商店需要重新授权 FastOG。请从 Shopify 管理后台重新执行 FastOG OAuth 安装;已存储的授权已被撤销或其权限范围发生了变化。 |
reconnect_required |
409 | 需要重新建立 Shopify 连接。请使用 FastOG 应用中的“重新连接”按钮,以签发新的访问令牌。 |
token_rejected |
409 | Shopify 签发了访问令牌后又拒绝了它。请重试一次重新连接;如果 Shopify 持续拒绝,请重新安装应用。 |
unauthorized |
401 | 该请求未携带适用于此界面的有效会话。请从平台管理后台重新加载 FastOG 应用,以附加新的会话令牌,然后重试。 |
shop_not_found |
404 | 该商店在 FastOG 中已不存在。请从 Shopify 管理后台重新安装 FastOG 以重新创建商店记录。 |
invalid_product |
422 | 产品引用无效。请重新加载产品页面并重新打开 FastOG;发送的产品 id 缺失或不是数字。 |
invalid_product_cover |
422 | 产品封面载荷格式错误。请重新加载编辑器并再次保存;props、style 和 signals 必须各自为对象。 |
product_not_found |
404 | 无法从商店读取该产品。请检查该产品仍然存在且已发布,然后重新加载编辑器。 |
product_customization_not_on_plan |
403 | 当前方案不支持按产品自定义封面。请升级,或改为编辑共享的产品封面。 |
no_product_handles |
422 | 未找到可刷新的产品。请至少发布一个具有公开 handle 的产品,然后再次尝试刷新分享预览。 |
invalid_style |
422 | 样式块不可用。请重新加载编辑器并重新选择颜色和字体;有一个值无法规范化。 |
invalid_template |
422 | 请求的模板不在此平台目录中。请选择编辑器提供的某个布局。 |
invalid_preset |
422 | 该预设名称不是此平台提供的。请从设置界面中选择一个预设。 |
invalid_set |
422 | 封面集载荷缺失或格式错误。请重新加载设置界面并重新选择一个封面集。 |
preset_not_applyable |
422 | 该预设无法应用于所有页面类型。请选择其他预设;此预设至少缺少一个页面类型的封面。 |
template_not_available |
422 | 该模板不在可渲染目录中。请选择选择器提供的某个布局。 |
template_not_available_on_shopify |
422 | 该模板在 Shopify 商店中不可用。请选择 Shopify 编辑器提供的某个布局。 |
template_not_available_on_woocommerce |
422 | 该模板在 WooCommerce 商店中不可用。请选择 Studio 提供的某个布局。 |
template_unavailable |
422 | 该模板对此商店不可用。请选择编辑器提供的某个布局;该模板已停用、未知,或超出该商店可绘制的范围。 |
template_not_on_plan |
403 | 该模板需要更高方案。请更改方案,或选择当前方案覆盖的布局。响应在 requires 中指明了所需方案。 |
template_requires_higher_plan |
403 | 该模板需要更高方案。响应在 requires 中指明了所需方案。 |
no_rule |
404 | 此页面类型尚无封面规则。请先在编辑器中为此页面类型保存一个封面。 |
cover_not_configured |
404 | 尚未保存任何产品封面。请在下载或分享之前先保存产品封面。 |
schedule_only_product |
422 | 活动排期仅适用于产品封面。请移除还原日期,或将活动移至产品封面。 |
not_dismissible |
422 | 该公告无法关闭。请重新加载页面;该公告已被停用或属于其他商店。 |
unsupported_locale |
422 | 此应用未内置该 UI 语言。请选择响应在 supported 中列出的某种语言。 |
no_setup_sets |
422 | 无法组装精选封面集。请重试设置界面;如果仍为空,请联系支持。 |
export_unavailable |
403 | 当前方案不支持下载。请升级到 Pro 或更高方案以下载封面文件。 |
cancellation_failed |
502 | 订阅取消被拒绝。请稍后重试;如果持续失败,请从 Shopify 账单页面取消或联系支持。 |
logo_override_on_plan |
403 | 当前方案不支持覆盖 logo。请升级,或清除 logo 覆盖。 |
invalid_logo |
422 | 该 logo 文件不是可接受的图片。请上传 PNG、JPEG 或 WebP,且不超过编辑器中显示的大小上限。 |
invalid_brand_image |
422 | 品牌参考图不可用。请上传受支持的图片且不超过大小上限,或清除参考图后再次保存。 |
brand_image_too_large |
422 | 品牌参考图过大。请缩小文件后重新上传。 |
brand_colors_too_many |
422 | 提供的品牌颜色超过三种。请最多发送三个十六进制颜色。 |
upload_failed |
500 | 无法存储上传的文件。请重试;如果持续失败,请联系支持——资源存储未返回公开 URL。 |
attachment_upload_failed |
500 | 无法存储支持附件。请在不带附件的情况下发送消息,然后将文件通过电子邮件发送给支持。 |
invalid_webhook |
401 | 商店 webhook 签名验证失败。请检查 WordPress 的 FastOG 设置中的 webhook 密钥是否与 FastOG 签发的一致。 |
not_found |
404 | 该端点已不存在。请从 WordPress 管理后台重新打开 Studio。 |
meta_refresh_unavailable |
503 | 未配置分享预览刷新。请改为从 Facebook 重新分享链接。 |
theme_write_disabled |
409 | 此应用未启用主题编辑。请使用主题应用嵌入,而不是修改主题文件。 |
scope_required |
403 | FastOG 缺少某项 Shopify 权限。请使用响应中的 consent_url 批准所请求的权限范围,然后重试修复。 |
Wix 桥接
Wix 桥接由 Wix 应用签名,而非商家会话,因此其失败信息面向应用开发者。每个响应仍携带 code 和 request_id;桥接请求 id 来自签名信封中的那个。
| 代码 | HTTP | 含义与处理方式 |
|---|---|---|
invalid_bridge_signature |
401 | Wix 桥接签名验证失败。请使用共享密钥、精确路径和五分钟以内的时间戳重新签发请求。 |
invalid_bridge_body |
400 | 桥接信封正文格式错误。请将 body 作为 JSON 对象发送,并将其中的每个数字编码为字符串,以便规范签名匹配。 |
replayed_bridge_request |
401 | 该桥接请求已被使用。请为每次变更调用签发新的 request_id。 |
wix_site_not_installed |
403 | FastOG 未安装在此 Wix 站点上。请在该站点上安装 FastOG 应用,然后重新打开。 |
wix_site_not_provisioned |
422 | 该 Wix 站点尚无签名凭据。请重新安装 FastOG 应用,以便为该站点配置 API 密钥。 |
invalid_page_type |
422 | 该页面类型不在 FastOG 于 Wix 上支持的范围内。请发送 Studio 提供的页面类型之一。 |
rule_not_found |
404 | 不存在具有该 id 的规则。请刷新列表;该规则已被删除或属于其他站点。 |
invalid_target_id |
422 | Wix 目标 id 对此页面类型无效。请发送 Wix 应用为该页面类型提供的 id。 |
invalid_preview |
422 | 预览载荷格式错误。请查看 details 对象以定位出错的字段。 |
invalid_rule |
422 | 封面规则载荷格式错误。请查看 details 对象;template 为必填项,可选块必须为对象。 |
invalid_sync |
422 | 同步载荷格式错误。请查看 details 对象;target_type 和 target_id 必须一致。 |
invalid_regenerate_url |
422 | 缺少要重新生成的 URL。请在 url 中发送页面 URL。 |
invalid_regenerate_host |
422 | 该 URL 不属于 FastOG 主机。请发送 fastog.com 的封面 URL。 |
ai_presets_unsupported |
422 | 不再生成 AI 设计的封面集。请改选一种精选外观。 |
original_tags_required |
422 | 原始元数据标签为必填项。请发送 original_tags(或 current_tags),以便卸载时能恢复站点元数据。 |
invalid_restored |
422 | 恢复键载荷格式错误。请将 restored 作为元数据键数组发送。 |
invalid_seo_target |
422 | SEO 目标类型未知。请在路径中使用 site、pattern 或 item。 |
invalid_seo_payload |
422 | SEO 元数据载荷格式错误。请将 target_id、current_tags 和 fastog_url 作为绝对 http(s) URL 发送。 |
sync_failed |
500 | 向 Wix 同步元数据失败。请重试;若持续失败,请检查站点是否可访问以及应用是否仍处于安装状态。 |
invalid_tier |
422 | 该套餐不是 FastOG 在 Wix 上销售的套餐。请将 tier 发送为 starter、pro 或 scale。 |
演示界面
该演示是仅限所有者使用的销售控制台,不是商户端点。
| 代码 | HTTP | 含义与处理方式 |
|---|---|---|
url_required |
422 | 未发送 URL。请先粘贴店铺或商品链接,再读取卡片。 |
unreadable_url |
422 | 无法读取该页面。请检查链接是否为公开且完整;位于登录之后的页面无法读取。 |
no_api_key |
422 | 没有可用于签名封面的 API 密钥。请创建 API 密钥(或输入有效的密钥);响应中会提供 API 密钥页面的链接。 |
no_presets |
500 | 未配置封面预设。请在服务器上至少配置一个预设。 |
作用域规则编辑器代码
作用域规则编辑器(Shopify 管理后台和 WooCommerce Studio)会自行将这些令牌翻译成商家自己的语言,因此它们的响应会带有 error 和 code,但不带 hint——第二份英文描述只会与商家实际看到的本地化描述产生偏差:
scope_already_defined、scoped_rule_limit_reached、scoped_rules_not_on_plan、
scope_value_required、scope_value_too_long、unknown_scope_type、base_rule_required、
scoped_rules_product_only、cannot_delete_base_rule。
仍然无法解决?
- 请打开 dashboard 的 Render Logs 页面——每个结果(成功和拒绝)都会列出其
error_code、HTTP 状态码以及请求的参数。 - 请对已签名的 URL 运行
php artisan og:diagnose,以走完整个流水线并查看哪个阶段失败。 - 请查看侧边栏中你所使用框架的文档(Next.js、Express、SvelteKit 等)。