Anda mungkin tidak dapat mendaftar dengan kami sekarang karena saat ini kami mengalami downtime 15 menit pada produk kami. Meminta Anda untuk bersabar dengan kami.

Rumah
Right Chevron Icon
Blog
Right Chevron IconRight Chevron Icon
API Verifikasi OTP untuk Pengembang: Node.js, Python, PHP, Contoh Kode Java (2026)

API Verifikasi OTP untuk Pengembang: Node.js, Python, PHP, Contoh Kode Java (2026)

Kashika Mishra

9
menit membaca

OTP API untuk pengembang Node Python PHP contoh kode Java thumbnail untuk blog Message Central

Key Takeways

  • Setiap Integrasi API OTP turun ke dua titik akhir REST: mengirim (mengembalikan ID verifikasi) dan memvalidasi (menerima ID dan kode, mengembalikan status terverifikasi).
  • Integrasi kualitas produksi menangani 5 kategori kesalahan spesifik: nomor tidak valid, ketidakcocokan kode, kedaluwarsa, tarif terbatas, terdeteksi penipuan.
  • Gunakan webhook untuk status pengiriman asinkron daripada polling, dan selalu verifikasi header tanda tangan.
  • Daftar periksa produksi 12 item sebelum membalik bendera fitur: rahasia, libphonenumber, SMS Retriever, WebOTP, dropdown negara, pengatur waktu kirim ulang, fallback multi-saluran, webhook yang ditandatangani, peringatan, batas kecepatan lapisan aplikasi, penanganan STOP, runbook.
  • Pilih bahasa yang digunakan layanan autentikasi Anda — REST adalah REST, SDK sebagian besar kosmetik.

Jika Anda seorang pengembang yang mengevaluasi API OTP untuk aplikasi yang ditargetkan AS pada tahun 2026, Anda tidak menginginkan halaman pemasaran lain, Anda ingin kode yang berfungsi. Panduan ini adalah panduan langsung untuk mengintegrasikan API verifikasi nomor telepon ke dalam aplikasi produksi: referensi titik akhir REST, sampel kode kerja di Node.js, Python, PHP, dan Java, penanganan kesalahan, penanganan webhook, pengujian kotak pasir, dan daftar periksa produksi sebelum Anda membalik flag fitur.

Semua contoh menggunakan titik akhir REST VerifyNow, tetapi polanya ditransfer ke sebagian besar API OTP modern (Verifikasi Twilio, Verifikasi Vonage, Verifikasi Sinch) dengan sedikit perubahan. Jika masalah khusus AS berlaku (perutean 10DLC, opt-in TCPA, perlindungan penipuan), kami akan menyebutnya secara sebaris.

Dua Titik Akhir yang Anda Butuhkan

Setiap aliran verifikasi OTP bermuara pada dua panggilan REST, terlepas dari penyedia:

  1. POST/verifikasi/kirim: menghasilkan OTP, memilih saluran optimal (SMS, WhatsApp, suara), dan mengirim kode ke ponsel pengguna. Mengembalikan ID verifikasi untuk panggilan berikutnya.
  2. POST/verifikasi/validasi: menerima ID verifikasi dan kode yang dimasukkan pengguna. Mengembalikan sukses/kegagalan ditambah kode kesalahan pada kegagalan.

Segala sesuatu yang lain (preferensi saluran, kebijakan coba ulang, alihan perlindungan penipuan) adalah konfigurasi pada panggilan kirim. Sebagian besar penyedia mengekspos 8-12 parameter opsional; defaultnya masuk akal untuk ~ 80% kasus penggunaan.

Node.js: Kirim dan Verifikasi OTP

//Instal: npm instal axios
const axios = membutuhkan ('axios');

const API_BASE = 'https://cpaas.messagecentral.com/verification/v3';
const API_KEY = Proses.env.mc_API_KEY;

