Skip to content

Commit

Permalink
Resolving limit errors response
Browse files Browse the repository at this point in the history
  • Loading branch information
Dmitry Gladyshev committed Mar 25, 2017
1 parent f22af2b commit cb01706
Show file tree
Hide file tree
Showing 7 changed files with 90 additions and 42 deletions.
4 changes: 4 additions & 0 deletions CHANGELOG
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
1.1.0 - Rename RucaptchaException to Exception
- Resolve account limit codes on error response
- Simplify error messages

1.0.6 - Add addPingback method
- Add getPingbacks method
- Add deletePingback method
Expand Down
37 changes: 20 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,21 @@ PHP-обёртка для сервиса распознавания капчи [
[![Code Coverage](https://scrutinizer-ci.com/g/gladyshev/rucaptcha-client/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/gladyshev/rucaptcha-client/?branch=master)
[![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/gladyshev/rucaptcha-client/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/gladyshev/rucaptcha-client/?branch=master)

### Примеры ###
### Install

```bash
$ composer require --prefer-dist gladyshev/rucaptcha-client "~1.1"
```
or
```php
"require": {
...
"gladyshev/rucaptcha-client": "~1.1"
...
}
```

### Examples

```php
/* Simple */
Expand Down Expand Up @@ -56,17 +70,7 @@ while (count($taskIds) > 0)
print_r($results);
```

### Установка ###

```php
"require": {
...
"gladyshev/rucaptcha-client": "~1.0"
...
}
```

### Методы `Rucaptcha\Client` ###
### Methods of `Rucaptcha\Client`

```php
use Rucaptcha\Client;
Expand Down Expand Up @@ -111,8 +115,7 @@ Client::getLoad(array $paramsList = []) : array;
Client::getLoadXml() : \SimpleXmlElement;
```


### Опции клиента ###
### Library options

Параметр | Тип | По умолчанию | Возможные значения
---| --- | --- | ---
Expand All @@ -123,11 +126,11 @@ Client::getLoadXml() : \SimpleXmlElement;
`serverBaseUri`| string | 'http://rucaptcha.com' | Базовый URI сервиса


### Параметры распознавания капчи `$extra` ###
### Solving options `$extra`

Параметр | Тип | По умолчанию | Возможные значения
---| --- | --- | ---
`phrase` | integer | 0 | 0 = одно слово <br/> 1 = капча имеет два слова
`phrase` | integer | 0 | 0 = одно слово <br> 1 = капча имеет два слова
`regsense`| integer | 0 | 0 = регистр ответа не имеет значения <br> 1 = регистр ответа имеет значение
`question`| integer | 0 | 0 = параметр не задействован <br> 1 = на изображении задан вопрос, работник должен написать ответ
`numeric` | integer | 0 | 0 = параметр не задействован <br> 1 = капча состоит только из цифр<br> 2 = Капча состоит только из букв<br> 3 = Капча состоит либо только из цифр, либо только из букв.
Expand All @@ -136,7 +139,7 @@ Client::getLoadXml() : \SimpleXmlElement;
`max_len` | 1..20 | 0 | 0 = параметр не задействован<br> 1..20 = максимальное количество знаков в ответе
`is_russian` | integer | 0 | параметр больше не используется, т.к. он означал "слать данную капчу русским исполнителям", а в системе находятся только русскоязычные исполнители. Смотрите новый параметр language, однозначно обозначающий язык капчи
`soft_id` | string | | ID разработчика приложения. Разработчику приложения отчисляется 10% от всех капч, пришедших из его приложения.
`language` | integer | 0 | 0 = параметр не задействован <br> 1 = на капче только кириллические буквы <br>2 = на капче только латинские буквы
`language` | integer | 0 | 0 = параметр не задействован <br> 1 = на капче только кириллические буквы <br> 2 = на капче только латинские буквы
`header_acao` | integer | 0 | 0 = значение по умолчанию <br> 1 = in.php передаст Access-Control-Allow-Origin: * параметр в заголовке ответа. (Необходимо для кросс-доменных AJAX запросов в браузерных приложениях. Работает также для res.php.)
`textinstructions` | string | |Текст, который будет показан работнику. Может содержать в себе инструкции по разгадке капчи. Ограничение - 140 символов. Текст необходимо слать в кодировке UTF-8.
`textcaptcha` | string | | Текстовая капча. Картинка при этом не загружается, работник получает только текст и вводит ответ на этот текст. Ограничение - 140 символов. Текст необходимо слать в кодировке UTF-8.
Expand Down
78 changes: 60 additions & 18 deletions src/Client.php
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@
namespace Rucaptcha;

use Rucaptcha\Exception\ErrorResponseException;
use Rucaptcha\Exception\RuntimeException;

/**
* Class Client
Expand All @@ -23,6 +22,7 @@ class Client extends GenericClient
/**
* Your application ID in Rucaptcha catalog.
* The value `1013` is ID of this library. Set in false if you want to turn off sending any ID.
*
* @see https://rucaptcha.com/software/view/php-api-client
* @var string
*/
Expand All @@ -42,9 +42,9 @@ public function sendCaptcha($content, array $extra = [])
/**
* Bulk captcha result.
*
* @param int[] $captchaIds # Captcha task Ids array
* @return string[] # Array $captchaId => $captchaText or false if is not ready
* @throws RuntimeException
* @param int[] $captchaIds # Captcha task Ids array
* @return string[] # Array $captchaId => $captchaText or false if is not ready
* @throws ErrorResponseException
*/
public function getCaptchaResultBulk(array $captchaIds)
{
Expand Down Expand Up @@ -78,16 +78,19 @@ public function getCaptchaResultBulk(array $captchaIds)
*/
public function getBalance()
{
$response = $this->getHttpClient()->request('GET', "/res.php?key={$this->apiKey}&action=getbalance");
$response = $this
->getHttpClient()
->request('GET', "/res.php?key={$this->apiKey}&action=getbalance");

return $response->getBody()->__toString();
}

/**
* Report of wrong recognition.
*
* @param $captchaId
* @param string $captchaId
* @return bool
* @throws RuntimeException
* @throws ErrorResponseException
*/
public function badCaptcha($captchaId)
{
Expand All @@ -100,7 +103,11 @@ public function badCaptcha($captchaId)
if ($responseText === self::STATUS_OK_REPORT_RECORDED) {
return true;
}
throw new ErrorResponseException($this->getErrorMessage($responseText) ?: "Unknown error: `{$responseText}`.");

throw new ErrorResponseException(
$this->getErrorMessage($responseText) ?: $responseText,
$this->getErrorCode($responseText) ?: 0
);
}

/**
Expand Down Expand Up @@ -143,7 +150,7 @@ public function getLoadXml()
/**
* @param string $captchaId # Captcha task ID
* @return array | false # Solved captcha and cost array or false if captcha is not ready
* @throws RuntimeException
* @throws ErrorResponseException
*/
public function getCaptchaResultWithCost($captchaId)
{
Expand All @@ -166,13 +173,18 @@ public function getCaptchaResultWithCost($captchaId)
];
}

throw new ErrorResponseException($this->getErrorMessage($responseText) ?: "Unknown error: `{$responseText}`.");
throw new ErrorResponseException(
$this->getErrorMessage($responseText) ?: $responseText,
$this->getErrorCode($responseText) ?: 0
);
}

/**
* Add pingback url to rucaptcha whitelist.
*
* @param string $url
* @return bool # true if added and exception if fail
* @throws RuntimeException
* @throws ErrorResponseException
*/
public function addPingback($url)
{
Expand All @@ -185,12 +197,18 @@ public function addPingback($url)
if ($responseText === self::STATUS_OK) {
return true;
}
throw new ErrorResponseException($this->getErrorMessage($responseText) ?: "Unknown error: `{$responseText}`.");

throw new ErrorResponseException(
$this->getErrorMessage($responseText) ?: $responseText,
$this->getErrorCode($responseText) ?: 0
);
}

/**
* @return string[]
* @throws RuntimeException
* Returns pingback whitelist items.
*
* @return string[] # List of urls
* @throws ErrorResponseException
*/
public function getPingbacks()
{
Expand All @@ -206,13 +224,18 @@ public function getPingbacks()
return empty($data[1]) ? [] : array_values($data);
}

throw new ErrorResponseException($this->getErrorMessage($responseText) ?: "Unknown error: `{$responseText}`.");
throw new ErrorResponseException(
$this->getErrorMessage($responseText) ?: $responseText,
$this->getErrorCode($responseText) ?: 0
);
}

/**
* Remove pingback url from whitelist.
*
* @param string $uri
* @return bool
* @throws RuntimeException
* @throws ErrorResponseException
*/
public function deletePingback($uri)
{
Expand All @@ -225,15 +248,34 @@ public function deletePingback($uri)
if ($responseText === self::STATUS_OK) {
return true;
}
throw new ErrorResponseException($this->getErrorMessage($responseText) ?: "Unknown error: `{$responseText}`.");
throw new ErrorResponseException(
$this->getErrorMessage($responseText) ?: $responseText,
$this->getErrorCode($responseText) ?: 0
);
}

/**
* Truncate pingback whitelist.
*
* @return bool
* @throws RuntimeException
* @throws ErrorResponseException
*/
public function deleteAllPingbacks()
{
return $this->deletePingback('all');
}

/**
* Match error code by response.
*
* @param string $responseText
* @return int
*/
private function getErrorCode($responseText)
{
if (preg_match('/ERROR:\s*(\d{0,4})/ui', $responseText, $matches)) {
return intval($matches[1]);
}
return 0;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,7 @@

namespace Rucaptcha\Exception;

use Exception;

class RucaptchaException extends Exception
class Exception extends \Exception
{
}
2 changes: 1 addition & 1 deletion src/Exception/InvalidArgumentException.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@

namespace Rucaptcha\Exception;

class InvalidArgumentException extends RucaptchaException
class InvalidArgumentException extends Exception
{
}
2 changes: 1 addition & 1 deletion src/Exception/RuntimeException.php
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,6 @@

namespace Rucaptcha\Exception;

class RuntimeException extends RucaptchaException
class RuntimeException extends Exception
{
}
6 changes: 3 additions & 3 deletions src/GenericClient.php
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
use Psr\Log\LoggerInterface;
use Rucaptcha\Exception\ErrorResponseException;
use Rucaptcha\Exception\InvalidArgumentException;
use Rucaptcha\Exception\RucaptchaException;
use Rucaptcha\Exception\Exception;
use Rucaptcha\Exception\RuntimeException;
use SplFileObject;

Expand Down Expand Up @@ -94,7 +94,7 @@ public function setHttpClient(ClientInterface $client)
* @param string $path
* @param array $extra
* @return string
* @throws RucaptchaException
* @throws Exception
*/
public function recognizeFile($path, array $extra = [])
{
Expand Down Expand Up @@ -199,7 +199,7 @@ public function getCaptchaResult($captchaId)
return html_entity_decode(trim(explode('|', $responseText)[1]));
}

throw new ErrorResponseException($this->getErrorMessage($responseText) ?: "Unknown error: `{$responseText}`.");
throw new ErrorResponseException($this->getErrorMessage($responseText) ?: $responseText);
}

/**
Expand Down

0 comments on commit cb01706

Please sign in to comment.