Anahtarın Hesabı

1.7k görüntülenme Markdown

Anahtarın sahibi olan hesabın profilini, tercihlerini ve güvenlik durumunu veren beş uç.

Genel Bakış

Müşteri API'sinde hesap her zaman anahtardan çözülür. Bir müşteri numarası parametresi yoktur; bu beş uç anahtarın sahibinin kendi kaydını okur ve yazar.

Profilde ne değiştirilebileceğine operatör karar verir. Okuma ucu bu kararı birlikte döndürür: hangi alanlar açık, hangileri boş bırakılamaz.

Hesap güvenliği bilinçli olarak dışarıda tutulur. Parola, e-posta değişimi, iki adımlı giriş kurulumu ve oturum kapatma panelde kalır; API yalnız durumlarını gösterir.

Referans

Profili Okuma

get/api/v1/admin/client/me
Account/GetMe anahtarın sahibi

Anahtarın sahibi olan müşterinin profilini döndürür.

Dönen alanlar data — 25 + meta — 2
idintMüşterinin numarası.
kindstringHesap türü: bireysel ya da kurumsal.
full_namestringAd ve soyadın birleşimi.
namestringAdı.
surnamestringSoyadı.
companyobjectŞirket bilgileri.
namestringŞirket adı.
tax_numberstringVergi numarası.
tax_officestringVergi dairesi.
avatar_urlstringProfil görselinin adresi. Görsel yoksa boş gelir.
emailstringE-posta adresi.
email_verifiedboolE-posta doğrulanmış mı.
phonestringCep telefonu. Uluslararası biçimde gelir.
phone_country_codestringTelefonun ülke kodu.
phone_verifiedboolNumara doğrulanmış mı.
landline_phonestringSabit telefon.
identitystringKimlik numarası.
birthdaystringDoğum tarihi.
languagestringTercih ettiği dil.
countrystringÜlke kodu.
currencystringGörüntü para birimi. Cüzdanın para biriminden farklı olabilir.
group_idintMüşteri grubunun numarası.
balanceobjectCüzdan bakiyesi. Tutar ve para birimi taşır; para birimi cüzdanın kendi birimidir.
timezonestringSaat dilimi tercihi. Boşsa kurulumun dilimi kullanılır.
date_formatstringTarih biçimi tercihi.
custom_fieldsarrayOperatörün tanımladığı ek alanlar. Her biri numara, ad, tür, zorunluluk, düzenlenebilirlik, seçenekler ve değer taşır.
created_atstringHesabın açıldığı an.
last_login_atstringSon giriş anı.
editablearrayŞu an değiştirilebilen alan adları. Meta altında döner.
requiredarrayGönderilirse boş bırakılamayan alanlar.
Hatalar 4
missing_token401Anahtar gönderilmemiş ya da tanınmıyor.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
audience_mismatch403Müşteri tarafında yönetim anahtarı kullanılmış.
not_found404Anahtarın sahibi hesap artık yok.
İstek
curl 'https://panel.ornek.com/api/v1/client/me' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/client/me', {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data, meta } = await res.json();
renderForm(data, meta.editable, meta.required);
$ch = curl_init('https://panel.ornek.com/api/v1/client/me');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Formu meta.editable'dan kurun: operatorun kapattigi alani gondermek 422 verir, sessizce gecmez.
$r = Kernel::internal('client:Account/GetMe', ['owner_id' => $uid]);
$form = array_intersect_key($r['data'], array_flip($r['meta']['editable']));

Profili Güncelleme

patch/api/v1/admin/client/me
Account/UpdateMe operatör kapısı

Gönderdiğiniz profil alanlarını değiştirir.

Gövde 14
namestringAdı. Boşaltılamaz.
surnamestringSoyadı. Boşaltılamaz.
kindstringHesap türü. Bireysele geçmek şirket bilgilerini temizler.
companyobjectŞirket bilgileri. Hesabın kurumsal olmasını gerektirir.
phonestringCep telefonu. Numara değişince doğrulanmışlık düşer.
birthdaystringDoğum tarihi.
identitystringKimlik numarası.
landline_phonestringSabit telefon.
languagestringDil kodu. Kurulumda bulunmalıdır.
countrystringÜlke kodu.
currencystringGörüntü para birimi kodu.
timezonestringSaat dilimi. Boş göndermek hesabın kendi seçimini siler.
date_formatstringTarih biçimi. Boş göndermek hesabın kendi seçimini siler.
custom_fieldsobjectEk alanların değerleri. Kutu tipli alanlar dizi alır.
avatarstringProfil görseli. Yalnız kodlanmış içerik kabul edilir; adres reddedilir.
Dönen alanlar data — 25 + meta — 1
dataobjectGüncel profil. Okuma ucuyla aynı şekildedir.
changedarrayGerçekten yazılan alanların listesi. Meta altında döner.
Hatalar 12
field_not_editable422Alan operatör ayarıyla kapalı.
nothing_to_update422Gövdede tanınan alan yok.
name_required422Ad ya da soyad boşaltılamaz.
kind_invalid422Hesap türü iki değerden biri değil.
company_requires_corporate422Bireysel hesaba şirket bilgisi gönderilmiş.
company_name_required422Zorunlu şirket parçası boş.
phone_required422Zorunluyken telefon boşaltılmış.
phone_taken422Numara başka bir hesapta kullanılıyor.
birthday_required422Zorunlu alan boşaltılmış.
language_invalid422Bilinmeyen tercih değeri. Ülke, para birimi, saat dilimi ve tarih biçimi de aynı biçimde reddedilir.
custom_field_required422Bilinmeyen ya da zorunlu ek alan.
avatar_url_not_allowed422Görsel olarak adres gönderilmiş.
İstek
curl -X PATCH 'https://panel.ornek.com/api/v1/client/me' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"timezone":"Europe/Istanbul","date_format":"d/m/Y"}'
const res = await fetch('https://panel.ornek.com/api/v1/client/me', {
  method: 'PATCH',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({ timezone: 'Europe/Istanbul' }),
});