fungsi async sendOTP (PhoneNumber, saluran = 'SMS') {
respons const = menunggu axios.post (`$ {API_BASE} /send`, {
Kode Negara: '1',
Nomor Ponsel: Nomor Telepon,
FlowType: saluran,//'SMS' | 'WHATSAPP' | 'SUARA'
Panjang OTPl: 6,
}, {
header: {'AuthToken': API_KEY}
});
mengembalikan response.data.data.verificationId;
}

fungsi asinkron verifyOTP (VerificationId, kode) {
respons const = menunggu axios.post (`$ {API_BASE} /validate`, {
ID Verifikasi,
kode,
}, {
header: {'AuthToken': API_KEY}
});
mengembalikan response.data.data.verificationStatus === 'DIVERIFIKASI';
}

//Penggunaan dalam aliran autentikasi Anda
const verificationId = tunggu sendOTP ('5551234567');
//... pengguna memasukkan kode...
const diverifikasi = tunggu verifyOTP (VerificationId, '482917');

Python: Kirim dan Verifikasi OTP

# Instal: permintaan pemasangan pip
impor os
permintaan impor

API_BASE = 'https://cpaas.messagecentral.com/verification/v3'
API_KEY = os.environ ['MC_API_KEY']

def send_otp (nomor telepon, saluran = 'SMS'):
tanggapan = requests.post (
f' {API_BASE} /kirim ',
json= {
'Kode negara': '1',
'Nomor mobil': nomor_telepon,
'FlowType': saluran,
'Panjang utakhir': 6,
},
headers= {'AuthToken': API_KEY}
)
tanggapan.raise_untuk_status ()
kembalikan response.json () ['data'] ['VerificationId']

def verify_otp (verifikasi_id, kode):
tanggapan = requests.post (
f' {API_BASE} /validate',
json= {
'VerifikasiId': id verifikasi_,
'kode': kode,
},
headers= {'AuthToken': API_KEY}
)
tanggapan.raise_untuk_status ()
mengembalikan response.json () ['data'] ['verificationStatus'] == 'DIVERIFIKASI'

PHP: Kirim dan Verifikasi OTP

<? php
//Menggunakan cURL — tidak diperlukan dependensi eksternal.

tentukan ('API_BASE', 'https://cpaas.messagecentral.com/verification/v3');
tentukan ('API_KEY', getenv ('MC_API_KEY'));

fungsi sendOTP ($PhoneNumber, $channel = 'SMS') {
$ch = curl_init (API_BASE. '/ kirim');
curl_setopt_array ($ch, [
CURLOPT_RETURNTRANSFER => benar,
CURLOPT_POST => benar,
CURLOPT_HTTPHEADER => [
'AuthToken: '. KUNCI API,
'Jenis Konten: aplikasi/json',
],
CURLOPT_POSTFIELDS => json_encode ([
'CountryCode' => '1',
'Nomor mobil' => $nomor telepon,
'flowType' => $saluran,
'Otplength' => 6,
]),
]);
$response = json_decode (curl_exec ($ch), benar);
curl_close ($ch);
mengembalikan $response ['data'] ['verificationId'];
}

fungsi verifyOTP ($verificationId, $kode) {
$ch = curl_init (API_BASE. '/ memvalidasi');
curl_setopt_array ($ch, [
CURLOPT_RETURNTRANSFER => benar,
CURLOPT_POST => benar,
CURLOPT_HTTPHEADER => [
'AuthToken: '. KUNCI API,
'Jenis Konten: aplikasi/json',
],
CURLOPT_POSTFIELDS => json_encode ([
'VerificationId' => $VerificationId,
'kode' => $kode,
]),
]);
$response = json_decode (curl_exec ($ch), benar);
curl_close ($ch);
mengembalikan $response ['data'] ['verificationStatus'] === 'DIVERIFIKASI';
}

Java: Kirim dan Verifikasi OTP

