ZendService\Twitterを使って、ユーザーのメールアドレスを取得したい
下記 Twitter API ドキュメントに従って、
OAuth 認証時にユーザーのメールアドレスを取得しようと試みています。
GET account/verify_credentials | Twitter Developers
上記ドキュメントによると、
Request a User's Email Address
Requesting a user's email address requires your application to be whitelisted by Twitter.
To request access, please use this form.Once whitelisted,
the “Request email addresses from users” checkbox will be available under your app permissions on apps.twitter.com.
Privacy Policy URL and Terms of Service URL fields will also be available
under settings which are required for email access.If enabled,
users will be informed via the oauth/authorize dialog
that your app can access their email address.
ということなので、
whitelist の申請とアプリケーションの設定を済ませました。
Twitter Application Management
ttps://apps.twitter.com
Settings
1. Callback URL
2. Privacy Policy URL
3. Terms of Service URL
Permissions
Additional Permissions
These additional permissions require that you provide URLs
to your application or service's privacy policy and terms of service.
You can configure these fields in your Application Settings.
[x] Request email addresses from users
その後、前述のドキュメント内の「OAuth Signature Generator」を使って "cURL command" を生成。
cURL command
OAuth Tool
$ curl
--get 'ttps://api.twitter.com/1.1/account/verify_credentials.json'
--data 'include_email=true'
--header 'Authorization: OAuth
oauth_consumer_key="...",
oauth_signature="...",
oauth_nonce="...",
oauth_token="...",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="1456854748",
oauth_version="1.0"'
返ってくる JSON に email が含まれていることを確認しました。
{
"id":...,
"name":"...",
...
"email":"..."
}
一方、下記 ZendService\Twitter component を使って同じように
Twitter ユーザーのメールアドレスを取得しようと試みました。
- zendframework/ZendService_Twitter - Github
- ZendService\Twitter — Zend Framework 2 2.4.8 documentation - Zend Framework
index.php
$config = array(
'access_token' => array(
'token' => '...',
'secret' => '...'
),
'oauth_options' => array(
'consumerKey' => '...',
'consumerSecret' => '...',
),
'http_client_options' => array(
'adapter' => 'Zend\Http\Client\Adapter\Curl',
'curloptions' => array(
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
),
),
);
$twitter = new ZendService\Twitter\Twitter($config);
$params = ['include_email' => true];
$response = $twitter->account->verifyCredentials($params);
if (!$response->isSuccess()) {
die('Something is wrong with my credentials!');
}
library\ZendService\Twitter\Twitter.php
include_email=true
が付くように、コードの一部を改変しています。
/**
* Verify Account Credentials
*
* @throws Http\Client\Exception\ExceptionInterface if HTTP request fails or times out
* @throws Exception\DomainException if unable to decode JSON payload
* @return Response
*/
public function accountVerifyCredentials($params = array())
{
$this->init();
$response = $this->get('account/verify_credentials', $params);
return new Response($response);
}
curl では取得できていた email が、php では取れていません。
email 以外のユーザー情報は取れています。
何が間違っているのでしょう?