const { meta } = await res.json();
console.log(meta.changed);
$ch = curl_init('https://panel.ornek.com/api/v1/client/me');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PATCH',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode(['timezone' => 'Europe/Istanbul']),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// E-POSTA ve PAROLA bu uctan degismez: ikisi de dogrulama akisi ister, panelde kalir.
$r = Kernel::internal('client:Account/UpdateMe', ['owner_id' => $uid, 'timezone' => $tz]);
$written = $r['meta']['changed'];

Bildirim Tercihlerini Okuma

get/api/v1/admin/client/me/notifications
Account/GetNotifications client

Hesabın hangi bildirimleri hangi kanaldan aldığını döndürür.

Dönen alanlar data — 1
categoriesarrayKategori başına bir satır.
categorystringKategorinin adı: genel, faturalar, destek, ürün, alan adı ya da pazarlama.
emailboolE-posta kanalı açık mı.
smsboolKısa mesaj kanalı açık mı.
lockedboolKapatılamayan bir kategori mi. Genel kategori her zaman açıktır.
Hatalar 3
missing_token401Anahtar gönderilmemiş ya da tanınmıyor.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
audience_mismatch403Müşteri tarafında yönetim anahtarı kullanılmış.
İstek
curl 'https://panel.ornek.com/api/v1/client/me/notifications' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/client/me/notifications', {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
const editable = data.categories.filter((c) => ! c.locked);
$ch = curl_init('https://panel.ornek.com/api/v1/client/me/notifications');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Yazmadan ONCE okuyun: yazma TAM DEGISTIRMEDIR, gonderilmeyen kategori iki kanalda da kapanir.
$cur = Kernel::internal('client:Account/GetNotifications', ['owner_id' => $uid])['data'];

Bildirim Tercihlerini Yazma

put/api/v1/admin/client/me/notifications
Account/UpdateNotifications tam değiştirme

Bildirim tercihlerinin tamamını yeniden yazar.

Gövde 5
invoicesobjectFatura bildirimleri. E-posta ve kısa mesaj kanallarını taşır; eksik kanal kapalı sayılır.
supportobjectDestek bildirimleri.
productobjectÜrün ve hizmet bildirimleri.
domainobjectAlan adı bildirimleri.
marketingobjectPazarlama bildirimleri.
Dönen alanlar data — 1
dataobjectGüncel tercihler. Okuma ucuyla aynı şekildedir.
Hatalar 3
missing_token401Anahtar gönderilmemiş ya da tanınmıyor.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
audience_mismatch403Müşteri tarafında yönetim anahtarı kullanılmış.
İstek
curl -X PUT 'https://panel.ornek.com/api/v1/client/me/notifications' \
  -H "Authorization: Bearer $CLIENT_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"invoices":{"email":true,"sms":false},"support":{"email":true,"sms":true}}'
const cur = await fetch('https://panel.ornek.com/api/v1/client/me/notifications', {
  headers: { Authorization: `Bearer ${clientKey}` },
}).then((r) => r.json());

const body = {};
for (const c of cur.data.categories)
  if (! c.locked) body[c.category] = { email: c.email, sms: c.sms };

body.marketing = { email: false, sms: false };

