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

调用Google My Business API更新主分类报update_mask错误如何解决

错误含义说明

错误提示primary or additional categories cannot be updated independently.指的是 Google My Business API 不支持仅更新分类字段下的单个子属性(比如仅修改主分类的name值),你必须以整个categories对象为单位进行更新,不能在update_mask中指定到分类下的某一个子字段层级。

解决方法

不需要调用单独的分类更新接口,你只需要修改代码中的update_mask配置即可:

  • 将update_mask中原有的categories.primaryCategory.name替换为categories,表示你要更新的是整个分类对象
  • 确保请求体中提交的categories结构完整:如果你当前商家还有需要保留的附加分类,需要把附加分类的信息也一并写入$locationData['categories']中,否则原有附加分类会被覆盖
  • 额外注意:你当前代码中设置了请求头为application/json,但直接将PHP数组传给CURLOPT_POSTFIELDS时cURL会自动将其转换为表单格式,需要先调用json_encode()处理请求体参数,否则会返回格式错误

修改后的核心代码示例

<?php

$locationData = array();
$locationData['title'] = $data['title'];
$locationData['categories']['primaryCategory']['name'] = 'gcid:website_designer';
// 如果有附加分类需要保留,在此处补充 $locationData['categories']['additionalCategories'] 对应的数组结构

$updateMask = array(
    'title', 
    'categories' // 修改为整个categories对象
);

$queryParams = array(
    'updateMask' => implode(',', $updateMask)
);

// Prepare new cURL resource
$curl = curl_init('https://mybusinessbusinessinformation.googleapis.com/v1/locations/'.$locationId.'/?'.http_build_query($queryParams));
curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'PATCH');
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($locationData)); // 转成JSON格式
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
    'Content-Type: application/json',
    'Authorization: Bearer ' . $accessToken,
));

$response = curl_exec($curl);
curl_close($curl);

$location = json_decode($response);

echo "<pre>";
print_r($location);
echo "</pre>";

内容的提问来源于stack exchange,提问作者Codeblooded Saiyan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:54:01