You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Shopify API注册Webhook时触发822错误,请求技术支持

问题分析与解决方案

从你给出的错误信息和代码来看,问题的核心是请求体格式与声明的Content-Type不匹配,导致Shopify无法正确解析你的webhook注册请求。

问题根源

你的request方法里明确设置了Content-Type: application/json,但在registerWebHook方法中,你使用了Guzzle的form_params选项来传递数据——这个选项会把数组编码成application/x-www-form-urlencoded格式的表单数据(也就是错误信息里的webhook%5Btopic%5D=...这种URL编码内容)。Shopify收到请求后,看到Content-Type是JSON,却收到了表单格式的内容,自然会抛出解析错误。

修复方案

把form_params替换成Guzzle的json选项,它会自动将数组编码为JSON字符串,和你设置的Content-Type保持一致:

修改registerWebHook方法中的请求代码:

public function registerWebHook($webHook) {
    try {
        $request = $this->request('admin/webhooks.json', [
            // 把form_params换成json
            'json' => [
                'webhook' => [
                    'topic' => $webHook,
                    'address' => trim(config('app.url'), '/') . '/webhooks',
                    'format' => 'json'
                ]
            ]
        ], 'post');
    } catch(BadResponseException $e) {
        dd($e->getResponse()->getBody()->getContents());
    }
    return $this->parseResponseBody($request);
}

补充说明

  • 你提到其他接口请求正常,大概率是因为那些请求要么是GET请求(不需要请求体),要么是POST请求时正确使用了json选项传递数据。
  • Shopify的Webhook注册API明确要求请求体为JSON格式,所以必须确保请求内容和Content-Type一致。

修改后重新测试,应该就能成功注册webhook了。

内容的提问来源于stack exchange,提问作者Luke Snowden

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:34:20