Bir uygulamaya üye olurken, internet bankacılığına girerken ya da online alışverişte ödeme onaylarken telefonunuza gelen 6 haneli kod… Buna OTP (One-Time Password), yani tek kullanımlık şifre denir. Bu yazıda OTP SMS nedir, nasıl çalışır ve kendi sitenizde ya da uygulamanızda güvenli bir doğrulama akışını nasıl kurarsınız, adım adım anlatıyoruz.
OTP, yalnızca bir kez ve kısa bir süre için geçerli olan rastgele bir koddur. Kullanıcı şifresini bilse bile, işlemi tamamlamak için telefonuna gelen kodu girmesi gerekir. Böylece "bildiği bir şey" (şifre) ile "sahip olduğu bir şey" (telefon) birleşir. Buna iki adımlı doğrulama denir.

random_int(100000, 999999) gibi kriptografik olarak güvenli bir fonksiyon kullanın. rand() ya da tarih/saatten türetilmiş kodlar tahmin edilebilir.
OTP mesajı kısa, net ve dolandırıcılığa karşı uyarıcı olmalı. Örnek:
482913 doğrulama kodunuzdur. Kod 3 dakika geçerlidir. Bu kodu kimseyle paylaşmayın; MAGAZAM çalışanları sizden asla kod istemez.
Kullanıcı kodu bekleyen ekranın karşısında oturuyor. 30 saniyeden uzun süren her bekleme, kayıt formunun yarıda bırakılması demek. Bu yüzden OTP gönderimlerinde:
<?php
session_start();
// 1) Kod üret ve gönder
$kod = (string) random_int(100000, 999999);
$_SESSION['otp_hash'] = password_hash($kod, PASSWORD_DEFAULT);
$_SESSION['otp_bitis'] = time() + 180; // 3 dakika
$_SESSION['otp_deneme'] = 0;
$mesaj = $kod . ' doğrulama kodunuzdur. 3 dakika geçerlidir. Kimseyle paylaşmayın.';
// bizimSmsGonder([$telefon], $mesaj); // API yazımızdaki fonksiyon
// 2) Kullanıcının girdiği kodu doğrula
function otpDogrula(string $girilen): bool
{
if (empty($_SESSION['otp_hash']) || time() > $_SESSION['otp_bitis']) return false;
if (++$_SESSION['otp_deneme'] > 5) { unset($_SESSION['otp_hash']); return false; }
if (password_verify($girilen, $_SESSION['otp_hash'])) { unset($_SESSION['otp_hash']); return true; }
return false;
}
Gönderim fonksiyonunun tamamı için SMS API entegrasyonu yazımıza ve API dokümanına göz atabilirsiniz.
Hayır. Doğrulama kodu, kullanıcının kendi başlattığı bir işlem için gönderilen bilgilendirme mesajıdır; ticari ileti onayı gerektirmez. Ancak aynı mesaja kampanya ya da indirim bilgisi eklerseniz ticari iletiye dönüşür. OTP mesajlarını her zaman sade tutun.
6 hane, tahmin edilme ihtimalini 1/1.000.000'a indirir ve günümüzde standart kabul edilir. 4 hane yalnızca deneme sınırı çok sıkı tutulan düşük riskli işlemler için düşünülebilir.
Önce numaranın doğru formatta olduğundan emin olun, ardından iletim raporunu kontrol edin. Telefon kapalıysa mesaj, geçerlilik süresi boyunca tekrar denenir.
Yukarıdaki gibi kısa bir mesaj 1 kredi harcar. Uzun uyarı metinleri eklemek mesajı 2 boya çıkarabilir; karakter sayısını kontrol edin.
Üyelik ve ödeme süreçleriniz için hızlı, başlıklı OTP gönderimi kurmak isterseniz ücretsiz üye olun ve API anahtarınızı panelden alın.