Anticaptcha::getBalance()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 11
rs 9.9
c 0
b 0
f 0
cc 2
nc 2
nop 0
1
<?php
2
3
namespace jumper423\decaptcha\services;
4
5
use jumper423\decaptcha\core\DeCaptchaBase;
6
use jumper423\decaptcha\core\DeCaptchaErrors;
7
8
/**
9
 * Class Anticaptcha.
10
 */
11
class Anticaptcha extends DeCaptchaBase
12
{
13
    protected $host = 'api.anti-captcha.com';
14
    protected $scheme = 'https';
15
16
    const RESPONSE_RECOGNIZE_OK = 0;
17
    const RESPONSE_RECOGNIZE_REPEAT = 2;
18
    const RESPONSE_GET_OK = 'ready';
19
    const RESPONSE_GET_REPEAT = 'processing';
20
21
    const DECODE_PARAM_ERROR = 4;
22
    const DECODE_PARAM_BALANCE = 5;
23
24
    const ACTION_BALANCE = 4;
25
    const DECODE_ACTION_BALANCE = 4;
26
27
    protected $paramsNames = [
28
        self::ACTION_FIELD_KEY        => 'clientKey',
29
        self::ACTION_FIELD_SOFT_ID    => 'softId',
30
        self::ACTION_FIELD_LANGUAGE   => 'languagePool',
31
        self::ACTION_FIELD_TASK       => 'task',
32
        self::ACTION_FIELD_METHOD     => 'type',
33
        self::ACTION_FIELD_FILE       => 'body',
34
        self::ACTION_FIELD_PHRASE     => 'phrase',
35
        self::ACTION_FIELD_REGSENSE   => 'case',
36
        self::ACTION_FIELD_NUMERIC    => 'numeric',
37
        self::ACTION_FIELD_CALC       => 'math',
38
        self::ACTION_FIELD_MIN_LEN    => 'minLength',
39
        self::ACTION_FIELD_MAX_LEN    => 'maxLength',
40
        self::ACTION_FIELD_CAPTCHA_ID => 'taskId',
41
    ];
42
43
    public function init()
44
    {
45
        parent::init();
46
47
        $this->actions[static::ACTION_RECOGNIZE] = [
48
            static::ACTION_URI    => 'createTask',
49
            static::ACTION_METHOD => static::ACTION_METHOD_POST,
50
            static::ACTION_JSON   => true,
51
            static::ACTION_FIELDS => [
52
                static::ACTION_FIELD_KEY => [
53
                    static::PARAM_SLUG_REQUIRE => true,
54
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_API_KEY,
55
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
56
                ],
57
                static::ACTION_FIELD_SOFT_ID => [
58
                    static::PARAM_SLUG_VARIABLE => false,
59
                    static::PARAM_SLUG_DEFAULT  => 825,
60
                    static::PARAM_SLUG_TYPE     => static::PARAM_FIELD_TYPE_INTEGER,
61
                    static::PARAM_SLUG_NOTWIKI  => true,
62
                ],
63
                static::ACTION_FIELD_LANGUAGE => [
64
                    static::PARAM_SLUG_DEFAULT => 'en',
65
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
66
                    static::PARAM_SLUG_ENUM    => [
67
                        'en',
68
                        'rn',
69
                    ],
70
                ],
71
                static::ACTION_FIELD_TASK => [
72
                    static::PARAM_SLUG_REQUIRE => true,
73
                    static::PARAM_SLUG_DEFAULT => [],
74
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_OBJECT,
75
                    static::PARAM_SLUG_NOTWIKI => true,
76
                    static::ACTION_FIELDS      => [
77
                        static::ACTION_FIELD_METHOD => [
78
                            static::PARAM_SLUG_DEFAULT => 'ImageToTextTask',
79
                            static::PARAM_SLUG_REQUIRE => true,
80
                            static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
81
                            static::PARAM_SLUG_NOTWIKI => true,
82
                        ],
83
                        static::ACTION_FIELD_FILE => [
84
                            static::PARAM_SLUG_REQUIRE => true,
85
                            static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_FILE,
86
                            static::PARAM_SLUG_CODING  => static::PARAM_SLUG_CODING_BASE64,
87
                            static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
88
                        ],
89
                        static::ACTION_FIELD_PHRASE => [
90
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_BOOLEAN,
91
                            static::PARAM_SLUG_ENUM => [
92
                                true,
93
                                false,
94
                            ],
95
                        ],
96
                        static::ACTION_FIELD_REGSENSE => [
97
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_BOOLEAN,
98
                            static::PARAM_SLUG_ENUM => [
99
                                true,
100
                                false,
101
                            ],
102
                        ],
103
                        static::ACTION_FIELD_NUMERIC => [
104
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_INTEGER,
105
                            static::PARAM_SLUG_ENUM => [
106
                                0,
107
                                1,
108
                                2,
109
                            ],
110
                        ],
111
                        static::ACTION_FIELD_CALC => [
112
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_BOOLEAN,
113
                            static::PARAM_SLUG_ENUM => [
114
                                true,
115
                                false,
116
                            ],
117
                        ],
118
                        static::ACTION_FIELD_MIN_LEN => [
119
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_INTEGER,
120
                        ],
121
                        static::ACTION_FIELD_MAX_LEN => [
122
                            static::PARAM_SLUG_TYPE => static::PARAM_FIELD_TYPE_INTEGER,
123
                        ],
124
                    ],
125
                ],
126
            ],
127
        ];
128
        $this->actions[static::ACTION_UNIVERSAL_WITH_CAPTCHA] = [
129
            static::ACTION_URI    => 'getTaskResult',
130
            static::ACTION_METHOD => static::ACTION_METHOD_POST,
131
            static::ACTION_JSON   => true,
132
            static::ACTION_FIELDS => [
133
                static::ACTION_FIELD_KEY => [
134
                    static::PARAM_SLUG_REQUIRE => true,
135
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_API_KEY,
136
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
137
                ],
138
                static::ACTION_FIELD_CAPTCHA_ID => [
139
                    static::PARAM_SLUG_REQUIRE => true,
140
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_CAPTCHA,
141
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_INTEGER,
142
                ],
143
            ],
144
        ];
145
        $this->actions[static::ACTION_BALANCE] = [
146
            static::ACTION_URI    => 'getBalance',
147
            static::ACTION_METHOD => static::ACTION_METHOD_POST,
148
            static::ACTION_JSON   => true,
149
            static::ACTION_FIELDS => [
150
                static::ACTION_FIELD_KEY => [
151
                    static::PARAM_SLUG_REQUIRE => true,
152
                    static::PARAM_SLUG_SPEC    => static::PARAM_SPEC_API_KEY,
153
                    static::PARAM_SLUG_TYPE    => static::PARAM_FIELD_TYPE_STRING,
154
                ],
155
            ],
156
        ];
157
158
        $this->decodeSettings[static::DECODE_ACTION][static::DECODE_ACTION_RECOGNIZE] = [
159
            static::DECODE_FORMAT => static::RESPONSE_TYPE_JSON,
160
            static::DECODE_PARAMS => [
161
                static::DECODE_PARAM_RESPONSE => [
162
                    static::DECODE_PARAM_SETTING_MARKER => 'errorId',
163
                ],
164
                static::DECODE_PARAM_CAPTCHA => [
165
                    static::DECODE_PARAM_SETTING_MARKER => 'taskId',
166
                ],
167
                static::DECODE_PARAM_ERROR => [
168
                    static::DECODE_PARAM_SETTING_MARKER => 'errorCode',
169
                ],
170
            ],
171
        ];
172
        $this->decodeSettings[static::DECODE_ACTION][static::DECODE_ACTION_GET] = [
173
            static::DECODE_FORMAT => static::RESPONSE_TYPE_JSON,
174
            static::DECODE_PARAMS => [
175
                static::DECODE_PARAM_RESPONSE => [
176
                    static::DECODE_PARAM_SETTING_MARKER => 'status',
177
                ],
178
                static::DECODE_PARAM_CODE => [
179
                    static::DECODE_PARAM_SETTING_MARKER => 'solution.text',
180
                ],
181
                static::DECODE_PARAM_ERROR => [
182
                    static::DECODE_PARAM_SETTING_MARKER => 'errorCode',
183
                ],
184
            ],
185
        ];
186
        $this->decodeSettings[static::DECODE_ACTION][static::DECODE_ACTION_BALANCE] = [
187
            static::DECODE_FORMAT => static::RESPONSE_TYPE_JSON,
188
            static::DECODE_PARAMS => [
189
                static::DECODE_PARAM_RESPONSE => [
190
                    static::DECODE_PARAM_SETTING_MARKER => 'errorId',
191
                ],
192
                static::DECODE_PARAM_BALANCE => [
193
                    static::DECODE_PARAM_SETTING_MARKER => 'balance',
194
                ],
195
                static::DECODE_PARAM_ERROR => [
196
                    static::DECODE_PARAM_SETTING_MARKER => 'errorCode',
197
                ],
198
            ],
199
        ];
200
201
        $this->wiki->setText(['service', 'name'], 'Anti Captcha');
202
        $this->wiki->setText(['service', 'href'], 'http://infoblog1.ru/goto/anti-captcha');
203
        $this->wiki->setText(['service', 'desc'], [
204
            'ru' => 'Сервис AntiCaptcha, ранее белее известный как Antigate.
205
206
100% капч распознаются нашими работниками со всего мира. Именно поэтому используя наш сервис вы одновременно помогаете тысячам людей по всему миру обеспечивать себя и своих близких.
207
208
Деньги, которые наши работники зарабатывают у нас считаются хорошей зарплатой в таких странах как Индия, Пакистан или Вьетнам. С вашей помощью теперь у них есть выбор между работой на грязном производстве и работой за компьютером.',
209
            'en' => 'The AntiCaptcha service, formerly known as whiter Antigate. 
210
            
211
100% of captchas can be recognized by our employees from around the world. That is why using our service you help thousands of people around the world to provide themselves and their families. 
212
213
The money our employees earn are considered a good salary in countries such as India, Pakistan or Vietnam. With your help, they now have the choice between working on the dirty production and computer work.',
214
        ]);
215
        $this->wiki->setText(['recognize', 'price'], [
216
            'ru' => 'От 0.7 USD за каждые 1000 капч, в зависимости от ваших объемов',
217
            'en' => 'From 0.7 USD per 1000 captchas, depending on your volume',
218
        ]);
219
        $this->wiki->setText(['recognize', 'desc'], [
220
            'ru' => 'Решение обычной капчи с текстом.',
221
            'en' => 'The solution to the normal captcha text.',
222
        ]);
223
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_PHRASE], [
224
            'ru' => [
225
                'false - нет требований',
226
                'true - работник должен ввести текст с одним или несколькими пробелами',
227
            ],
228
            'en' => [
229
                'false - there are no requirements',
230
                'true - работник должен ввести текст с одним или несколькими пробелами',
231
            ],
232
        ]);
