Test ortamında OTPMOCK_URL=https://api.otpmock.com tanımlayın, Netgsm istemcisini bu adrese yönlendirin ve Netgsm kimlik bilgisi olarak otpmock API anahtarınızı kullanın. Uygulama kodunuz değişmez; canlı ortam Netgsm ile göndermeye devam eder.
Kurulum
Resmi @netgsm/sms paketinin adres seçeneği yok, ama baseURL özelliği istemci oluşturulduktan sonra değiştirilebiliyor (yalnızca TypeScript tiplerinde private görünür). OTPMOCK_URL tanımlı değilse satır hiçbir şey yapmaz.
import { Netgsm } from "@netgsm/sms";
export const netgsm = new Netgsm({
username: process.env.NETGSM_USERNAME, // testte: otpmock API anahtarı
password: process.env.NETGSM_PASSWORD,
});
if (process.env.OTPMOCK_URL) (netgsm as any).baseURL = process.env.OTPMOCK_URL;import os
import requests
NETGSM_URL = os.environ.get("OTPMOCK_URL", "https://api.netgsm.com.tr")
requests.post(
f"{NETGSM_URL}/sms/rest/v2/send",
auth=(os.environ["NETGSM_USERNAME"], os.environ["NETGSM_PASSWORD"]), # username = testte: otpmock API anahtarı
json={"msgheader": "BASLIGIM", "encoding": "TR", "messages": [{"msg": f"Doğrulama kodunuz: {code}", "no": "5321234567"}]},
).raise_for_status()String base = System.getenv().getOrDefault("OTPMOCK_URL", "https://api.netgsm.com.tr");
String auth = Base64.getEncoder().encodeToString(
(System.getenv("NETGSM_USERNAME") + ":" + System.getenv("NETGSM_PASSWORD")).getBytes()); // username = testte: otpmock API anahtarı
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/sms/rest/v2/send"))
.header("Authorization", "Basic " + auth)
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(json)) // {"msgheader":"...","encoding":"TR","messages":[{"msg":"...","no":"5321234567"}]}
.build();// Netgsm has no official .NET SDK; call REST v2 with HttpClient.
var netgsmUrl = Environment.GetEnvironmentVariable("OTPMOCK_URL") ?? "https://api.netgsm.com.tr";
var user = Environment.GetEnvironmentVariable("NETGSM_USERNAME"); // testte: otpmock API anahtarı
var pass = Environment.GetEnvironmentVariable("NETGSM_PASSWORD");
var http = new HttpClient { BaseAddress = new Uri(netgsmUrl) };
http.DefaultRequestHeaders.Authorization = new("Basic",
Convert.ToBase64String(Encoding.UTF8.GetBytes($"{user}:{pass}")));
await http.PostAsJsonAsync("/sms/rest/v2/send", new
{
msgheader = "BASLIGIM", encoding = "TR",
messages = new[] { new { msg = $"Doğrulama kodunuz: {code}", no = "5321234567" } },
});use GuzzleHttp\Client;
$netgsmUrl = getenv('OTPMOCK_URL') ?: 'https://api.netgsm.com.tr';
(new Client())->post("$netgsmUrl/sms/rest/v2/send", [
'auth' => [getenv('NETGSM_USERNAME'), getenv('NETGSM_PASSWORD')], // username = testte: otpmock API anahtarı
'json' => ['msgheader' => 'BASLIGIM', 'encoding' => 'TR', 'messages' => [['msg' => "Doğrulama kodunuz: $code", 'no' => '5321234567']]],
]);require "net/http"
require "json"
# Netgsm has no official Ruby SDK; apps call REST v2, so only the host changes.
NETGSM_URL = ENV.fetch("OTPMOCK_URL", "https://api.netgsm.com.tr")
uri = URI("#{NETGSM_URL}/sms/rest/v2/send")
req = Net::HTTP::Post.new(uri, "Content-Type" => "application/json")
req.basic_auth(ENV["NETGSM_USERNAME"], ENV["NETGSM_PASSWORD"]) # username = testte: otpmock API anahtarı
req.body = { msgheader: "BASLIGIM", encoding: "TR", messages: [{ msg: "Doğrulama kodunuz: #{code}", no: "5321234567" }] }.to_json
res = Net::HTTP.start(uri.host, uri.port, use_ssl: true) { |h| h.request(req) }// Netgsm has no official Go SDK; call its HTTP API with net/http, only the host changes.
base := os.Getenv("OTPMOCK_URL")
if base == "" {
base = "https://api.netgsm.com.tr"
}
body, _ := json.Marshal(map[string]any{
"msgheader": os.Getenv("NETGSM_HEADER"), "encoding": "TR",
"messages": []map[string]string{{"msg": msg, "no": "5321234567"}},
})
req, _ := http.NewRequest("POST", base+"/sms/rest/v2/send", bytes.NewReader(body))
req.Header.Set("Content-Type", "application/json")
req.SetBasicAuth(os.Getenv("NETGSM_USERNAME"), os.Getenv("NETGSM_PASSWORD")) // username = otpmock key in tests
res, err := http.DefaultClient.Do(req) // body code "00" = queuedHer dil, CI'da sağlayıcının resmi SDK'sıyla (ya da başka bir adrese yönlendirilemeyen SDK'larda düz HTTP API'siyle) otpmock'a karşı sınanır.
Kimlik bilgisi. Test ortamında Netgsm kullanıcı adına (ya da şifreye) otpmock API anahtarınızı yazın. Basic kimlik doğrulaması iki alandan birinde okunur; diğeri herhangi bir değer olabilir.
otpmock neyi taklit ediyor?
| Uç nokta | Ne yapar |
|---|---|
POST /sms/rest/v2/send | SMS gönderir; başarıda yanıt kodu "00" |
POST /sms/rest/v2/otp | OTP SMS'i gönderir |
Yanıtlar ve hatalar Netgsm API'sinin kendi biçimindedir, bu yüzden istemci kütüphanesi onları her zamanki gibi çözümler. Yanlış anahtar ve aylık hakkın dolması da aynı hata biçimiyle döner.
Telefon numaraları
Netgsm yerel biçimde numara alır (5321234567). otpmock bunu uluslararası biçimde, +905321234567 olarak saklar; 05321234567 ve 905321234567 de aynı gelen kutusuna düşer. Testte kodu +90… biçimiyle sorgulayın.
Testinizde kodu okuyun
const telefon = otp.randomPhone("+905"); // her test için ayrı numara
const since = Date.now() - 5_000;
await page.getByRole("button", { name: "Kod gönder" }).click(); // uygulamanız Netgsm API'sini çağırır
const { code } = await otp.waitForCode(telefon, { since });otp yardımcısı bağımlılığı olmayan tek bir dosyadır: dokümandan alın (İngilizce). Baştan sona örnekler: Playwright ve Cypress rehberleri (İngilizce). Netgsm akışının Playwright ile baştan sona örneği, CI ve staging ayrıntıları için Netgsm rehberi sayfasına bakın.
Bilmeniz gerekenler
- Eski XML ve GET uç noktaları taklit edilmiyor; SDK'nın kullandığı REST v2 destekleniyor. Eski uç noktaları kullanıyorsanız test ortamında REST v2'ye geçin ya da gönderimi otpmock'un sağlayıcıdan bağımsız HTTP API'sine yönlendirin.
- otpmock uygulamanızın davranışını sınar, operatör teslimatını değil. SMS'in gerçekten ulaştığını ayrı ve küçük bir kontrolle doğrulayın.
Sık sorulanlar
otpmock Netgsm üzerinden gerçek SMS gönderiyor mu?
Hayır. Test ortamında uygulamanızın Netgsm istekleri otpmock'a gider; mesaj 10 dakika saklanır ve Netgsm ya da herhangi bir operatör ağına hiç ulaşmaz. Canlı ortamınız Netgsm kullanmaya devam eder, çünkü otpmock yalnızca OTPMOCK_URL tanımlıyken devreye girer.
Resmi @netgsm/sms SDK'sı destekleniyor mu?
Evet. Netgsm uç noktaları, resmi @netgsm/sms paketiyle Node.js'te uçtan uca sınanır. Adres değiştirmeye izin veren başka dillerdeki istemciler de çalışır.
otpmock hangi Netgsm API'lerini destekliyor?
POST /sms/rest/v2/send (SMS gönderir; başarıda yanıt kodu "00"); POST /sms/rest/v2/otp (OTP SMS'i gönderir).
Netgsm kredim harcanır mı?
Hayır. İstekler Netgsm'e hiç gitmediği için kredi düşmez.
Ücretsiz plan ayda 300 mesaj içerir, kart gerekmez. Yapay zeka kodlama asistanı mı kullanıyorsunuz? otpmock.com/llms-full.txt adresini verin.
Ücretsiz API anahtarı al