diff --git a/CHANGELOG b/CHANGELOG
index bfb58f1..7e71509 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -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
diff --git a/README.md b/README.md
index 25d1f68..ac00eab 100644
--- a/README.md
+++ b/README.md
@@ -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 */
@@ -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;
@@ -111,8 +115,7 @@ Client::getLoad(array $paramsList = []) : array;
Client::getLoadXml() : \SimpleXmlElement;
```
-
-### Опции клиента ###
+### Library options
Параметр | Тип | По умолчанию | Возможные значения
---| --- | --- | ---
@@ -123,11 +126,11 @@ Client::getLoadXml() : \SimpleXmlElement;
`serverBaseUri`| string | 'http://rucaptcha.com' | Базовый URI сервиса
-### Параметры распознавания капчи `$extra` ###
+### Solving options `$extra`
Параметр | Тип | По умолчанию | Возможные значения
---| --- | --- | ---
-`phrase` | integer | 0 | 0 = одно слово
1 = капча имеет два слова
+`phrase` | integer | 0 | 0 = одно слово
1 = капча имеет два слова
`regsense`| integer | 0 | 0 = регистр ответа не имеет значения
1 = регистр ответа имеет значение
`question`| integer | 0 | 0 = параметр не задействован
1 = на изображении задан вопрос, работник должен написать ответ
`numeric` | integer | 0 | 0 = параметр не задействован
1 = капча состоит только из цифр
2 = Капча состоит только из букв
3 = Капча состоит либо только из цифр, либо только из букв.
@@ -136,7 +139,7 @@ Client::getLoadXml() : \SimpleXmlElement;
`max_len` | 1..20 | 0 | 0 = параметр не задействован
1..20 = максимальное количество знаков в ответе
`is_russian` | integer | 0 | параметр больше не используется, т.к. он означал "слать данную капчу русским исполнителям", а в системе находятся только русскоязычные исполнители. Смотрите новый параметр language, однозначно обозначающий язык капчи
`soft_id` | string | | ID разработчика приложения. Разработчику приложения отчисляется 10% от всех капч, пришедших из его приложения.
-`language` | integer | 0 | 0 = параметр не задействован
1 = на капче только кириллические буквы
2 = на капче только латинские буквы
+`language` | integer | 0 | 0 = параметр не задействован
1 = на капче только кириллические буквы
2 = на капче только латинские буквы
`header_acao` | integer | 0 | 0 = значение по умолчанию
1 = in.php передаст Access-Control-Allow-Origin: * параметр в заголовке ответа. (Необходимо для кросс-доменных AJAX запросов в браузерных приложениях. Работает также для res.php.)
`textinstructions` | string | |Текст, который будет показан работнику. Может содержать в себе инструкции по разгадке капчи. Ограничение - 140 символов. Текст необходимо слать в кодировке UTF-8.
`textcaptcha` | string | | Текстовая капча. Картинка при этом не загружается, работник получает только текст и вводит ответ на этот текст. Ограничение - 140 символов. Текст необходимо слать в кодировке UTF-8.
diff --git a/src/Client.php b/src/Client.php
index f7efa95..50deb9d 100644
--- a/src/Client.php
+++ b/src/Client.php
@@ -3,7 +3,6 @@
namespace Rucaptcha;
use Rucaptcha\Exception\ErrorResponseException;
-use Rucaptcha\Exception\RuntimeException;
/**
* Class Client
@@ -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
*/
@@ -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)
{
@@ -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)
{
@@ -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
+ );
}
/**
@@ -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)
{
@@ -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)
{
@@ -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()
{
@@ -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)
{
@@ -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;
+ }
}
diff --git a/src/Exception/RucaptchaException.php b/src/Exception/Exception.php
similarity index 62%
rename from src/Exception/RucaptchaException.php
rename to src/Exception/Exception.php
index d3074bd..5476068 100644
--- a/src/Exception/RucaptchaException.php
+++ b/src/Exception/Exception.php
@@ -5,8 +5,7 @@
namespace Rucaptcha\Exception;
-use Exception;
-class RucaptchaException extends Exception
+class Exception extends \Exception
{
}
diff --git a/src/Exception/InvalidArgumentException.php b/src/Exception/InvalidArgumentException.php
index e456eb5..f8a7d3e 100644
--- a/src/Exception/InvalidArgumentException.php
+++ b/src/Exception/InvalidArgumentException.php
@@ -5,6 +5,6 @@
namespace Rucaptcha\Exception;
-class InvalidArgumentException extends RucaptchaException
+class InvalidArgumentException extends Exception
{
}
diff --git a/src/Exception/RuntimeException.php b/src/Exception/RuntimeException.php
index fed6aaa..1508714 100644
--- a/src/Exception/RuntimeException.php
+++ b/src/Exception/RuntimeException.php
@@ -5,6 +5,6 @@
namespace Rucaptcha\Exception;
-class RuntimeException extends RucaptchaException
+class RuntimeException extends Exception
{
}
diff --git a/src/GenericClient.php b/src/GenericClient.php
index a53b6f3..ce0b4c1 100644
--- a/src/GenericClient.php
+++ b/src/GenericClient.php
@@ -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;
@@ -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 = [])
{
@@ -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);
}
/**