Google Business Profile API调用accounts.list返回400错误排查
调用accounts.list接口返回400 INVALID_ARGUMENT错误修复
问题表现
调用Google My Business的accounts.list接口拉取账号列表时,返回如下400错误:
{ "error": { "code": 400, "message": "Request contains an invalid argument.", "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.BadRequest", "fieldViolations": [ { "field": "type", "description": "Field is required" }, { "field": "account_name", "description": "Field is required" }, { "field": "primary_owner", "description": "Field is required" } ] } ] } }
查阅官方文档未发现该接口标注必填请求字段,无法定位报错原因,初始PHP调用代码如下:
curleo('https://mybusinessaccountmanagement.googleapis.com/v1/accounts',$token['access_token'], $data = ''); function curleo($url, $token, $postdata){ $ch = curl_init($url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $postdata); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Authorization: Bearer '.$token)); $result = curl_exec($ch); curl_close($ch); print_r($result); }
根因分析
accounts.list是列表查询接口,规范HTTP请求方法为GET。初始代码错误使用POST方法发起请求,空的POST请求体被服务端识别为账号创建请求,因此触发创建账号场景下的参数校验逻辑,要求传入type、account_name、primary_owner等必填字段,最终抛出参数缺失错误。
修复方案
将请求方法从POST修改为GET,移除POST请求体相关配置,修复后可正常调用的PHP代码如下:
curl_get('https://mybusinessaccountmanagement.googleapis.com/v1/accounts',$token['access_token']); function curl_get($url, $token){ $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 30, CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, CURLOPT_CUSTOMREQUEST => "GET", CURLOPT_HTTPHEADER => array( 'Authorization: Bearer '.$token ), )); $response = curl_exec($curl); $err = curl_error($curl); curl_close($curl); print_r($response); }
内容的提问来源于stack exchange,提问作者user4239
相关产品推荐
相关产品推荐

