概要
Google reCAPTCHA v2 サーバ側処理の実装時に詰まった内容の備忘録
内容
実装する際に当初下記のようにgoogle側に認証のため、
file_gets_contentsを利用して結果を受け取るように実装し、
開発環境では問題なく動作していた。
$response=file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".シークレットキー."&response=".レスポンスコード);
ただ、こちらの内容を今度は本番環境にリリースしたとき、何度試しても
reCAPTCHAの認証がエラーが返ってくる現象が発生。
原因
結果としては、「file_gets_contents」が原因で発生。
開発サーバ側では上記は利用できるような設定がされていたが、本番サーバ側では
利用できないように設定されていたため、認証が出来ずに常にエラーに・・・。
PHP: 実行時設定 - Manual
http://php.net/manual/ja/filesystem.configuration.php#ini.allow-url-fopen
今までは普通のこちらの設定がONになっていたため、利用できていたが
まれにOFFになっていることがあるようです。
解決策
単純に「file_gets_contents」を利用せずに「cURL」を利用して実装したところ
問題なく動作可能でした。
$url = "https://www.google.com/recaptcha/api/siteverify?secret=".シークレットキー."&response=".レスポンスコード;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
$response = curl_exec($ch);
curl_close($ch);
おわりに
PHP側で用意されている関数を利用するから問題ないだろうとろくに調べずに
「いつもどおり」で実装することは危険であることが改めて実感できました・・。
皆様もお気をつけください。