Test ortamında OTPMOCK_URL=https://api.otpmock.com tanımlayın, Mutlucell istemcisini bu adrese yönlendirin ve Mutlucell kimlik bilgisi olarak otpmock API anahtarınızı kullanın. Uygulama kodunuz değişmez; canlı ortam Mutlucell ile göndermeye devam eder.
Kurulum
Uygulamalar genelde XML'i doğrudan POST eder, bu yüzden yalnızca adres değişir. Resmi PHP paketi adresi içine gömdüğü için yönlendirilemez; PHP kullanıyorsanız test ortamında XML'i kendiniz POST edin. Hatalar Mutlucell gibi çıplak kodlarla döner: 23 kimlik bilgisi yanlış, 20 bozuk XML, 22 yetersiz kredi.
const MUTLUCELL_URL = process.env.OTPMOCK_URL ?? "https://smsgw.mutlucell.com";
const xml = `<?xml version="1.0" encoding="UTF-8"?>
<smspack ka="${process.env.MUTLUCELL_USER}" pwd="${process.env.MUTLUCELL_PASSWORD}" org="MUTLUCELL">
<mesaj><metin>Doğrulama kodunuz: ${code}</metin><nums>5321234567</nums></mesaj>
</smspack>`;
const res = await fetch(`${MUTLUCELL_URL}/smsgw-ws/sndblkex`, {
method: "POST",
headers: { "content-type": "text/xml; charset=UTF-8" },
body: xml,
});
const result = await res.text(); // "$12345678#1.0" or an error codeimport os
import requests
MUTLUCELL_URL = os.environ.get("OTPMOCK_URL", "https://smsgw.mutlucell.com")
xml = f"""<?xml version="1.0" encoding="UTF-8"?>
<smspack ka="{os.environ['MUTLUCELL_USER']}" pwd="{os.environ['MUTLUCELL_PASSWORD']}" org="MUTLUCELL">
<mesaj><metin>Doğrulama kodunuz: {code}</metin><nums>5321234567</nums></mesaj>
</smspack>""" # pwd = testte: otpmock API anahtarı
res = requests.post(f"{MUTLUCELL_URL}/smsgw-ws/sndblkex", data=xml.encode("utf-8"),
headers={"Content-Type": "text/xml; charset=UTF-8"})
result = res.text # "$12345678#1.0" or an error codeString base = System.getenv().getOrDefault("OTPMOCK_URL", "https://smsgw.mutlucell.com");
String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><smspack ka=\"" + user + "\" pwd=\"" + pwd // pwd = testte: otpmock API anahtarı
+ "\" org=\"MUTLUCELL\"><mesaj><metin>" + text + "</metin><nums>05321234567</nums></mesaj></smspack>";
HttpRequest req = HttpRequest.newBuilder(URI.create(base + "/smsgw-ws/sndblkex"))
.header("Content-Type", "text/xml; charset=UTF-8")
.POST(HttpRequest.BodyPublishers.ofString(xml))
.build();
// Response: "$12345678#1.0" or an error code such as "23".using System.Security;
var mutlucellUrl = Environment.GetEnvironmentVariable("OTPMOCK_URL") ?? "https://smsgw.mutlucell.com";
var user = Environment.GetEnvironmentVariable("MUTLUCELL_USER");
var pwd = Environment.GetEnvironmentVariable("MUTLUCELL_PASSWORD"); // testte: otpmock API anahtarı
var xml = $"<?xml version=\"1.0\" encoding=\"UTF-8\"?><smspack ka=\"{SecurityElement.Escape(user)}\" pwd=\"{SecurityElement.Escape(pwd)}\" org=\"MUTLUCELL\">"
+ $"<mesaj><metin>Doğrulama kodunuz: {code}</metin><nums>5321234567</nums></mesaj></smspack>";
var res = await new HttpClient().PostAsync(mutlucellUrl + "/smsgw-ws/sndblkex",
new StringContent(xml, Encoding.UTF8, "text/xml"));
var result = await res.Content.ReadAsStringAsync(); // "$12345678#1.0" or an error codeuse GuzzleHttp\Client;
$mutlucellUrl = getenv('OTPMOCK_URL') ?: 'https://smsgw.mutlucell.com';
$user = htmlspecialchars(getenv('MUTLUCELL_USER'));
$pwd = htmlspecialchars(getenv('MUTLUCELL_PASSWORD')); // testte: otpmock API anahtarı
$xml = '<?xml version="1.0" encoding="UTF-8"?>'
. "<smspack ka=\"$user\" pwd=\"$pwd\" org=\"MUTLUCELL\">"
. "<mesaj><metin>Doğrulama kodunuz: $code</metin><nums>5321234567</nums></mesaj></smspack>";
$result = (string) (new Client())->post("$mutlucellUrl/smsgw-ws/sndblkex", [
'headers' => ['Content-Type' => 'text/xml; charset=UTF-8'],
'body' => $xml,
])->getBody(); // "$12345678#1.0" or an error coderequire "net/http"
# Apps post the XML directly, so only the host changes.
MUTLUCELL_URL = ENV.fetch("OTPMOCK_URL", "https://smsgw.mutlucell.com")
xml = <<~XML
<?xml version="1.0" encoding="UTF-8"?>
<smspack ka="#{ENV["MUTLUCELL_USER"]}" pwd="#{ENV["MUTLUCELL_PASSWORD"]}" org="MUTLUCELL">
<mesaj><metin>Doğrulama kodunuz: #{code}</metin><nums>5321234567</nums></mesaj>
</smspack>
XML
# pwd = testte: otpmock API anahtarı
res = Net::HTTP.post(URI("#{MUTLUCELL_URL}/smsgw-ws/sndblkex"), xml, "Content-Type" => "text/xml; charset=UTF-8")
result = res.body # "$12345678#1.0" or an error code// Mutlucell 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://smsgw.mutlucell.com"
}
xml := fmt.Sprintf(`<?xml version="1.0" encoding="UTF-8"?>
<smspack ka="%s" pwd="%s" org="MUTLUCELL"><mesaj><metin>%s</metin><nums>5321234567</nums></mesaj></smspack>`,
os.Getenv("MUTLUCELL_USER"), os.Getenv("MUTLUCELL_PASSWORD"), msg) // pwd = testte: otpmock API anahtarı
res, err := http.Post(base+"/smsgw-ws/sndblkex", "text/xml; charset=UTF-8", strings.NewReader(xml)) // "$12345678#1.0" or an error codeHer 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 pwd alanına otpmock API anahtarınızı yazın (Mutlucell de bu alanda API anahtarı kabul eder; otpmock anahtarı ka alanında da kabul eder). org değeri mesajla birlikte gönderici olarak saklanır.
otpmock neyi taklit ediyor?
| Uç nokta | Ne yapar |
|---|---|
POST /smsgw-ws/sndblkex | XML <smspack ka pwd org><mesaj><metin/><nums/></mesaj></smspack>; yanıt $<paket-no>#<kredi> ya da bir hata kodu |
Yanıtlar ve hatalar Mutlucell 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ı
Mutlucell her biçimi kabul eder (05321234567, 905321234567, 532 123 45 67). otpmock Türk numaralarını +905321234567 olarak saklar; testte kodu bu biçimle 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 Mutlucell 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). Mutlucell akışının Playwright ile baştan sona örneği, CI ve staging ayrıntıları için Netgsm rehberi (test çatısı tarafı aynı) sayfasına bakın.
Sık sorulanlar
otpmock Mutlucell üzerinden gerçek SMS gönderiyor mu?
Hayır. Test ortamında uygulamanızın Mutlucell istekleri otpmock'a gider; mesaj 10 dakika saklanır ve Mutlucell ya da herhangi bir operatör ağına hiç ulaşmaz. Canlı ortamınız Mutlucell kullanmaya devam eder, çünkü otpmock yalnızca OTPMOCK_URL tanımlıyken devreye girer.
Resmi SDK yoksa neyle test ediliyor?
Sınama, API'nin kendi yolları ve gövdeleriyle doğrudan HTTP üzerinden yapılır. Uygulamanız zaten API'yi doğrudan çağırdığı için yapmanız gereken tek şey adresi değiştirmektir.
otpmock hangi Mutlucell API'lerini destekliyor?
POST /smsgw-ws/sndblkex (XML <smspack ka pwd org><mesaj><metin/><nums/></mesaj></smspack>; yanıt $<paket-no>#<kredi> ya da bir hata kodu).
Mutlucell'in başka uç noktalarını da taklit ediyor musunuz?
Şu an yalnızca toplu gönderim uç noktası (sndblkex) taklit ediliyor. Başka bir uç noktaya ihtiyacınız varsa support@otpmock.com adresine yazın; gelen talepler, sıradaki işimizi belirliyor.
Ü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