//Menggunakan java.net.http (JDK 11+).
impor java.net.URI;
impor java.net.http.HttpClient;
impor java.net.http.HttpRequest;
impor java.net.http.HttpResponse;
impor com.fasterXml.Jackson.Databind.ObjectMapper;
impor com.fasterxml.jackson.databind.jsonnode;

kelas publik verifyNowClient {
String final statis pribadi API_BASE = "https://cpaas.messagecentral.com/verification/v3 “;
String final statis pribadi API_KEY = System.getEnv (“MC_API_KEY”);
klien HttpClient final statis pribadi = httpClient.newHttpClient ();
mapper ObjectMapper final statis pribadi = objectMapper baru ();

String statis publik sendoTP (String PhoneNumber, saluran String) melempar Pengecualian {
Badan string = mapper.writeValueAsString (java.util.map.of (
“Kode Negara”, “1",
“Nomor Ponsel”, Nomor Telepon,
“FlowType”, saluran,
“Panjang OTPl”, 6
));
Permintaan HttpRequest = HttpRequest.newBuilder ()
.uri (uri.create (API_BASE + “/kirim”))
.header (“AuthToken”, API_KEY)
.header (“Jenis Konten”, “aplikasi/json”)
.POST (httpRequest.bodyPublishers.ofString (badan))
.membangun ();
HttpResponse <String>resp = client.send (req, httpResponse.bodyHandlers.ofString ());
kembalikan mapper.readTree (resp.body ()) .get (“data”) .get (“VerificationId”) .asText ();
}

public static boolean verifyOTP (String verificationId, kode String) melempar Pengecualian {
Badan string = mapper.writeValueAsString (java.util.map.of (
“ID verifikasi”, ID verifikasi,
“kode”, kode
));
Permintaan HttpRequest = HttpRequest.newBuilder ()
.uri (URI.Create (API_BASE + “/validasi”))
.header (“AuthToken”, API_KEY)
.header (“Jenis Konten”, “aplikasi/json”)
.POST (httpRequest.bodyPublishers.ofString (badan))
.membangun ();
HttpResponse <String>resp = client.send (req, httpResponse.bodyHandlers.ofString ());
kembalikan “DIVERIFIKASI” .( mapper.readTree (resp.body ())
.get (“data”) .get (“VerifikasiStatus”) .astext ());
}
}

Penanganan Kesalahan yang Sebenarnya Anda Butuhkan

Kesalahan yang penting dalam produksi bukanlah kesalahan di jalan bahagia. Lima yang harus Anda tangani:

Format nomor telepon tidak valid

Mengembalikan HTTP 400 dengan kode kesalahan NOMOR_TIDAK VALID. Gunakan Google nomor telepon lib untuk menormalkan sebelum memanggil API.

Ketidakcocokan kode

Pengguna memasukkan OTP yang salah. Mengembalikan HTTP 200 dengan VerificationStatus: “GAGAL”. Izinkan hingga 3-5 upaya sebelum membatalkan ID verifikasi.

Kode kedaluwarsa

Pengguna menunggu terlalu lama. Pengembalian VerificationStatus: “KEDALUWARSA”. Tampilkan CTA “Kirim Ulang kode” di UI Anda.

Tarif terbatas

Nomor telepon yang sama meminta terlalu banyak OTP. Mengembalikan HTTP 429. Jangan coba lagi segera - mundur secara eksponensial.

Pemompaan SMS terdeteksi

Mengembalikan HTTP 403 dengan kode kesalahan PENIPUAN_TERDETEKSI. Jangan coba lagi. Tandai permintaan di pipeline deteksi penipuan Anda.

Webhook untuk Status Pengiriman

Untuk penerapan produksi, dengarkan panggilan balik pengiriman asinkron daripada polling. Konfigurasikan URL webhook di dasbor penyedia Anda, lalu tangani:

