Sato's Tech Memo

備忘録と情報共有を兼ねたメモです

WindowsローカルサーバでのEvernoteAPIのOAuth認証

EvernoteAPIのOAuth認証でちょっとハマッたので覚書。

発生環境

  • Windows開発環境のローカルサーバ(Apache+PHP
    • EvernoteAPIを使うために、今回新規で構築したPHP環境。
  • EvernoteAPI(PHP)

事象

以下のシンプルなOAuthコードを実行

$sandbox = true;

$oauth_handler = new \Evernote\Auth\OauthHandler($sandbox);
$key = 'xxx';
$secret = 'xxx';
$callback = 'localhost:8080/api/index.php';

$oauth_data = $oauth_handler->authorize($key, $secret, $callback);


以下のようなエラー画面。
f:id:satoko_szk:20190920125310p:plain
URLのoauth_tokenパラメタが空になっている。

直接の原因

EvernoteAPIのOauthHandler.phpcurl_execSSL certificate problemで失敗しているため。

//中略
protected function getTemporaryCredentials()
{
  curl_setopt_array($handle, array(
      CURLOPT_POST => true,
      CURLOPT_URL => $this->getBaseUrl('oauth'),
      CURLOPT_HTTPHEADER => $this->formatHeaders($headers),
      CURLOPT_POSTFIELDS => http_build_query($arguments, '', '&'),
      CURLOPT_HEADER => true,
      CURLOPT_RETURNTRANSFER => true
  ));

  $raw = curl_exec($handle); //←ここで戻り値が空。curl_errorでエラー内容を確認したところ、SSL certificate problemが発生している

ためしに、

CURLOPT_SSL_VERIFYPEER=>false 

をパラメタに追加すると問題なく動いた。

根本原因

PHPcurl用の証明書が設定されていなかったため。

本対処

curl用の証明書を設定する。

設定方法はコチラ参考→https://michinobu.jp/tec/dialy/phpcurlcertificateproblem