await fetch('https://panel.ornek.com/api/v1/client/me/notifications', {
  method: 'PUT',
  headers: {
    Authorization: `Bearer ${clientKey}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify(body),
});
$ch = curl_init('https://panel.ornek.com/api/v1/client/me/notifications');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_CUSTOMREQUEST  => 'PUT',
    CURLOPT_HTTPHEADER     => [
        'Authorization: Bearer ' . $clientKey,
        'Content-Type: application/json',
    ],
    CURLOPT_POSTFIELDS => json_encode($prefs),
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// Gondermediginiz kategori KAPANIR: tek bir tercihi degistirmek icin bile tam seti gonderin.
$cur = Kernel::internal('client:Account/GetNotifications', ['owner_id' => $uid])['data'];
$body = [];
foreach ($cur['categories'] as $c)
    if (! $c['locked']) $body[$c['category']] = ['email' => $c['email'], 'sms' => $c['sms']];

$body['marketing'] = ['email' => false, 'sms' => false];
Kernel::internal('client:Account/UpdateNotifications', ['owner_id' => $uid] + $body);

Güvenlik Özetini Okuma

get/api/v1/admin/client/me/security
Account/GetSecurity değiştirilemez

Doğrulama durumunu, iki adımlı girişi ve son oturumları döndürür.

Dönen alanlar data — 5
email_verifiedboolE-posta doğrulanmış mı.
phone_verifiedboolNumara doğrulanmış mı.
two_factorobjectİki adımlı giriş durumu.
enabledboolAçık mı.
methodstringHangi yöntem. Uygulama, e-posta ya da kısa mesaj.
sessionsarraySon otuz günün girişleri. En çok 25 kayıt, en yeniden başlayarak.
ipstringGirişin geldiği adres.
citystringGirişte yakalanan şehir.
country_codestringÜlke kodu.
user_agentstringTarayıcı bilgisi. Ham gelir, ayrıştırmak size kalır.
created_atstringGiriş anı.
last_login_atstringSon giriş anı.
Hatalar 3
missing_token401Anahtar gönderilmemiş ya da tanınmıyor.
insufficient_scope403Anahtar gerekli kapsamı taşımıyor.
audience_mismatch403Müşteri tarafında yönetim anahtarı kullanılmış.
İstek
curl 'https://panel.ornek.com/api/v1/client/me/security' \
  -H "Authorization: Bearer $CLIENT_KEY"
const res = await fetch('https://panel.ornek.com/api/v1/client/me/security', {
  headers: { Authorization: `Bearer ${clientKey}` },
});

const { data } = await res.json();
if (! data.two_factor.enabled) nudgeToEnable();
$ch = curl_init('https://panel.ornek.com/api/v1/client/me/security');
curl_setopt_array($ch, [
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Authorization: Bearer ' . $clientKey],
]);

$body = json_decode(curl_exec($ch), true);
curl_close($ch);
// SALT OKUMADIR: oturum kapatma, parola ve iki adimli giris kurulumu API'de YOK, panelde kalir.
$sec = Kernel::internal('client:Account/GetSecurity', ['owner_id' => $uid])['data'];
$stale = array_filter($sec['sessions'], fn ($s) => $s['country_code'] !== $home);

Tuzaklar

Bildirim yazımı tam değiştirmedir

Bildirim yazma ucu gövdeyi tercihlerin tamamı olarak okur: göndermediğiniz bir kategori hem e-posta hem kısa mesaj kanalında kapanır. Tek bir kategoriyi değiştirmek için önce mevcut listeyi okuyup üzerine yazın. Genel kategori kilitlidir ve gönderilse de değişmez.

Kapalı alan sessizce yoksayılmaz

Operatörün düzenlemeye kapattığı bir alanı göndermek 422 ile reddedilir. Bir formu sabit alan listesiyle kurmak, o alanlardan biri kapatıldığında bütün kaydı düşürür. Alan listesini her zaman okuma ucunun döndürdüğü düzenlenebilir listeden kurun.

Cüzdanın para birimi görüntü tercihi değildir

Profildeki para birimi alanı tutarların nasıl gösterileceğini söyler; cüzdanın kendi para birimi ise bakiye nesnesinin içinde ayrı gelir. İkisi farklı olabilir ve bakiyeyi görüntü birimiyle yorumlamak yanlış tutar üretir. Bakiyeyi kendi biriminde okuyun.

Profil görseli yalnız içerik olarak gönderilir

Görsel alanı adres kabul etmez: sunucu sizin verdiğiniz bir adresi asla çekmez, çünkü giden istek sunucunun gerçek adresini açığa çıkarırdı. Görseli kodlanmış içerik olarak gönderin; boş göndermek görseli kaldırır.

Telefonu değiştirmek doğrulamayı düşürür

Numara değiştiğinde doğrulanmışlık işareti silinir ve yeni numara doğrulanana kadar telefona bağlı akışlar çalışmaz. Aynısı e-posta için de geçerlidir, ama e-posta bu uçtan hiç değiştirilemez. Numarayı değiştirdikten sonra müşteriyi doğrulamaya yönlendirin.

Güvenlik ucu bir yönetim aracı değildir

Güvenlik özeti oturumları listeler ama kapatamaz; oturum belirteçleri de hiç dönmez. Parola değişimi, iki adımlı giriş kurulumu ve kimlik doğrulama belgeleri de aynı sebeple panelde tutulur: hepsi kesintisiz bir insan etkileşimi ister.

Faydalı oldu mu?

Geri bildiriminiz için teşekkürler!

Hâlâ Yardıma mı İhtiyacınız Var?

Yukarıda bulamadığınız her şey için destek ekibimiz her zaman yanınızda.