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
相关产品推荐
相关产品推荐

