Oauth2 访问令牌返回错误"invalid client"



我在获取访问令牌方面有问题。获得验证代码后,当我打电话给我的get_access_token时,它会返回" invalid_client"错误。我对此进行了研究,但没有任何帮助。请查看我的代码,并帮助我解决此问题。先感谢您。这是我的代码:

public function get_access_token($zoho_code)
{
    $headers = array(
    );
    $taskurl = 'https://accounts.zoho.com/oauth/v2/token';
    $cdata = array(
        'code' => $zoho_code,
        'grant_type' => 'authorization_code',
        'client_id' =>  $this->client_id,
        'client_secret' => $this->client_secret_id,
        'redirect_uri' => 'http://localhost/callback.php',
        'scope' => 'ZohoMail.accounts.UPDATE,ZohoMail.accounts.READ,ZohoMail.partner.organization.READ,ZohoMail.partner.organization.UPDATE,ZohoMail.organization.accounts.CREATE,ZohoMail.organization.accounts.UPDATE,ZohoMail.organization.accounts.READ,ZohoMail.organization.domains.CREATE,ZohoMail.organization.domains.UPDATE,ZohoMail.organization.domains.DELETE,ZohoMail.organization.domains.READ',
        'state' => '55555sfdfsdfgbcv',
    );
    $curlresult = $this->docurl($taskurl, $cdata, $headers);
    return $curlresult;
}
public function docurl($taskurl, $cdata, $headers, $method = 'post',$sendjson=true) {
    $ch = curl_init();
    if ($method == 'get') {
        if ($cdata) {
            $query = '?' . http_build_query($cdata);
            $taskurl .= $query;
        }
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');
    } elseif ($method == 'delete') {
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'DELETE');
    } elseif ($method == 'put') {
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT');
    } elseif ($method == 'patch') {
        if($sendjson) $cdata = json_encode($cdata);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $cdata);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PATCH');
    } else {
        if($sendjson) $cdata = json_encode($cdata);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $cdata);
    }
    curl_setopt($ch, CURLOPT_URL, $taskurl);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    $res = curl_exec($ch);
    $information = curl_getinfo($ch);
    print_r($information);
    print_r($cdata);
    curl_close($ch);
    $resj = json_decode($res);
     return $resj;
}

如果我正确读取了您的代码,则将client_secret作为邮政请求主体的一部分发送,编码为JSON。

您应该使用application/x-www-form-urlencoded主体提出邮政请求,并且应该在基本方案中包含使用client_secretAuthorization标头。有关更多信息,请参见OAuth2 RFC。

根据您的数据中心,您需要更改accounts.zoho.com。例如accounts.zoho.in印度。您可以在Zoho Web应用程序的URL中看到它。它写在他们的文档链接中。

相关内容

最新更新