//Contoh handler webhook Express.js
app.post ('/webhooks/verifynow', (req, res) => {
const {VerificationId, DeliveryStatus, saluran, latencyMS} = req.body;

//Bertahan untuk analitik
db.DeliveryEvents.insert ({
ID Verifikasi,
DeliveryStatus,//'TERKIRIM' | 'GAGAL' | 'TERTUNDA'
saluran,//'SMS' | 'WHATSAPP' | 'SUARA'
LatensiMS,
stempel waktu: Tanggal baru (),
});

//Opsional: memicu fallback ke saluran alternatif pada kegagalan
if (DeliveryStatus === 'GAGAL' && saluran === 'SMS') {
SendOtpFallback (VerifikasiID, 'WHATSAPP');
}

res.status (200) .end ();
});

Selalu verifikasi keaslian webhook menggunakan header tanda tangan yang dikirim penyedia Anda - jangan pernah mempercayai webhook yang tidak ditandatangani dalam produksi.

Pengujian Sandbox Sebelum Produksi

Sebelum membalik bendera fitur, validasi ujung ke ujung di kotak pasir:

  • Uji nomor telepon: sebagian besar Penyedia OTP di AS menawarkan nomor tes cadangan yang selalu berhasil/gagal/batas waktu secara deterministik.
  • Pengujian jaringan: verifikasi firewall Anda mengizinkan HTTPS keluar ke titik akhir API penyedia (biasanya port 443).
  • Pengujian batas laju: sengaja memicu batas tingkat per angka dan mengonfirmasi penanganan kesalahan Anda menampilkan pesan yang berguna.
  • Pengujian latensi: ukur waktu pulang-pergi untuk mengirim dan memverifikasi di bawah beban khas Anda.
  • Pengujian pengiriman Webhook: menggunakan layanan seperti webhook.site untuk memeriksa callback sebelum mengarahkannya ke produksi.

Kotak pasir VerifyNow menggunakan kredit uji gratis tanpa kartu kredit, sehingga Anda dapat menjalankan integrasi penuh dalam pra-produksi tanpa berkomitmen pada kontrak.

Daftar Periksa Produksi Sebelum Peluncuran

Dua belas item untuk diverifikasi sebelum membalik bendera fitur:

  1. Kunci API disimpan dalam pengelola rahasia (bukan kontrol sumber)
  2. libphonenumber diinstal dan digunakan untuk normalisasi sisi klien
  3. SMS Retriever API terintegrasi di Android (melewatkan entri kode manual)
  4. WeBotp API terintegrasi di web (isi otomatis dari notifikasi)
  5. Dropdown kode negara default ke Geo-IP pengguna
  6. Tombol “Kirim ulang kode” disembunyikan selama 30 detik pertama, kemudian terungkap
  7. Fallback multi-saluran diaktifkan (SMS → WhatsApp → Suara)
  8. Webhook handler mengotentikasi header tanda tangan
  9. Peringatan pengiriman gagal dihubungkan ke Slack/PagerDuty
  10. Pembatasan tingkat per IP dan per angka di lapisan aplikasi Anda (bukan hanya penyedia)
  11. Penanganan stop-keyword diuji (kepatuhan TCPA)
  12. Runbook produksi untuk skenario “pengiriman OTP rusak” ditulis dan disimpan

pertanyaan umum

Bahasa mana yang memiliki SDK terbaik untuk API OTP?

Sebagian besar penyedia menawarkan SDK resmi di Node, Python, Java, PHP, Go, dan Ruby dengan paritas fitur. Perbedaan antara SDK sebagian besar bersifat kosmetik — REST adalah REST. Pilih bahasa yang digunakan tim Anda untuk menulis layanan autentikasi. Jika tim Anda menulis di Rust atau .NET, memanggil titik akhir REST secara langsung dengan klien HTTP bahasa (seperti dalam contoh Java di atas) sangat mudah.

Bagaimana cara menangani fallback OTP ke saluran yang berbeda pada kegagalan?

