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

