PHP code example of virtualsmslabs / php-sdk

1. Go to this page and download the library: Download virtualsmslabs/php-sdk 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/ */

    

virtualsmslabs / php-sdk example snippets




irtualSMS\VirtualSMSClient;
use VirtualSMS\Constants\ActivationStatus;

$client = new VirtualSMSClient('YOUR_API_KEY', 'https://api.virtualsms.de');

// Check balance
$balance = $client->getBalance();
echo "Balance: $" . $balance->balance . PHP_EOL;

// Order a WhatsApp number in Brazil
$number = $client->getNumber('wa', 73, maxPrice: 2.00);
echo "Number: {$number->phoneNumber} (ID: {$number->activationId})" . PHP_EOL;

// Set status to ready (SMS sent)
$client->setStatus($number->activationId, ActivationStatus::READY);

// Poll for SMS code
$status = $client->getStatus($number->activationId);
if ($status->code !== null) {
    echo "SMS code: {$status->code}" . PHP_EOL;
    // Complete the activation
    $client->setStatus($number->activationId, ActivationStatus::COMPLETE);
}

$client = new VirtualSMSClient(
    string $apiKey,           // Your API key (s.de')
    ?TransportInterface $transport = null  // Optional custom transport
);

$balance = $client->getBalance();
echo $balance->balance; // 10.50

$number = $client->getNumber(
    service: 'wa',
    country: 73,
    maxPrice: 2.00,
    operator: 'claro',
    forward: true
);
echo $number->activationId;  // 123
echo $number->phoneNumber;   // 447777777777

use VirtualSMS\Constants\ActivationStatus;

$client->setStatus($activationId, ActivationStatus::READY);    // 1 - SMS sent
$client->setStatus($activationId, ActivationStatus::RETRY);    // 3 - Request another SMS
$client->setStatus($activationId, ActivationStatus::COMPLETE); // 6 - Finish
$client->setStatus($activationId, ActivationStatus::CANCEL);   // 8 - Cancel

$status = $client->getStatus($activationId);
echo $status->status;  // STATUS_OK, STATUS_WAIT_CODE, STATUS_CANCEL
echo $status->code;     // 123456 (null if not yet received)

ActivationStatus::READY    // 1 - SMS has been sent to the number
ActivationStatus::RETRY    // 3 - Request another SMS code
ActivationStatus::COMPLETE  // 6 - Finish activation
ActivationStatus::CANCEL    // 8 - Cancel activation

PoolProvider::ALPHA  // 'alpha'
PoolProvider::PRIME  // 'prime'
PoolProvider::GAMMA  // 'gamma'
PoolProvider::ZETA   // 'zeta'

use VirtualSMS\Exceptions\AuthenticationException;
use VirtualSMS\Exceptions\InsufficientBalanceException;
use VirtualSMS\Exceptions\NoNumbersException;
use VirtualSMS\Exceptions\ValidationException;
use VirtualSMS\Exceptions\ActivationException;
use VirtualSMS\Exceptions\RateLimitException;
use VirtualSMS\Exceptions\ServerException;
use VirtualSMS\Exceptions\VirtualSMSException;

try {
    $number = $client->getNumber('wa', 73);
} catch (AuthenticationException $e) {
    // BAD_KEY, BANNED, PURCHASE_RESTRICTED, SERVICE_RESTRICTED
} catch (InsufficientBalanceException $e) {
    // NO_BALANCE
} catch (NoNumbersException $e) {
    // NO_NUMBERS
} catch (ValidationException $e) {
    // WRONG_SERVICE, WRONG_COUNTRY, BAD_ACTION, BAD_STATUS, NO_PRICES, INVALID_PROVIDER
} catch (ActivationException $e) {
    // NO_ACTIVATION, WRONG_ACTIVATION_ID, EARLY_CANCEL_DENIED, RENEW_ACTIVATION_NOT_AVAILABLE
} catch (RateLimitException $e) {
    // CONCURRENT_LIMIT — check $e->retryAfter
} catch (ServerException $e) {
    // ERROR_SQL, unknown errors
}

$client->getBalance();

$info = $client->getRateLimitInfo();
if ($info !== null) {
    echo "Limit: {$info->limit}, Remaining: {$info->remaining}" . PHP_EOL;
}

use VirtualSMS\Exceptions\RateLimitException;

try {
    $client->getNumber('wa', 73);
} catch (RateLimitException $e) {
    echo "Rate limited. Retry after {$e->retryAfter} seconds." . PHP_EOL;
    echo "Limit: {$e->rateLimitLimit}, Remaining: {$e->rateLimitRemaining}" . PHP_EOL;
    // $e->rateLimitLimit and $e->rateLimitRemaining may be null if
    // the API did not 

use VirtualSMS\Transport\TransportInterface;
use VirtualSMS\Transport\Response;

class MyTransport implements TransportInterface
{
    public function send(string $url, array $headers = []): Response
    {
        // Your HTTP implementation
        return new Response(200, 'ACCESS_BALANCE:10.50');
    }
}

$client = new VirtualSMSClient('API_KEY', 'https://api.example.com', new MyTransport());
bash
composer