You are here

public function ReCaptcha::verify in reCAPTCHA 8.2

Same name and namespace in other branches
  1. 6.2 recaptcha-php/src/ReCaptcha/ReCaptcha.php \ReCaptcha\ReCaptcha::verify()
  2. 7.2 recaptcha-php/src/ReCaptcha/ReCaptcha.php \ReCaptcha\ReCaptcha::verify()

Calls the reCAPTCHA siteverify API to verify whether the user passes CAPTCHA test and additionally runs any specified additional checks

Parameters

string $response The user response token provided by reCAPTCHA, verifying the user on your site.:

string $remoteIp The end user's IP address.:

Return value

Response Response from the service.

File

recaptcha-php/src/ReCaptcha/ReCaptcha.php, line 147

Class

ReCaptcha
reCAPTCHA client.

Namespace

ReCaptcha

Code

public function verify($response, $remoteIp = null) {

  // Discard empty solution submissions
  if (empty($response)) {
    $recaptchaResponse = new Response(false, array(
      self::E_MISSING_INPUT_RESPONSE,
    ));
    return $recaptchaResponse;
  }
  $params = new RequestParameters($this->secret, $response, $remoteIp, self::VERSION);
  $rawResponse = $this->requestMethod
    ->submit($params);
  $initialResponse = Response::fromJson($rawResponse);
  $validationErrors = array();
  if (isset($this->hostname) && strcasecmp($this->hostname, $initialResponse
    ->getHostname()) !== 0) {
    $validationErrors[] = self::E_HOSTNAME_MISMATCH;
  }
  if (isset($this->apkPackageName) && strcasecmp($this->apkPackageName, $initialResponse
    ->getApkPackageName()) !== 0) {
    $validationErrors[] = self::E_APK_PACKAGE_NAME_MISMATCH;
  }
  if (isset($this->action) && strcasecmp($this->action, $initialResponse
    ->getAction()) !== 0) {
    $validationErrors[] = self::E_ACTION_MISMATCH;
  }
  if (isset($this->threshold) && $this->threshold > $initialResponse
    ->getScore()) {
    $validationErrors[] = self::E_SCORE_THRESHOLD_NOT_MET;
  }
  if (isset($this->timeoutSeconds)) {
    $challengeTs = strtotime($initialResponse
      ->getChallengeTs());
    if ($challengeTs > 0 && time() - $challengeTs > $this->timeoutSeconds) {
      $validationErrors[] = self::E_CHALLENGE_TIMEOUT;
    }
  }
  if (empty($validationErrors)) {
    return $initialResponse;
  }
  return new Response(false, array_merge($initialResponse
    ->getErrorCodes(), $validationErrors), $initialResponse
    ->getHostname(), $initialResponse
    ->getChallengeTs(), $initialResponse
    ->getApkPackageName(), $initialResponse
    ->getScore(), $initialResponse
    ->getAction());
}