T-SOFT/Storefront API/Üye Kaydı ve Parola Kurtarma

Üye Kaydı ve Parola Kurtarma

Yetki: token gerektirmez (public) — uçlar sürümsüz path altındadır.

Bu sayfa yeni müşteri kaydını, SMS ile kayıt doğrulamayı ve "şifremi unuttum" akışını anlatır. Kimlik Doğrulama sayfasındaki token uçları gibi bu uçlar da sürümsüz path altındadır (/api/v3/storefront/...) ve token gerektirmez (public). Bu uçların hata gövdesi JSON:API errors[] değil, düz JSON'dur (message + alan bazlı errors).

Kayıt

POST /api/v3/storefront/customer/register

curl -X POST "https://<domain>/api/v3/storefront/customer/register" \
  -H "Accept: application/vnd.api+json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Portal",
    "surname": "Verify",
    "email": "ornek@example.com",
    "password": "PortalDoc123",
    "kvkk": true,
    "device_name": "iOS App"
  }'

Mağaza üyeliği otomatik onaylıyorsa yanıt 200 — kayıt tamamlanır ve girişteki gibi müşteri token'ı döner:

{
  "status": "registered",
  "access_token": "<customer_access_token>",
  "token_type": "Bearer",
  "expires_at": "2026-08-09T20:02:14+03:00",
  "scope": "storefront:read storefront:account storefront:pricing",
  "customer": {
    "id": 1433,
    "name": "Portal Verify",
    "email": "ornek@example.com",
    "phone": ""
  }
}

İstek alanları

AlanTipKural
namestringZORUNLU, en fazla 100 karakter.
surnamestringZORUNLU, en fazla 100 karakter.
emailstringE-posta ile üyelikte ZORUNLU. Kayıtlı bir e-posta 422 döner.
mobilePhonestringTelefonla üyelikte ZORUNLU. Numara normalize edilir (örn. 05550001122 → 905550001122); geçersiz format veya kayıtlı numara 422 döner.
passwordstringZORUNLU. En az 8 karakter; küçük harf + büyük harf + rakam içermelidir.
kvkkboolKVKK onayı; true gönderilirse onay kaydedilir.
identityNumberstringT.C. kimlik numarası; mağaza kimlik doğrulamayı zorunlu tutuyorsa checkIdentityNumber ile birlikte kullanılır.
birthDatestringDoğum tarihi; kimlik doğrulama açıkken identityNumber ile birlikte istenir.
checkMembershipWithPhonebooltrue = telefonla üyelik akışı (mağazada telefonla üyelik lisansı gerektirir); kimlik alanı mobilePhone olur.
checkIdentityNumberbooltrue = mağazanın T.C. kimlik doğrulama ayarına göre kimlik alanlarını denetle.
fetchSmsVerifybooltrue = mağaza SMS onaylı üyelik modundaysa kayıt öncesi SMS doğrulama kodu iste (aşağıya bakın).
codestringSMS doğrulama kodu — verification_pending yanıtından sonra tekrar çağrıda gönderilir.
representativeCodestringOpsiyonel; müşteriyi bir satış temsilcisine bağlar. Değer, Satış Temsilcileri listesinden seçilen temsilcinin wsCode değeridir (en fazla 30 karakter). Boş bırakılırsa müşteri temsilcisiz kaydolur; tanınmayan bir kod gönderilse de kayıt tamamlanır, temsilci bağlanmaz.
device_namestringZORUNLU. Token'ı üreten cihaz etiketi.

Kayıt sonucu üç durumdan biridir

registered — üyelik otomatik onaylı; yukarıdaki gibi token döner, müşteri hemen giriş yapmış olur.

pending_approval — mağaza üyelikleri panelden onaylıyor; kayıt alınır ama token dönmez. Müşteri onaylanana kadar giriş yapamaz:

{ "status": "pending_approval", "customer_id": 1436 }

verification_pending — mağaza SMS onaylı üyelik modunda ve istek fetchSmsVerify: true ile geldi; müşteri henüz oluşturulmaz, telefona tek kullanımlık kod gönderilir:

{ "status": "verification_pending", "sms_verify_second": 120 }
  • Kod 120 saniye geçerlidir (sms_verify_second); en fazla 5 deneme yapılabilir, yeni kod isteği için 60 saniye beklenir.
  • Kod geldikten sonra kayıt, aynı alanlar + code ile doğrulama ucuna gönderilir (ya da code eklenerek register tekrar çağrılır).

Kayıt doğrulama (SMS)

POST /api/v3/storefront/customer/register/verify

curl -X POST "https://<domain>/api/v3/storefront/customer/register/verify" \
  -H "Accept: application/vnd.api+json" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Portal",
    "surname": "Verify",
    "mobilePhone": "05550001122",
    "email": "ornek@example.com",
    "password": "PortalDoc123",
    "code": "123456",
    "device_name": "iOS App"
  }'

Alanlar kayıt ile aynıdır; ek olarak mobilePhone ve code bu uçta ZORUNLUDUR. Kod doğruysa müşteri oluşturulur ve registered yanıtı (token dahil) döner. Kod yanlış, süresi dolmuş veya deneme hakkı bitmişse 422 döner.

Şifremi unuttum

POST /api/v3/storefront/customer/forgot-password

curl -X POST "https://<domain>/api/v3/storefront/customer/forgot-password" \
  -H "Accept: application/vnd.api+json" \
  -H "Content-Type: application/json" \
  -d '{"email": "ornek@example.com"}'
{ "message": "Talebiniz alındı. Hesabınız kayıtlıysa şifre yenileme bağlantısı gönderilecektir." }
  • email veya phone alanlarından biri ZORUNLUDUR; ikisi de boşsa 422 döner.
  • Yanıt her durumda 200 ve aynı jenerik mesajdır — hesabın kayıtlı olup olmadığı yanıttan anlaşılamaz (hesap taraması koruması).
  • E-posta yolunda müşteri kayıtlıysa parola sıfırlama bağlantısı e-posta ile gönderilir. Bağlantı mağazanın web sitesinde açılır ve parola orada belirlenir; API tarafında ayrıca bir sıfırlama ucu yoktur.
  • phone yolu mağazada telefonla üyelik lisansı gerektirir; lisans yoksa 422 döner. Lisans varsa bağlantı SMS ile gönderilir; mağazanın SMS hesabı yoksa müşterinin kayıtlı e-postasına düşer.

Rate limit

UçSınır
customer/registerKimlik (e-posta/telefon) + IP başına dakikada 5, IP başına dakikada 15
customer/register/verifyKimlik + IP başına dakikada 10
customer/forgot-passwordKimlik + IP başına dakikada 3

Sınır aşımında yanıt 429 Too Many Requests olur.

Hatalar

Durum koduSebep
422Eksik/geçersiz alan (message + errors gövdesiyle); kayıtlı e-posta/telefon; geçersiz telefon formatı; yanlış/süresi dolmuş SMS kodu; telefonla üyelik lisansı yokken telefon akışı
429Rate limit aşıldı
Bu uçlarda alan doğrulama hatası gövdesi Laravel biçimindedir: {"message": "...", "errors": {"surname": ["surname alanı gereklidir."]}}. İş kuralı hataları ise {"status": false, "message": "Bu e-posta adresi zaten kayıtlı."} biçiminde döner. İstemci iki biçimi de 422 altında ele almalıdır.