PHP
curl
GoogleCloudPlatform
Guzzle
GoogleVisionAPI

Google Cloud Platform で cURL error 60: SSL certificate problem ……

Google API を使おう!と言う人にとってはアタリマエのことなのかもしれませんが、ワタクシめにはなかなか解決策が見つけられず苦労したので、同じ境遇の人が生まれないようにメモを残します…。

公式のPHP用SDKと使い方はこちら
Google Vision APIのクライアントライブラリ 各言語

何がしたい?

Google Cloud Platform ……の中の、VisionAPIっていうのを、PHPで使おうと思ったんです。サンプルソースコードもあって、Composerでライブラリが組み込めて、楽勝楽勝♪と思っていたのに、このエラーに阻まれました。

Fatal error: Uncaught Google\Cloud\Core\Exception\ServiceException: cURL error 60: SSL certificate problem: unable to get local issuer certificate (see http://curl.haxx.se/libcurl/c/libcurl-errors.html) in C:\xampp\cloudvision\vendor\google\cloud-core\RequestWrapper.php:245

言いたいことはわかります。SSLをするのにクライアント証明が無いってことですよね。けど、本格的なサービスを作るわけでもなく、試作や開発要サンプルの段階なので、そういうのすっ飛ばしたいんです。

結論

サンプルプログラムはこうなっています。

 $vision = new VisionClient([
     'projectId' => $projectId
 ]);

まず、こうします。このJSONは APIとサービス というページでキーを作ったときにダウンロードされるJSONファイルで、それをプロジェクトディレクトリにコピーしてきてパスを通しておきます。

 $vision = new VisionClient([
     'projectId' => $projectId,
     'keyFilePath' => __DIR__ . '/myproject-xxxxx.json'
 ]);

次に本題。冒頭の cURL error 60 を回避するためにこうします。

 $guzzleClient = new GuzzleHttp\Client(['verify' => false]);
 $vision = new VisionClient([
     'projectId' => $projectId,
     'keyFilePath' => __DIR__ . '/myproject-xxxxx.json',
     'httpHandler' => function ($request, $options = []) use ($guzzleClient) { 
         return $guzzleClient->send($request, $options);
     }
 ]);

感想

VisionClientの公式ドキュメント を眺めていて、なんとなくこの httpHandler っていうのがあやしいなぁという雰囲気はありますが、サンプルがまったくなくて困りました。できてしまうとカンタンであっけないものですが。やっぱりアタリマエのことなのでしょうか…(´ε` )

というわけで、Google Vision APIが、なんとなく動かせるようになったので、もうちょっといろいろ遊んでみたいと思います。