From b7ff0be326a2f7433dc180fdbffe377da0ac6da0 Mon Sep 17 00:00:00 2001 From: Dmitry Gladyshev Date: Tue, 12 Sep 2017 12:57:08 +0300 Subject: [PATCH] Keycaptcha recognition support --- examples/advanced.php | 1 + examples/data/unreadable.png | Bin 0 -> 58493 bytes src/Client.php | 149 +++++++++++++++++++++++++++++++++++ 3 files changed, 150 insertions(+) create mode 100644 examples/data/unreadable.png diff --git a/examples/advanced.php b/examples/advanced.php index 079da53..324384e 100644 --- a/examples/advanced.php +++ b/examples/advanced.php @@ -9,6 +9,7 @@ $taskIds = []; $taskIds[] = $rucaptcha->sendCaptcha(file_get_contents(__DIR__.'/data/captcha.png')); +//$taskIds[] = $rucaptcha->sendCaptcha(file_get_contents(__DIR__.'/data/unreadable.png')); $taskIds[] = $rucaptcha->sendCaptcha(file_get_contents(__DIR__.'/data/yandex.gif'), [ Rucaptcha\Extra::IS_RUSSIAN => 1 ]); diff --git a/examples/data/unreadable.png b/examples/data/unreadable.png new file mode 100644 index 0000000000000000000000000000000000000000..6877c4327711be8720810d1d90184f6851b8a2c7 GIT binary patch literal 58493 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 literal 0 HcmV?d00001 diff --git a/src/Client.php b/src/Client.php index 7ff4ccc..6f9655c 100644 --- a/src/Client.php +++ b/src/Client.php @@ -4,6 +4,7 @@ use GuzzleHttp\RequestOptions; use Rucaptcha\Exception\ErrorResponseException; +use Rucaptcha\Exception\InvalidArgumentException; use Rucaptcha\Exception\RuntimeException; /** @@ -14,6 +15,11 @@ */ class Client extends GenericClient { + /* json status codes */ + const STATUS_CODE_CAPCHA_NOT_READY = 0; + const STATUS_CODE_OK = 1; + + /* status codes */ const STATUS_OK_REPORT_RECORDED = 'OK_REPORT_RECORDED'; /** @@ -278,6 +284,10 @@ public function sendRecapthaV2($googleKey, $pageUrl, $extra = []) { $this->getLogger()->info("Try send google key (recaptcha) on {$this->serverBaseUri}/in.php"); + if ($this->softId && !isset($extra[Extra::SOFT_ID])) { + $extra[Extra::SOFT_ID] = $this->softId; + } + $response = $this->getHttpClient()->request('POST', "/in.php", [ RequestOptions::QUERY => array_merge($extra, [ 'method' => 'userrecaptcha', @@ -299,6 +309,8 @@ public function sendRecapthaV2($googleKey, $pageUrl, $extra = []) } /** + * Recaptcha V2 recognition. + * * @param string $googleKey * @param string $pageUrl * @param array $extra # Captcha options @@ -333,6 +345,143 @@ public function recognizeRecaptchaV2($googleKey, $pageUrl, $extra = []) throw new RuntimeException('Unknown recognition logic error.'); } + /** + * Keycaptcha recognition. + * + * @param string $SSCUserId + * @param string $SSCSessionId + * @param string $SSCWebServerSign + * @param string $SSCWebServerSign2 + * @param string $pageUrl + * @param array $extra + * @return string # Captcha ID + * @throws ErrorResponseException + */ + public function sendKeyCaptcha( + $SSCUserId, + $SSCSessionId, + $SSCWebServerSign, + $SSCWebServerSign2, + $pageUrl, + $extra = [] + ) { + + $this->getLogger()->info("Try send google key (recaptcha) on {$this->serverBaseUri}/in.php"); + + if ($this->softId && !isset($extra[Extra::SOFT_ID])) { + $extra[Extra::SOFT_ID] = $this->softId; + } + + $response = $this->getHttpClient()->request('POST', "/in.php", [ + RequestOptions::QUERY => array_merge($extra, [ + 'method' => 'keycaptcha', + 'key' => $this->apiKey, + 's_s_c_user_id' => $SSCUserId, + 's_s_c_session_id' => $SSCSessionId, + 's_s_c_web_server_sign' => $SSCWebServerSign, + 's_s_c_web_server_sign2' => $SSCWebServerSign2, + 'pageurl' => $pageUrl + ]) + ]); + + $responseText = $response->getBody()->__toString(); + + if (strpos($responseText, 'OK|') !== false) { + $this->lastCaptchaId = explode("|", $responseText)[1]; + $this->getLogger()->info("Sending success. Got captcha id `{$this->lastCaptchaId}`."); + return $this->lastCaptchaId; + } + + throw new ErrorResponseException($this->getErrorMessage($responseText) ?: "Unknown error: `{$responseText}`."); + } + + /** + * Keycaptcha recognition. + * + * @param string $SSCUserId + * @param string $SSCSessionId + * @param string $SSCWebServerSign + * @param string $SSCWebServerSign2 + * @param string $pageUrl + * @param array $extra + * @return string # Code to place into id="capcode" input value + * @throws RuntimeException + */ + public function recognizeKeyCaptcha( + $SSCUserId, + $SSCSessionId, + $SSCWebServerSign, + $SSCWebServerSign2, + $pageUrl, + $extra = [] + ) { + $captchaId = $this + ->sendKeyCaptcha($SSCUserId, $SSCSessionId, $SSCWebServerSign, $SSCWebServerSign2, $pageUrl, $extra); + + $startTime = time(); + + while (true) { + $this->getLogger()->info("Waiting {$this->rTimeout} sec."); + + sleep($this->recaptchaRTimeout); + + if (time() - $startTime >= $this->mTimeout) { + throw new RuntimeException("Captcha waiting timeout."); + } + + $result = $this->getCaptchaResult($captchaId); + + if ($result === false) { + continue; + } + + $this->getLogger()->info("Elapsed " . (time()-$startTime) . " second(s)."); + + return $result; + } + + throw new RuntimeException('Unknown recognition logic error.'); + } + + /** + * Override generic method for using json response. + * + * @param string $captchaId # Captcha task ID + * @return false|string # Solved captcha text or false if captcha is not ready + * @throws ErrorResponseException + * @throws InvalidArgumentException + */ + public function getCaptchaResult($captchaId) + { + $response = $this + ->getHttpClient() + ->request('GET', "/res.php?key={$this->apiKey}&action=get&id={$captchaId}&json=1"); + + $responseData = json_decode($response->getBody()->__toString(), true); + + if (JSON_ERROR_NONE !== json_last_error()) { + throw new InvalidArgumentException( + 'json_decode error: ' . json_last_error_msg() + ); + } + + if ($responseData['status'] === self::STATUS_CODE_CAPCHA_NOT_READY) { + return false; + } + + if ($responseData['status'] === self::STATUS_CODE_OK) { + $this->getLogger()->info("Got OK response: `{$responseData['request']}`."); + return $responseData['request']; + } + + throw new ErrorResponseException( + $this->getErrorMessage( + $responseData['request'] + ) ?: $responseData['request'], + $responseData['status'] + ); + } + /** * Match error code by response. *