233
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_REGSENSE], [
234
            'ru' => [
235
                'false - нет требований',
236
                'true - работник увидит специальный сигнал что ответ необходимо вводить с учетом регистра',
237
            ],
238
            'en' => [
239
                'false - there are no requirements',
240
                'true - the employee will see a special signal that the answer should be entered case sensitive',
241
            ],
242
        ]);
243
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_NUMERIC], [
244
            'ru' => [
245
                '0 - нет требований',
246
                '1 - можно вводить только цифры',
247
                '2 - вводить можно любые символы кроме цифр',
248
            ],
249
            'en' => [
250
                '0 - there are no requirements',
251
                '1 - you can enter only numbers',
252
                '2 - you can enter any characters except numbers',
253
            ],
254
        ]);
255
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_CALC], [
256
            'ru' => [
257
                'false - нет требований',
258
                'true - работник увидит специальный сигнал что на капче изображено математическое выражение и необходимо ввести на него ответ',
259
            ],
260
            'en' => [
261
                'false - there are no requirements',
262
                'true - the employee will see a special signal on the captcha depicts a mathematical expression and you need to enter the answer',
263
            ],
264
        ]);
265
        $this->wiki->setText(['field', 'slug', static::PARAM_SLUG_ENUM, static::ACTION_FIELD_LANGUAGE], [
266
            'ru' => [
267
                'en - англоязычная очередь',
268
                'rn - группа стран Россия, Украина, Беларусь, Казахстан',
269
            ],
270
            'en' => [
271
                'en - English turn',
272
                'rn - a group of countries Russia, Ukraine, Belarus, Kazakhstan',
273
            ],
274
        ]);
