将OAuth1附加到GuzzleHttp\Client

mis*_*hka 5 php laravel-5.1 guzzle6

我正在尝试升级一个类,用于GuzzleHttp\Client使用twitter api搜索推文.我无法附上Oauth1.它与Guzzle3和OAuthPlugin配合得很好.

这是代码块:

        $client = new Client(['base_uri' => 'https://api.twitter.com']);

        $auth = new Oauth1([
            'consumer_key' => Config::get('twitter.consumer_key'),
            'consumer_secret' => Config::get('twitter.consumer_secret'),
            'token' => Config::get('twitter.token'),
            'token_secret' => Config::get('twitter.token_secret')

        ]);

// Not sure if this is correct
$client->getEmitter()->attach($auth); // This is line 40 inside TwitterServiceProvider.php
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

InvalidArgumentException in Client.php line 80: Magic request methods require a URI and optional options array

1. in Client.php line 80
2. at Client->__call('getEmitter', array()) in TwitterServiceProvider.php line 40
Run Code Online (Sandbox Code Playgroud)

PS到目前为止,我已经想过,我应该使用https://github.com/guzzle/oauth-subscriber.但是,没有运气.

mis*_*hka 5

解决.

  1. 我无法使用getEmitter使其工作.这可能不是正确的方法.
  2. 我切换到guzzle/oauth-subscriber它现在有效.这里有一个很好的例子:https://github.com/guzzle/oauth-subscriber
  3. base_uri 选项应该有一个尾部斜杠.

新守则:

        $stack = HandlerStack::create();

        $auth = new Oauth1([
            'consumer_key' => Config::get('twitter.consumer_key'),
            'consumer_secret' => Config::get('twitter.consumer_secret'),
            'token' => Config::get('twitter.token'),
            'token_secret' => Config::get('twitter.token_secret')

        ]);

        $stack->push($auth);

        $client = new Client([
            'base_uri' => 'https://api.twitter.com/1.1/',
            'handler' => $stack,
            'auth' => 'oauth'
        ]);
Run Code Online (Sandbox Code Playgroud)

请求如下:

$client->get('search/tweets.json', [
                                'query' => ['q' => $query]
                        ]);
Run Code Online (Sandbox Code Playgroud)