タイトルが暴走(バグ)った(;´Д`)

要約すると、
■API v1 が廃止

■公式PHP版SDKはv1のみの対応
Do not use this SDK. It relies on Dropbox API v1, which is obsolete.

■公式曰く「使いたい言語のSDKがないって?HTTPで書いてちょ。コミュニティ版もあるぜよ(超意訳)
Don’t see your preferred programming language listed here? Check out the HTTP documentation and the Community SDKs.

■コミュニティ版は2択


公式がオヌヌメなんだからダイジョーブっしょ、そしてリストの上にあるほうがいいんでねーの、ってことで、「dropbox-php-sdk by Kunal Varma」を使用することにしたわけだ。

なが〜い前置きはここまで。ようやく本題。
要約の後で漸く本題。


んで、公式SDKを置き換えてみる(わりとまあまあすんなりいきました)と、下記のような、SSLの中間証明書のエラーが発生。
Fatal error: Uncaught Kunnu\Dropbox\Exceptions\DropboxClientException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in <DocRoot>\vendor\kunalvarma05\dropbox-php-sdk\src\Dropbox\Http\Clients\DropboxGuzzleHttpClient.php:64


これは下記記事の通りにすれば解消した。
php.iniを書き換える curlのセクションに、コメントアウトされたcurl.cainf定義があるので、ここに先ほどのファイルを指定します [curl] curl.cainfo = "C:\path\to\cacert.pem"


だけど、今回は、作成したプログラムをまるごと渡して、先方のWindows環境で動かすということをしているので、先方に『php.iniを書き換えて、apacheサービスを再起動してね』とは言いづらい状況…。
ここは、プログラム内で中間証明書を指定したい。

でも、件の「curl.cainfo」値は「PHP_INI_SYSTEM」なので、php.iniやhttpd.confなどでしか指定できませんのよ。。。

先の記事にはそんな場合の指定方法も書いてあった。
php.iniを書き換えたくない/変更できない場合 phpプログラム上に以下のような形で証明書ファイルの場所を指定しても大丈夫です。 $http = new GuzzleHttp\Client([ 'verify' => 'c:\path o\cacert.pem' ];


だけど、GuzzleHttp\Clientのコンストラクタなんて、どこで使ってるんだー\(^o^)/

仕方なく、ソースを読む。
どうやら、Dropboxのコンストラクタの第2引数に指定したGuzzleHttp\Clientのインスタンスがそのまま使われるようだ。
こんな感じ。
  $app = new DropboxApp('CLIENT_ID', 'CLIENT_SECRET');
$ghc = new GuzzleHttp\Client(['verify' => 'C:\path\to\cacert.pem')]);
$dbx = new Dropbox($app, ['http_client_handler' => $ghc]);


いつものように、シリツボミで。

  − 完 −


P.S.
この記事を書いていて、ちょうど昨日アップされた記事を発見。
とまあそういうわけで、新しいSDKを用いたラッパークラスを作ってみました。
(中略)
アップロード、ダウンロード、削除っていう基本機能ですが、よかったらぜひ使ってみてください。

あんまし関係ないけど、、、タイムリーだったので、つい、リンクを張らしてもらうことにする(-_-;)