PHP code example of hostme / nimiq-payment-validator
1. Go to this page and download the library: Download hostme/nimiq-payment-validator 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/ */
hostme / nimiq-payment-validator example snippets
use HostMe\NimiqLib\Validator\Gateway\NimiqWatchApiGateway;
use GuzzleHttp\Client;
use HostMe\NimiqLib\Validator\TransactionValidator;
use Psr\Log\LoggerInterface;
// Initialize Guzzle HTTP client
$httpClient = new Client();
// Initialize the API gateway (default is 'main' network)
$apiGateway = new NimiqWatchApiGateway('main', null, $httpClient);
// Initialize logger (e.g., Monolog)
$logger = new \Monolog\Logger('nimiq_logger');
$logger->pushHandler(new \Monolog\Handler\StreamHandler('path/to/your.log', \Monolog\Logger::INFO));
// Define receiver's Nimiq address
$receiverAddress = 'NQ01 RECEIVER';
// Initialize Transaction Validator with default strategies and thresholds
$validator = new TransactionValidator(
$apiGateway,
$receiverAddress,
[], // Empty array to use default strategies
$logger
);
use HostMe\NimiqLib\Payment\Strategy\UnderpaidStrategy;
use HostMe\NimiqLib\Payment\Strategy\OverpaidStrategy;
use HostMe\NimiqLib\Payment\Strategy\PaidStrategy;
use HostMe\NimiqLib\Payment\PaymentStateComputer;
// Define custom thresholds
$underpaidThreshold = 200.0; // e.g., 200 units
$overpaidThreshold = 200.0; // e.g., 200 units
// Initialize payment strategies
$strategies = [
new UnderpaidStrategy($underpaidThreshold, 120),
new OverpaidStrategy($overpaidThreshold, 120),
new PaidStrategy(120), // 120 => Min Confirmations
];
// Initialize PaymentStateComputer with custom strategies
$paymentStateComputer = new PaymentStateComputer($strategies);
// Initialize Transaction Validator with custom PaymentStateComputer
$validator = new TransactionValidator(
$apiGateway,
$receiverAddress,
$strategies,
$logger
);
use HostMe\NimiqLib\Model\PaymentResult;
$transactionHash = 'ABCD1234...'; // Replace with actual transaction hash
$expectedAmount = '500000'; // Expected amount in smallest units (e.g., uloki)
try {
// Validate the transaction
$paymentResult = $validator->validateTransaction($transactionHash, $expectedAmount);
// Handle the result
echo "Payment State: " . $paymentResult->getState();
if ($paymentResult->getMessage()) {
echo " - " . $paymentResult->getMessage();
}
} catch (\HostMe\NimiqLib\Exception\InvalidTransactionHashException $e) {
echo "Error: " . $e->getMessage();
}
use HostMe\NimiqLib\Model\PaymentState;
if ($paymentResult->getState() === PaymentState::OVERPAID) {
echo "Payment exceeded the Result->getMessage();
} elseif ($paymentResult->getState() === PaymentState::PAID) {
echo "Payment is exact.";
} else {
echo "Payment validation failed: " . $paymentResult->getMessage();
}
namespace HostMe\NimiqLib\Model;
class PaymentState
{
public const PAID = 'PAID';
public const OVERPAID = 'OVERPAID';
public const UNDERPAID = 'UNDERPAID';
public const FAILED = 'FAILED';
public const NOT_FOUND = 'NOT_FOUND';
}
use HostMe\NimiqLib\Validator\Gateway\NimiqWatchApiGateway;
use GuzzleHttp\ClientInterface;
// Initialize Guzzle HTTP client
$httpClient = new \GuzzleHttp\Client();
// Initialize the API gateway for the main network
$apiGateway = new NimiqWatchApiGateway('main', null, $httpClient);
// For the test network, specify 'test' and a custom API domain if needed
$testApiGateway = new NimiqWatchApiGateway('test', null, $httpClient);
use HostMe\NimiqLib\Validator\Gateway\ApiGatewayInterface;
use HostMe\NimiqLib\Model\Transaction;
class CustomApiGateway implements ApiGatewayInterface
{
public function getTransactionByHash(string $transactionHash): ?Transaction
{
// Implement your custom API interaction here
}
}
$customApiGateway = new CustomApiGateway();
$validator = new TransactionValidator(
$customApiGateway,
'NQ01 RECEIVER',
$strategies,
$logger
);
ostMe\NimiqLib\Validator\Gateway\NimiqWatchApiGateway;
use HostMe\NimiqLib\Validator\TransactionValidator;
use HostMe\NimiqLib\Payment\Strategy\UnderpaidStrategy;
use HostMe\NimiqLib\Payment\Strategy\OverpaidStrategy;
use HostMe\NimiqLib\Payment\Strategy\PaidStrategy;
use GuzzleHttp\Client;
use Monolog\Logger;
use Monolog\Handler\StreamHandler;
// Initialize components
$httpClient = new Client();
$apiGateway = new NimiqWatchApiGateway('main', null, $httpClient);
$logger = new Logger('nimiq_logger');
$logger->pushHandler(new StreamHandler('path/to/your.log', Logger::INFO));
$receiverAddress = 'NQ01 RECEIVER';
// Define payment strategies with thresholds
$underpaidThreshold = 100.0; // e.g., 100 units
$overpaidThreshold = 100.0; // e.g., 100 units
$strategies = [
new UnderpaidStrategy($underpaidThreshold, 120),
new OverpaidStrategy($overpaidThreshold, 120),
new PaidStrategy(120),
];
// Initialize Transaction Validator
$validator = new TransactionValidator(
$apiGateway,
$receiverAddress,
$strategies,
$logger
);
// Transaction details
$transactionHash = 'ABCD1234...'; // Replace with actual transaction hash
$expectedAmount = '500000'; // Expected amount in smallest units
try {
// Validate the transaction
$paymentResult = $validator->validateTransaction($transactionHash, $expectedAmount);
// Handle the result
echo "Payment State: " . $paymentResult->getState() . PHP_EOL;
if ($paymentResult->getMessage()) {
echo "Message: " . $paymentResult->getMessage() . PHP_EOL;
}
} catch (\HostMe\NimiqLib\Exception\InvalidTransactionHashException $e) {
echo "Error: " . $e->getMessage() . PHP_EOL;
}
use HostMe\NimiqLib\Payment\Strategy\UnderpaidStrategy;
use HostMe\NimiqLib\Payment\Strategy\OverpaidStrategy;
use HostMe\NimiqLib\Payment\Strategy\PaidStrategy;
use HostMe\NimiqLib\Payment\PaymentStateComputer;
// Define custom thresholds
$underpaidThreshold = 200.0;
$overpaidThreshold = 200.0;
// Initialize custom strategies
$strategies = [
new UnderpaidStrategy($underpaidThreshold, 120),
new OverpaidStrategy($overpaidThreshold, 120),
new PaidStrategy(120),
];
// Initialize PaymentStateComputer
$paymentStateComputer = new PaymentStateComputer($strategies);
// Use PaymentStateComputer in TransactionValidator as shown previously
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.