在laravel5.8中从guzzle访问oauth2的密钥请求

时间:2019-05-31 06:48:18

标签: laravel api oauth-2.0 mailchimp guzzle

我想从mailchimp oauth2获取访问令牌,但是每次尝试都失败了。在这里,我使用了食肉,而我的实际要求是

curl-请求POST \ --url'https://login.mailchimp.com/oauth2/token'\ --data“ grant_type = authorization_code&client_id = {client_id}&client_secret = {client_secret}&redirect_uri = {encoded_url}&code = {code}” \ --include

我已经尝试使用curl和javascript,但是mailchimp不接受javascript请求 这是我使用的代码:

$http = new Client(['base_uri' => 'https://login.mailchimp.com/oauth2', 
 'defaults' => [
                'exceptions' => false ],
    'header' => [
        'Accept' => 'application/json',
        'Content-Type' => 'application/x-www-form-urlencoded'
    ],
    'verify' => false
    ]);
    $result = $http->request('POST','/token', [
    'form_params' => [
        'grant_type' => 'authorization_code',
        'client_id' => $this->client_id,
        'client_secret' => $this->client_secret,
        'redirect_uri' => $this->redirect_uri,
        'code' => $code,
        ],
    ]);
    $response = $result->send();
    $responseBody = $response->getBody(true);
    var_dump($responseBody);
    die();

预期的实际结果是: “ access_token”:“ 5c6ccc561059aa386da9d112215bae55”,“ expires_in”:0,“ scope”:null 但是我的错误客户端错误:  POST https://login.mailchimp.com/token产生了404 Not Found响应:

1 个答案:

答案 0 :(得分:0)

由于Guzzle的工作方式,您使用的是绝对URI。

首先,您设置base_uri

$http = new Client(['base_uri' => 'https://login.mailchimp.com/oauth2']);

然后发出请求:

$http->request('POST', '/token')

由于您已添加了斜杠,因此Guzzle会视其为绝对URI,并照此执行https://login.mailchimp.com/token。我的猜测是要命中的目标端点是https://login.mailchimp.com/oauth2/token

可以通过在base_uri上添加尾部斜杠并在执行请求时删除前斜杠来解决此问题。

文档中的信息:http://docs.guzzlephp.org/en/stable/quickstart.html#creating-a-client

遵循RFC3986