Dua pola: (a) mengkonfigurasi fallback sisi penyedia otomatis dengan mencantumkan saluran dalam urutan prioritas pada panggilan kirim, dan penyedia mencoba masing-masing secara berurutan pada kegagalan pengiriman; (b) mendengarkan webhook pengiriman dan memicu panggilan kirim baru dengan saluran yang berbeda dari aplikasi Anda. Yang pertama lebih sederhana; yang kedua memberi Anda lebih banyak kontrol. VerifikasiSekarang mendukung kedua pola.

Haruskah saya menerapkan UI OTP di web dengan WeBotp?

Ya, di mana browser mendukungnya. Google WebOTP API mengisi kode secara otomatis dari notifikasi SMS di Chrome dan Edge. Pesan OTP harus diformat dengan pola khusus (misalnya, “Kode Anda 123456 #abc .example.com #482917 “) agar browser dapat mengenalinya. Kembali dengan anggun ke entri manual pada browser yang tidak didukung.

Dapatkan Kunci Sandbox dalam Kurang dari Satu Menit

Cara tercepat untuk memvalidasi salah satu kode di atas adalah menjalankannya terhadap kotak pasir nyata. VerifyNow untuk AS memberi Anda kredit tes gratis tanpa kartu kredit, titik akhir REST didokumentasikan ujung ke ujung, dan SDK dalam 6 bahasa. Sebagian besar tim mengirimkan integrasi OTP pertama mereka dalam beberapa jam setelah pendaftaran.

Frequently Asked Questions

How do I choose the right OTP service provider?

When selecting an OTP SMS service provider, focus on:

  • Delivery reliability and speed
  • Global coverage and local compliance
  • Multi-channel support and fallback
  • Ease of integration
  • Pricing transparency

The right provider should not just send OTPs but ensure they are delivered consistently across regions and networks.

Not all OTP SMS service providers are built the same.

Some optimize for cost, others for flexibility but very few balance delivery reliability, global coverage and ease of use. And that balance is what actually impacts whether your users receive OTPs on time.

If OTP is critical to your product, focus on:

  • reliable delivery (not just sending)
  • multi-channel fallback
  • scalability across regions

Try It for Yourself

Why is multi-channel OTP important?

Relying only on SMS can lead to failed verifications due to:

  • network issues
  • telecom filtering
  • device limitations

Multi-channel OTP systems (SMS + WhatsApp + voice) improve success rates by automatically retrying through alternative channels if one fails.

What is the best OTP SMS service provider in India?

Some of the commonly used OTP SMS service providers in India include MSG91, Exotel and 2Factor.

That said, India has additional challenges like DLT compliance and operator filtering. Platforms that handle these internally while also offering fallback options tend to provide more consistent OTP delivery.

Which is the cheapest OTP service provider?

Providers like Fast2SMS and 2Factor are often considered among the cheapest OTP service providers, especially in India.

However, lower pricing can come with trade-offs such as:

  • lower route quality
  • higher delivery delays
  • limited fallback options

For mission-critical OTP flows, reliability often matters more than just cost.

Which is the best OTP service provider in 2026?

The best OTP service provider depends on your use case.

  • For global scale and flexibility: Twilio, Infobip
  • For cost-effective APIs: Plivo
  • For India-focused SMS OTP: MSG91, Exotel

However, platforms like Message Central stand out by balancing global coverage, multi-channel fallback and ease of deployment, making them suitable for businesses that prioritize delivery reliability.

What is an OTP service provider?

An OTP service provider enables businesses to send temporary verification codes to users via channels like SMS, WhatsApp or voice to authenticate logins, transactions or sign-ups.

Modern OTP SMS service providers go beyond just sending messages, they ensure reliable delivery using optimized routing, retries and sometimes multi-channel fallback.

Siap untuk Memulai?

Bangun saluran komunikasi yang efektif dengan Message Central.

Newsletter Mingguan Langsung ke Kotak Masuk Anda

Envelope Icon
Terima kasih! Kiriman Anda telah diterima!
Ups! Ada yang tidak beres saat mengirimkan formulir.
+17178379132
phone-callphone-call