PHP code example of shamanzpua / idempotency-engine
1. Go to this page and download the library: Download shamanzpua/idempotency-engine 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/ */
shamanzpua / idempotency-engine example snippets
use Shamanzpua\Idempotency\Core\Engine\DefaultIdempotencyEngine;
use Shamanzpua\Idempotency\Core\Model\ExecutionOptions;
use Shamanzpua\Idempotency\Core\Policy\DefaultExecutionPolicy;
use Shamanzpua\Idempotency\Core\Service\ExecutionRunner;
use Shamanzpua\Idempotency\Infrastructure\Fingerprint\Sha256FingerprintGenerator;
use Shamanzpua\Idempotency\Infrastructure\Serialization\JsonResultSerializer;
use Shamanzpua\Idempotency\Infrastructure\Store\Pdo\PdoIdempotencyStore;
use Shamanzpua\Idempotency\Support\Clock\SystemClock;
$engine = new DefaultIdempotencyEngine(
store: new PdoIdempotencyStore(new PDO($dsn, $user, $password)),
fingerprintGenerator: new Sha256FingerprintGenerator(),
serializer: new JsonResultSerializer(),
policy: new DefaultExecutionPolicy(),
runner: new ExecutionRunner(),
clock: new SystemClock(),
);
$result = $engine->execute(
key: $idempotencyKey, // e.g. the Idempotency-Key request header
operation: fn () => $payments->charge($order),
options: new ExecutionOptions(
scope: 'payments',
payload: $requestBody, // fingerprint source for mismatch detection
),
);
use Shamanzpua\Idempotency\Core\ValueObject\Ttl;
use Shamanzpua\Idempotency\Enum\FailedStrategy;
use Shamanzpua\Idempotency\Enum\InProgressStrategy;
new ExecutionOptions(
scope: 'webhooks', // namespace for keys (default: "default")
payload: $payload, // fingerprint source
ttl: Ttl::fromSeconds(300), // claim TTL; choose >= worst-case operation duration
resultTtl: Ttl::fromSeconds(86_400), // optional: how long the result stays replayable
inProgressStrategy: InProgressStrategy::WAIT, // or THROW (default)
failedStrategy: FailedStrategy::RETRY, // or THROW (default)
maxRetries: 2,
waitTimeoutMs: 2_000,
);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.