HTML側は以下となる。
.cf-turnstileは固定されたフォーマットなので、変更不可。
<script src="https://challenges.cloudflare.com/turnstile/v0/api.js" async defer></script>
<div class="cf-turnstile" data-sitekey="サイトキー" data-callback="javascriptCallback" data-language="ja"></div>
<script> window.javascriptCallback = () => { /* チェック前のコールバック */ }; </script>
PHP側の実装は以下のようになる。
$data = [];
$data[ 'secret' ] = 'シークレットキー';
$data[ 'response' ] = $_POST[ 'cf-turnstile-response' ];
$data = http_build_query( $data, '', '&' );
$curl = curl_init();
curl_setopt_array( $curl, [
CURLOPT_URL => 'https://challenges.cloudflare.com/turnstile/v0/siteverify',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $data
] );
$res = curl_exec( $curl );
$err = curl_error( $curl );
curl_close( $curl );
if ( $err ){
// エラー処理
}