SMS Nitro

Verificação por SMS em PHP

Um script completo em PHP 8 com a extensão cURL: compra um número temporário, espera o código e encerra o pedido.

Como receber um código de verificação por SMS em PHP?

Faça requisições cURL com o cabeçalho X-Api-Key: POST /v1/orders com corpo JSON para receber o número, consulte GET /v1/orders/{id} a cada 4 segundos até messages trazer o SMS e chame POST finish. Cancele quando nada chegar, para liberar o valor reservado.

Preparação

  • PHP 8.0 ou mais recente com as extensões curl e json.
  • Defina a chave no ambiente: SMSNITRO_API_KEY=...

Script completo

activation.php
<?php
// PHP 8+ with the cURL extension. Run: SMSNITRO_API_KEY=... php activation.php
const API = 'https://smsnitro.com/api/v1';

function api(string $method, string $path, ?array $body = null): array {
    $ch = curl_init(API . $path);
    curl_setopt_array($ch, [
        CURLOPT_CUSTOMREQUEST  => $method,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_TIMEOUT        => 30,
        CURLOPT_HTTPHEADER     => [
            'X-Api-Key: ' . getenv('SMSNITRO_API_KEY'),
            'Content-Type: application/json',
        ],
    ]);
    if ($body !== null) {
        curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($body));
    }
    $data = json_decode(curl_exec($ch), true);
    $status = curl_getinfo($ch, CURLINFO_RESPONSE_CODE);
    curl_close($ch);
    if ($status >= 400) {
        throw new RuntimeException("$status: " . ($data['detail'] ?? 'error'));
    }
    return $data;
}

echo 'Balance: ', api('GET', '/balance')['balance'], " USD\n";

$order = api('POST', '/orders', ['product' => 'telegram', 'country' => 'usa']);
echo "Number: {$order['phone']} (order {$order['id']})\n";

$deadline = time() + 600; // numbers stay reserved for up to 20 minutes
while (time() < $deadline) {
    $order = api('GET', "/orders/{$order['id']}");
    if ($order['messages']) {
        echo 'Code: ', end($order['messages'])['code'], "\n";
        api('POST', "/orders/{$order['id']}/finish");
        exit(0);
    }
    if (in_array($order['status'], ['CANCELED', 'TIMEOUT', 'BANNED', 'FINISHED'], true)) {
        exit("Ended without SMS: {$order['status']} (not charged)\n");
    }
    sleep(4); // poll every 3 to 5 seconds
}
api('POST', "/orders/{$order['id']}/cancel"); // refund the frozen amount
echo "No SMS: cancelled and refunded\n";

Usando num sistema web

  • Rode o laço de consulta numa fila de tarefas ou num comando de terminal, não dentro de uma requisição web.
  • Guarde o id do pedido; o front-end pergunta o status ao seu servidor.
  • Mantenha a chave no ambiente do servidor, nunca em templates ou JavaScript.

Páginas relacionadas

Receba seu código de verificação agora

Recarregue a partir de R$ 15 no Pix, escolha o app e o país e leia o SMS no navegador. Cobrado só quando o código chega.

Pegar um número