1. Go to this page and download the library: Download captchala/captchala-php library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
captchala / captchala-php example snippets
use Captchala\Client;
// Create client
$client = new Client('your_app_key', 'your_app_secret');
// Validate token
$result = $client->validate($token);
if ($result->isValid()) {
// Verification passed
if ($result->isOffline()) {
// Offline verification - may need additional risk control
}
} else {
// Verification failed
echo $result->getError();
}
$result = $client->validate($token, false, $request->ip());
if ($result->isValid()) {
// ... let the request through ...
}
$args = $result->getCaptchaArgs();
// [
// 'platform' => 'web', // web / android / ios / flutter / windows / ...
// 'user_ip' => '1.2.3.4', // end-user IP at solve time
// 'referer' => 'https://...', // web: solve page URL (null on native)
// 'pkg' => null, // native: app package id (null on web)
// 'solved_at' => 1750000000, // unix seconds
// 'risk_score' => 12, // 0-100, higher = riskier
// ]
$result = $client->validate($token);
if ($result->isValid() && $result->getUid() !== $expectedUserId) {
// pass_token was issued for a different user — reject
}
$issue = $client->issueServerToken('login', $request->ip(), 300, 5, $user->id);
if (!$issue->isOk()) {
return ['error' => $issue->getError()]; // rate_limit_exceeded, ...
}
return ['server_token' => $issue->getToken()]; // hand to browser
use Captchala\Client;
// Validation in login/register scenarios
function handleLogin(array $data): bool
{
$client = new Client(
getenv('CAPTCHALA_APP_KEY'),
getenv('CAPTCHALA_APP_SECRET')
);
$result = $client->validate($data['captcha_token']);
if (!$result->isValid()) {
throw new Exception('Captcha verification failed: ' . $result->getError());
}
// Additional risk control for offline verification
if ($result->isOffline()) {
// Log for monitoring
error_log('Offline captcha verification: ' . json_encode($result->toArray()));
// Optional: Restrict sensitive operations for client-only tokens
if ($result->isClientOnly()) {
// Add extra verification or limit sensitive operations
}
}
// Continue with login logic...
return true;
}
namespace App\Http\Middleware;
use Closure;
use Captchala\Client;
class ValidateCaptcha
{
private Client $captcha;
public function __construct()
{
$this->captcha = new Client(
config('services.captchala.key'),
config('services.captchala.secret')
);
}
public function handle($request, Closure $next)
{
$token = $request->input('captcha_token');
if (!$token) {
return response()->json(['error' => 'missing_captcha_token'], 400);
}
$result = $this->captcha->validate($token);
if (!$result->isValid()) {
return response()->json([
'error' => 'captcha_failed',
'message' => $result->getError(),
], 400);
}
// Store for later use
$request->attributes->set('captcha_offline', $result->isOffline());
$request->attributes->set('captcha_client_only', $result->isClientOnly());
return $next($request);
}
}
use Captchala\Cms\Action;
$server = $client->issueServerToken(Action::LOGIN, $request->ip());
use Captchala\Cms\Widget;
use Captchala\Cms\Action;
echo Widget::renderHtml($appKey, $serverToken, Action::LOGIN, [
'product' => 'bind',
'lang' => 'ja',
'hidden_input' => true, // also emits <input name="captchala_token">
]);
use Captchala\Cms\Errors;
$result = $client->validate($_POST['captchala_token']);
if (!$result->isValid()) {
show_form_error(Errors::standardize($result->getError()));
}
bash
composer
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.