275
        $this->wiki->setText(['field', 'main', 'desc', static::ACTION_FIELD_LANGUAGE], [
276
            'ru' => 'Определяет язык очереди, в которую должна попасть капча.',
277
            'en' => 'Determines the language of the queue to which you want to get captcha.',
278
        ]);
279
        $this->wiki->setText(['menu', 'from_service'], [
280
            AnticaptchaReCaptchaProxeless::class,
281
            AnticaptchaReCaptcha::class,
282
        ]);
283
    }
284
285
    /**
286
     * @throws DeCaptchaErrors
287
     *
288
     * @return bool
289
     */
290
    protected function requestRecognize()
291
    {
292
        return $this->requestRepeat(static::ACTION_RECOGNIZE, static::DECODE_ACTION_RECOGNIZE, static::PARAM_SPEC_CAPTCHA, static::DECODE_PARAM_CAPTCHA, static::RESPONSE_RECOGNIZE_OK, static::SLEEP_RECOGNIZE, static::RESPONSE_RECOGNIZE_REPEAT, static::DECODE_PARAM_ERROR);
293
    }
294
295
    /**
296
     * @throws DeCaptchaErrors
297
     *
298
     * @return bool
299
     */
300
    protected function requestCode()
301
    {
302
        return $this->requestRepeat(static::ACTION_UNIVERSAL_WITH_CAPTCHA, static::DECODE_ACTION_GET, static::PARAM_SPEC_CODE, static::DECODE_PARAM_CODE, static::RESPONSE_GET_OK, static::SLEEP_GET, static::RESPONSE_GET_REPEAT, static::DECODE_PARAM_ERROR);
303
    }
304
305
    /**
306
     * Баланс
307
     *
308
     * @return float
309
     */
310
    public function getBalance()
311
    {
312
        $this->setParam(static::ACTION_FIELD_ACTION, static::ACTION_BALANCE);
313
        $response = $this->getResponse(static::ACTION_BALANCE);
314
        $result = $this->decodeResponse(static::DECODE_ACTION_BALANCE, $response);
315
        if ($result[static::DECODE_PARAM_RESPONSE] != 0) {
316
            return 0;
317
        }
318
319
        return (float) $result[static::DECODE_PARAM_BALANCE];
320
    }
321
}
322