@rewloy/node 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +31 -0
- package/README.md +73 -1
- package/dist/client.d.ts +3 -1
- package/dist/client.js +16 -3
- package/dist/errors.d.ts +4 -0
- package/dist/errors.js +3 -0
- package/dist/generated/methods.d.ts +58 -34
- package/dist/generated/methods.js +61 -35
- package/dist/generated/operations.d.ts +1 -1
- package/dist/generated/operations.js +6 -2
- package/dist/generated/types.d.ts +179 -90
- package/dist/generated/types.js +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/dist/types.d.ts +14 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// Generated by scripts/generate.ts from the Rewloy OpenAPI document
|
|
2
|
-
// (openapi/openapi.json, API 1.
|
|
2
|
+
// (openapi/openapi.json, API 1.1.0). Do not edit: run `npm run generate`.
|
|
3
3
|
/** One method per operation of the API, named by its operationId. `Rewloy` extends it. */
|
|
4
4
|
export class RewloyMethods {
|
|
5
5
|
// ------------------------------------------------------------ Kartlar
|
|
@@ -8,7 +8,7 @@ export class RewloyMethods {
|
|
|
8
8
|
*
|
|
9
9
|
* Bir programdan kart verir. E-posta gönderilirse kart o müşteriye bağlanır (yoksa oluşturulur) ve `kvkkConsent: true` gönderilmelidir: bu, işletmenin müşteriye kendi aydınlatma metnini sunduğunu beyan etmesidir; beyanın doğruluğundan işletme sorumludur. Bir rıza kutusu olarak sormayın. Dönen `cardUrl` müşterinin özel kart bağlantısıdır: müşteriye iletin, kayıtlara yazmayın. Hediye kartında `faceMinor` (kuruş) zorunludur. Yanıtta `created` her zaman vardır.
|
|
10
10
|
* - **Idempotency-Key** (isteğe bağlı, önerilir): her çağrı yeni bir kart açar; başlıkla aynı anahtar ve aynı gövdeyle tekrar yeni kart açmaz, ilk yanıtı (aynı kart, aynı bağlantı) `Idempotent-Replayed: true` ile döndürür. Aynı anahtar başka bir gövdeyle `422 IDEMPOTENCY_KEY_REUSED`. Bir siparişe kart açan mağaza için sipariş başına sabit bir anahtar iyi bir seçimdir. Saklanan yanıt şifrelidir ve 7 gün tutulur; tekrar yalnız kimlik o programda hâlâ kart verebiliyorsa döner (yoksa `403 FORBIDDEN`).
|
|
11
|
-
* - **`ifExists`** (isteğe bağlı, `email` ile): `"create"` (varsayılan) her çağrıda yeni kart açar, bugüne dek olduğu gibi. `"return"`: kişinin bu programda açık bir kartı varsa yeni kart açılmaz; `200`, `created: false` ve o kartın `serial`'i döner — mağazanın kendi e-posta → kart tablosu tutması gerekmez. Var olan kartın `cardUrl`'i **görüntüleme anahtarı taşımaz** (`/p/{serial}`, kişiye bir şey göstermez ve bağlantıyı e-postasına istemeyi önerir): adresi yazan kişi kartın sahibi olmayabilir, özel bağlantı yalnız kişinin kendi e-postasına gider (`sendEmail`). Kart yoksa yeni kart açılır (`201`, `created: true`). Yanıt bu adresin bu programda kartı olup olmadığını ve kartın numarasını (kasada kartla işlem yapılan anahtar) söylediği için **kimliğin kartın programında `customers.read` yetkisi olmalı** ve müşteri kimliğin şube kapsamında olmalıdır; yoksa `403 FORBIDDEN
|
|
11
|
+
* - **`ifExists`** (isteğe bağlı, `email` ile): `"create"` (varsayılan) her çağrıda yeni kart açar, bugüne dek olduğu gibi. `"return"`: kişinin bu programda açık bir kartı varsa yeni kart açılmaz; `200`, `created: false` ve o kartın `serial`'i döner — mağazanın kendi e-posta → kart tablosu tutması gerekmez. Var olan kartın `cardUrl`'i **görüntüleme anahtarı taşımaz** (`/p/{serial}`, kişiye bir şey göstermez ve bağlantıyı e-postasına istemeyi önerir): adresi yazan kişi kartın sahibi olmayabilir, özel bağlantı yalnız kişinin kendi e-postasına gider (`sendEmail`). Kart yoksa yeni kart açılır (`201`, `created: true`). Yanıt bu adresin bu programda kartı olup olmadığını ve kartın numarasını (kasada kartla işlem yapılan anahtar) söylediği için **kimliğin kartın programında `customers.read` yetkisi olmalı** ve müşteri kimliğin şube kapsamında olmalıdır; yoksa `403 FORBIDDEN`. Hediye kartında kullanılamaz (her hediye kartı bir satın almadır; `400 VALIDATION`). Koddan verilen kartlar (kupon, indirim) "açık kart" sayılmaz.
|
|
12
12
|
* - **`sendEmail: true`** (isteğe bağlı, `email` ile): katılım formunun gönderdiği "kartınız" e-postası kişinin adresine gider; yeni kartta yeni kartın bağlantısıyla, var olan kartta (`created: false`) o kart için yeni bir bağlantıyla (eski bağlantılar çalışmaya devam eder). Sınırlar: kişi başına saatte 3 (yeni kart da sayılır; katılım formuyla ortak), işletme başına saatte 50 (deneme süresinde) ya da 500; fazlası gönderilmez, `rate_limited` (kart yine açılır). İşletmenin etkin bir sahibinin e-posta adresi doğrulanmamışsa çağrı `403 OWNER_EMAIL_UNVERIFIED` ile reddedilir, kart açılmaz. Gönderim `kvkkConsent: true` ile kaydedilen beyana dayanır. Test ortamında e-posta gönderilmez, "Gönderilmeyenler"e yazılır. Yanıttaki `emailStatus`: `queued` (gönderim sırasına girdi; test ortamında Gönderilmeyenler'e yazıldı), `suppressed` (adres daha önce geri döndüğü ya da şikâyet ettiği için gönderilmedi), `rate_limited`, `not_sent`.
|
|
13
13
|
* - **Bir sipariş için kart** (`orderId` ve `shopId` birlikte, `email` ile): kartı kazandıran sipariş de bu karta sayılır, mağazanın sipariş bildirimi karttan önce ya da sonra gelsin. Bildirim henüz gelmediyse (`order.result: waiting`) geldiğinde bu kartı bulur. Önce gelip "Kartı yok" diye kaydedildiyse (`resend`) sipariş yeniden açılır: mağaza siparişi 7 gün içinde yeniden gönderdiğinde (aynı imzalı bildirim; WooCommerce eklentisi webhook'unun o siparişi yeniden teslimiyle) siparişin kendi e-postası ve tutarıyla bu karta işlenir. Tutar hiçbir zaman bu çağrıdan alınmaz, siparişten hiçbir şey saklanmaz ve sipariş yine bir kez sayılır. Bağlantı bu işletmenin ve bu programın olmalıdır (`404 SHOP_NOT_FOUND`, `409 SHOP_PROGRAM_MISMATCH`). `ifExists: "return"` ile var olan kart döndüğünde de sipariş, e-postasıyla o kartı bulur.
|
|
14
14
|
*
|
|
@@ -42,7 +42,7 @@ export class RewloyMethods {
|
|
|
42
42
|
/**
|
|
43
43
|
* Kartın bir şubedeki kasa kuralları
|
|
44
44
|
*
|
|
45
|
-
* Kasada işlem yapmadan önce: kart bu şubede kullanılabilir mi, hangi şubelerde geçerli, şu an burada hangi kasa kampanyası çalışıyor ve kasiyerin göreceği uyarılar (tarayıcıdaki şeritlerin aynısı). `allowed: false` iken işlem `WRONG_LOCATION` ile reddedilir
|
|
45
|
+
* Kasada işlem yapmadan önce: kart bu şubede kullanılabilir mi, hangi şubelerde geçerli, şu an burada hangi kasa kampanyası çalışıyor ve kasiyerin göreceği uyarılar (tarayıcıdaki şeritlerin aynısı). `allowed: false` iken işlem `WRONG_LOCATION` ile reddedilir. Şube kartın işletmesinin silinmemiş bir şubesi olmalıdır, değilse `404 LOCATION_NOT_FOUND` (kasa işlemleri gibi).
|
|
46
46
|
*
|
|
47
47
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
48
48
|
*
|
|
@@ -58,7 +58,7 @@ export class RewloyMethods {
|
|
|
58
58
|
/**
|
|
59
59
|
* Kasada işlem
|
|
60
60
|
*
|
|
61
|
-
* Karta, bir şubede kasa işlemi uygular. **Idempotency-Key zorunludur** (8–64 karakter, bu kimlik için kalıcı olarak tekil): aynı anahtarla aynı isteğin tekrarı bakiyeyi ikinci kez değiştirmez ve ilk sonucu döndürür (`duplicate: true`); bu kartta başka bir işlem için ya da başka bir gövdeyle (başka tutar, şube,
|
|
61
|
+
* Karta, bir şubede kasa işlemi uygular. **Idempotency-Key zorunludur** (8–64 karakter, yalnız ASCII, bu kimlik için kalıcı olarak tekil): aynı anahtarla aynı isteğin tekrarı bakiyeyi ikinci kez değiştirmez ve ilk sonucu döndürür (`duplicate: true`); bu kartta başka bir işlem için ya da başka bir gövdeyle (başka tutar, şube, sayı, not) ya da **başka bir kartta** kullanılmış bir anahtar `422 IDEMPOTENCY_KEY_REUSED` alır ve hiçbir şey yazılmaz (anahtar kimliğindir, kartın değil). Yanıt kartın türüne göre iki biçimdedir: bakiyeli kartlarda `{ balance, duplicate, detail?, promotion? }`, kupon ve indirim kartında (`use`) `{ status, duplicate, uses, usesLeft }`. `reference` (isteğe bağlı, en fazla 80 karakter) fiş numarasıdır: kaydın notuna yazılır ve bir harcamayı, ödülü ya da kullanımı `POST /v1/passes/{serial}/actions/reverse` ile geri alırken işlemi bulur. `currency` (isteğe bağlı) verilirse kartın para birimiyle karşılaştırılır (`422 CURRENCY_MISMATCH`). Şube işletmenizin silinmemiş bir şubesi olmalıdır (`404 LOCATION_NOT_FOUND`). Salt-okunur hesapta da çalışır: mevcut kartlar çalışmaya devam eder.
|
|
62
62
|
* | action | kart | gerekli alan |
|
|
63
63
|
* |---|---|---|
|
|
64
64
|
* | `earn-stamps` | damga | `count` (varsayılan 1) |
|
|
@@ -88,7 +88,7 @@ export class RewloyMethods {
|
|
|
88
88
|
/**
|
|
89
89
|
* Satışı karta yaz
|
|
90
90
|
*
|
|
91
|
-
* Kasada ya da kendi yazılımınızda tamamlanan bir satışı karta yazar: ne yazılacağına kartın türü ve programın kendi kuralı karar verir, entegrasyonun türü bilmesi gerekmez
|
|
91
|
+
* Kasada ya da kendi yazılımınızda tamamlanan bir satışı karta yazar: ne yazılacağına kartın türü ve programın kendi kuralı karar verir, entegrasyonun türü bilmesi gerekmez. `amountMinor` ödenen toplamdır, **kartın para biriminde** (programın para birimi: cashback ve hediye kartında programın kendi para birimi, öteki türlerde işletmeninki; `GET /v1/passes/{serial}` → `currency`) ve kuruş cinsinden; başka para birimi kabul edilmez ve çevrilmez. `currency` gönderirseniz Rewloy onu kartın para birimiyle karşılaştırır ve farklıysa `422 CURRENCY_MISMATCH` ile hiçbir şey yazmaz.
|
|
92
92
|
* | kart | satış ne yazar | `applied` |
|
|
93
93
|
* |---|---|---|
|
|
94
94
|
* | damga | 1 damga (kasa kampanyası katlar) | `stamps` |
|
|
@@ -98,10 +98,11 @@ export class RewloyMethods {
|
|
|
98
98
|
* | hediye kartı, kupon, indirim | hiçbir şey (harcamak ve kullanmak `POST /v1/passes/{serial}/actions` ile) | `none` |
|
|
99
99
|
*
|
|
100
100
|
* Hiçbir şey yazılmadıysa yanıt yine 200'dür, `applied: "none"` ve nedeni `reason`: `below_minimum` (tutar bir puan ya da bir kuruş birikim üretmiyor; `amountMinor: 0` dahil), `visit_already_counted` (VIP: bu ziyaret penceresinde ziyaret zaten sayıldı), `card_full` (damga: kart dolu ve program ödülden sonra damga biriktirmiyor; önce ödülü kullanın), `type_does_not_earn`. Damga ve VIP, `amountMinor: 0` olsa da ziyareti sayar.
|
|
101
|
-
* - **Idempotency-Key zorunludur**: 8–64 karakter ve bu kimlik için **kalıcı olarak tekil**; defter anahtarları hiç silinmez. Fiş numarası tek başına anahtar olamaz: ÖKC fiş numaraları Z raporundan sonra yeniden başlar. Kasa + Z no + fiş no birleşimi (ör. `kasa3-z0187-fis0042`) ya da satışla birlikte saklanıp tekrarda yeniden gönderilen bir UUID kullanın. Aynı anahtarla **aynı isteğin** tekrarı ikinci kez yazmaz: `duplicate: true`, `credited` ilk isteğin yazdığı, `balance` kartın şimdiki bakiyesi. Aynı anahtar başka bir gövdeyle (başka `amountMinor`, `locationId`, `reference` ya da `currency`) `422 IDEMPOTENCY_KEY_REUSED` alır ve hiçbir şey yazılmaz: satış sessizce kaybolmaz. Anahtar `POST /v1/passes/{serial}/actions` ile aynı alandadır: orada bu kartta kullanılmış bir anahtar da `422 IDEMPOTENCY_KEY_REUSED` alır. Hiçbir şey yazmayan bir satış anahtarı bağlamaz.
|
|
101
|
+
* - **Idempotency-Key zorunludur**: 8–64 karakter ve bu kimlik için **kalıcı olarak tekil**; defter anahtarları hiç silinmez. Fiş numarası tek başına anahtar olamaz: ÖKC fiş numaraları Z raporundan sonra yeniden başlar. Kasa + Z no + fiş no birleşimi (ör. `kasa3-z0187-fis0042`) ya da satışla birlikte saklanıp tekrarda yeniden gönderilen bir UUID kullanın. Aynı anahtarla **aynı isteğin** tekrarı ikinci kez yazmaz: `duplicate: true`, `credited` ilk isteğin yazdığı, `balance` kartın şimdiki bakiyesi. Aynı anahtar başka bir gövdeyle (başka `amountMinor`, `locationId`, `reference` ya da `currency`) `422 IDEMPOTENCY_KEY_REUSED` alır ve hiçbir şey yazılmaz: satış sessizce kaybolmaz. Anahtar `POST /v1/passes/{serial}/actions` ile aynı alandadır: orada bu kartta kullanılmış bir anahtar da `422 IDEMPOTENCY_KEY_REUSED` alır. Anahtar **kimliğindir, kartın değil**: başka bir kartta bir şey yazmış bir anahtar bu kartta da `422 IDEMPOTENCY_KEY_REUSED` alır (yanıt öteki kartı söylemez): yanlış karta okutulan fiş, doğru karta aynı anahtarla yazılamaz; önce yanlış karttaki satışı geri alın (`sale/reverse`), sonra doğru karta yeni bir anahtarla yazın. Hiçbir şey yazmayan bir satış anahtarı bağlamaz. Anahtar yalnız yazdırılabilir ASCII karakterler taşır (`400 VALIDATION`).
|
|
102
|
+
* - **Çevrimdışı kasa (`occurredAt`):** bağlantısı kopan kasa satışları kendi kuyruğunda tutar ve bağlantı gelince sırayla gönderir. Her satışı kuyruğa **anahtarıyla birlikte** yazın (kasa + Z no + fiş no) ve gönderirken aynı anahtarı kullanın: kayıp bir yanıttan sonra tekrar ikinci kez yazmaz. `occurredAt` satışın olduğu andır: VIP ziyareti o ana göre sayılır (o anın ziyaret penceresinde zaten sayılmış bir ziyaret varsa `applied: "none"`, `visit_already_counted`), kasa kampanyası o anda çalışan kampanyadır. Gelecekte olamaz (2 dakika saat farkı kabul edilir), en fazla 72 saat geriye gider ve kartın verildiği andan önce olamaz (`400 VALIDATION`): daha eski bir kuyruğu elle düzeltin. Kasa kampanyası, o anda çalışan ve o anda zaten açılmış olandır: sonradan geçmiş bir başlangıçla açılan kampanya kuyruktaki satışı katlamaz. Kartın son kullanım tarihi ve şube kuralı gönderildiği ana göre denetlenir. Kaydın kendi zamanı (`at`, işlem kaydı ve döküm) yazıldığı andır; olduğu an kayıtta ayrıca durur (işlem kaydında `occurredAt`, webhook'ta `occurredAt`).
|
|
102
103
|
* - **`reference`** (isteğe bağlı, en fazla 80 karakter): fiş numarası buraya yazılır. Defter kaydının notuna yazılır: müşterinin geçmişinde (VIP ziyaretleri hariç; onlar ziyaret olarak görünür) ve işlem dökümünün `Not` sütununda görünür. Müşterinin kişisel bilgisini yazmayın.
|
|
103
104
|
* - Şube kuralları ve kasa kampanyaları `actions` ile aynıdır: kart bu şubede geçerli değilse `409 WRONG_LOCATION`, kampanya `promotion` ile döner. Salt-okunur hesapta da çalışır.
|
|
104
|
-
* - **`locationId` isteğe bağlıdır
|
|
105
|
+
* - **`locationId` isteğe bağlıdır**: verilmezse satış bir şubeye yazılmaz (online mağaza gibi). O zaman şube kuralı ve kasa kampanyası uygulanmaz (e-ticaret siparişleri gibi), kayıtta şube boş kalır ve kimliğin **her şubede** `scan.use` yetkisi olmalıdır (yoksa `403 FORBIDDEN`); bir şubenin kasası şubesini gönderir. Yeni bir şube açmak gerekmez, hiçbir şey ücretlendirilmez.
|
|
105
106
|
* - **Geri almak:** `POST /v1/passes/{serial}/sale/reverse` satışın yazdığını bir kez geri alır.
|
|
106
107
|
*
|
|
107
108
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
@@ -120,12 +121,13 @@ export class RewloyMethods {
|
|
|
120
121
|
/**
|
|
121
122
|
* Satışı geri al
|
|
122
123
|
*
|
|
123
|
-
* İade ya da iptal edilen bir satışın karta yazdığını geri alır
|
|
124
|
-
* - **Hangi satış:** `saleKey`, satışı yazarken gönderdiğiniz `Idempotency-Key`'dir (aynı kimlikle; anahtarlar kimlik başına tutulur), ya da `reference`, satışın `reference`'ı (bu
|
|
124
|
+
* İade ya da iptal edilen bir satışın karta yazdığını geri alır: o satışın yazdığı damga, puan, ziyaret ya da cashback'in tamamı, kasa kampanyasının katladığı dahil. Defter düzeltilmez; karta yeni bir düzeltme kaydı (`adjust`) yazılır ve müşterinin cüzdanı güncellenir.
|
|
125
|
+
* - **Hangi satış:** `saleKey`, satışı yazarken gönderdiğiniz `Idempotency-Key`'dir (aynı kimlikle; anahtarlar kimlik başına tutulur), ya da `reference`, satışın `reference`'ı (**aynı kimliğin** bu karttaki satışları arasında yalnız birinde varsa; birden çoksa `409 SALE_AMBIGUOUS`, `saleKey` gönderin). İkisinden yalnız biri. `recordSale` ile ya da kazandıran bir kasa işlemiyle (`earn-stamps`, `earn-points`, `visit`, `accrue`) yazılan kayıtlar geri alınır; harcama, ödül ve kullanım burada değil, `POST /v1/passes/{serial}/actions/reverse` ile geri alınır.
|
|
125
126
|
* - **Bir kez:** bir satış bir kez geri alınır, kim isterse istesin; tekrar `200` ve `duplicate: true` döner, hiçbir şey yazılmaz. Bu yüzden `Idempotency-Key` gerekmez.
|
|
126
127
|
* - **Ne geri alınabilir:** kartın bakiyesi satışın yazdığını hâlâ tutuyorsa. Kazanılan kullanıldıysa (damgalar ödüle, puanlar ödüle ya da harcamaya, cashback harcamaya ya da online bir siparişe gittiyse) bakiye yetmez: `409 SALE_ALREADY_SPENT`, `details: { credited, balance }`, hiçbir şey yazılmaz. Kısmi geri alma yoktur; bakiye eksiye düşmez. Hiçbir şey yazmamış bir satış (`applied: "none"`), hediye kartı, kupon ve indirim kartı `404 SALE_NOT_FOUND`.
|
|
127
128
|
* - **Kim geri alabilir:** satışın yapıldığı yerde kart işleyebilen: kimliğin **satışın şubesinde** `scan.use` yetkisi olmalıdır; şubesiz (online) bir satış için, onu yazarken olduğu gibi, her şubede (`403 FORBIDDEN`). `locationId` isteğe bağlıdır: geri almanın yapıldığı şube, düzeltme kaydına yazılır; verilirse işletmenin silinmemiş bir şubesi olmalı ve kimliğin orada da `scan.use` yetkisi olmalıdır. Geri alma bir ziyaret ya da okutma sayılmaz. Kapanmış ya da süresi dolmuş kartta da çalışır. Salt-okunur hesapta da çalışır.
|
|
128
129
|
* - **`reference` ile** yalnız satışı yazan çağrının gönderdiği `reference` eşleşir (kasa kampanyasının nota eklediği ad değil); 1.0.5'ten önce yazılmış satışlar yalnız `saleKey` ile bulunur.
|
|
130
|
+
* - **VIP ziyareti** geri alınınca ziyaret penceresi yeniden açılır: iptal edilip yeniden kesilen fişin satışı ziyareti yeniden sayar.
|
|
129
131
|
*
|
|
130
132
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
131
133
|
*
|
|
@@ -140,6 +142,30 @@ export class RewloyMethods {
|
|
|
140
142
|
reverseSale(args) {
|
|
141
143
|
return this._call('reverseSale', args);
|
|
142
144
|
}
|
|
145
|
+
/**
|
|
146
|
+
* Kasa işlemini geri al
|
|
147
|
+
*
|
|
148
|
+
* Yanlışlıkla yapılan ya da iptal edilen bir harcamayı, ödülü veya kullanımı geri alır: `spend` (hediye kartı, cashback), `spend-points`, `redeem-stamps`, `redeem-reward` ya da `use` (kupon, indirim kartı) ile alınanın tamamı geri verilir — bakiye, puan ya da damgalar karta döner, ödül yeniden hazır olur, kuponun ya da indirim kartının kullanım hakkı geri gelir, harcamayla kapanan hediye kartı ya da kullanımla kapanan kupon yeniden açılır. Defter düzeltilmez: karta yeni bir düzeltme kaydı (`adjust`) yazılır (kuponda kullanım kaydı geri alındı olarak işaretlenir) ve müşterinin cüzdanı güncellenir.
|
|
149
|
+
* - **Hangi işlem:** `actionKey`, işlemi yaparken (`POST /v1/passes/{serial}/actions`) gönderdiğiniz `Idempotency-Key`'dir, ya da `reference`, işlemin `reference`'ı (bu kartta bu kimliğin yalnız bir işleminde varsa; birden çoksa `409 ACTION_AMBIGUOUS`). İkisinden yalnız biri. **Yalnız aynı kimliğin** işlemleri bulunur: başka bir anahtarın, panelin tarayıcısının ya da bir e-ticaret siparişinin işlemi `404 ACTION_NOT_FOUND`. Kazanımlar (`earn-stamps`, `earn-points`, `visit`, `accrue`) burada değil, `POST /v1/passes/{serial}/sale/reverse` ile geri alınır.
|
|
150
|
+
* - **Online ödeme:** ödeme adımında çekilen bir tutar burada geri alınmaz; onun kendi iadesi vardır (`POST /v1/shops/{id}/orders/{orderId}/refund`).
|
|
151
|
+
* - **Bir kez:** bir işlem bir kez geri alınır, kim, kaç kez isterse istesin; tekrar `200` ve `duplicate: true` döner, hiçbir şey yazılmaz. Bu yüzden `Idempotency-Key` gerekmez. Geri alınan işlemin anahtarı yanmıştır: aynı anahtarla gelen istek ilk sonucu döndürür (`duplicate: true`), yeni bir işlem için yeni anahtar gönderin.
|
|
152
|
+
* - **Geri alınamayanlar:** kart iptal edilmiş ya da başka bir nedenle kapanmışsa, ya da kartın müşterisi silinmiş, programı arşivde ya da müşterisi engellenmişse (`details.reason: "card_closed"`), süresi dolmuşsa (`"card_expired"`), ya da damga ödülü geri verildiğinde kart programın en çok damgasını aşacaksa ve program ödülden sonra damga biriktirmiyorsa (`"stamps_do_not_fit"`): `409 ACTION_NOT_REVERSIBLE`, hiçbir şey yazılmaz. Harcamayla ya da kullanımla kapanan kart bu kurala girmez: geri alma onu yeniden açar.
|
|
153
|
+
* - **Kim geri alabilir:** satışın geri alınmasındaki kural: kimliğin **işlemin yapıldığı şubede** `scan.use` yetkisi olmalıdır (`403 FORBIDDEN`). `locationId` isteğe bağlıdır: geri almanın yapıldığı şube; verilirse işletmenin silinmemiş bir şubesi olmalı ve kimliğin orada da `scan.use` yetkisi olmalıdır. Geri alma bir ziyaret ya da okutma sayılmaz. Salt-okunur hesapta da çalışır.
|
|
154
|
+
* - **Webhook:** `pass.activity`, `kind: "adjust"`, `reason: "action_reversed"`, `undone` (`spend`, `redeem` ya da `use`), geri verilen `delta` (pozitif) ve `unit`; işlem `reference` taşıyorsa o da.
|
|
155
|
+
*
|
|
156
|
+
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
157
|
+
*
|
|
158
|
+
* **Yetki:** `scan.use` — Tarayıcıyı kullanma.
|
|
159
|
+
*
|
|
160
|
+
* Salt-okunur hesapta da çalışır.
|
|
161
|
+
*
|
|
162
|
+
* `POST /v1/passes/{serial}/actions/reverse`
|
|
163
|
+
*
|
|
164
|
+
* @see {@link https://rewloy.com/gelistiriciler/api#op-reverseAction | API referansı}
|
|
165
|
+
*/
|
|
166
|
+
reverseAction(args) {
|
|
167
|
+
return this._call('reverseAction', args);
|
|
168
|
+
}
|
|
143
169
|
// ------------------------------------------------------------ Katılım
|
|
144
170
|
/**
|
|
145
171
|
* Katılım formu
|
|
@@ -312,7 +338,7 @@ export class RewloyMethods {
|
|
|
312
338
|
* - `previousToken`: bu kurulumun daha önceki `rwh_` oturumu (süresi dolmuş olsa da). Adres ya da numara o hesabınsa adres ve numara başına sınırlar uygulanmaz, böylece başkaları sizin kodlarınızı tüketemez. Çıkış yapılmış ya da kaldırılmış bir oturum bir şey kanıtlamaz.
|
|
313
339
|
* - `deviceName`: açılacak oturumun Cihazlarım'daki adı.
|
|
314
340
|
* - **Idempotency-Key** (isteğe bağlı, önerilir; 8–64 karakter, her yeni istek için yeni bir UUID): aynı anahtar ve aynı gövdeyle tekrar yeni kod GÖNDERMEZ, ilk yanıtı (aynı `request`) `Idempotent-Replayed: true` ile döndürür ve sınırlardan düşmez — bağlantısı kopan uygulama güvenle yineler. Aynı anahtar başka bir gövdeyle `422 IDEMPOTENCY_KEY_REUSED`; ilk istek sürerken `409 IDEMPOTENCY_IN_PROGRESS` (bir şey gönderilmez). Yanıt şifreli saklanır, 7 gün tekrar edilir; kodun kendisi 15 dakika geçerlidir, yeni kod için yeni anahtar gönderin. Oturumsuz çağrıda anahtar istemcinin IP adresine bağlıdır. Başlık yoksa her çağrı yeni bir kod ve yeni bir `request` demektir.
|
|
315
|
-
* - **Sözleşme değişikliği
|
|
341
|
+
* - **Sözleşme değişikliği:** `request` yeni. E-postadaki bağlantı artık oturumu tek başına açmaz; bağlantıyı uygulamanız yakalarsa `linkToken` olarak yine aynı `request` ile gönderin.
|
|
316
342
|
*
|
|
317
343
|
* **Kimlik:** kimlik gerekmez.
|
|
318
344
|
*
|
|
@@ -514,7 +540,7 @@ export class RewloyMethods {
|
|
|
514
540
|
/**
|
|
515
541
|
* Davet
|
|
516
542
|
*
|
|
517
|
-
* Davet e-postasındaki bağlantının son parçası (`/davet/<code>`): hangi işletme, hangi adres. Adresin Rewloy hesabı olup olmadığını söylemez (bağlantı daveti yapanda da vardır
|
|
543
|
+
* Davet e-postasındaki bağlantının son parçası (`/davet/<code>`): hangi işletme, hangi adres. Adresin Rewloy hesabı olup olmadığını söylemez (bağlantı daveti yapanda da vardır): hesabı olan kişi o hesapla giriş yapıp oturumuyla kabul eder, olmayan şifre belirleyerek.
|
|
518
544
|
*
|
|
519
545
|
* **Kimlik:** kimlik gerekmez.
|
|
520
546
|
*
|
|
@@ -528,7 +554,7 @@ export class RewloyMethods {
|
|
|
528
554
|
/**
|
|
529
555
|
* Daveti kabul et
|
|
530
556
|
*
|
|
531
|
-
* Koltuk ve roller verilir — daveti yapanın o anki yetkileriyle yeniden denetlenerek — ve oturum döner. Daveti yapan işletme sahiplerine bildirilir. **Davet hiçbir zaman mevcut bir hesabın şifresini sormaz** (bağlantı daveti yapanda da vardır
|
|
557
|
+
* Koltuk ve roller verilir — daveti yapanın o anki yetkileriyle yeniden denetlenerek — ve oturum döner. Daveti yapan işletme sahiplerine bildirilir. **Davet hiçbir zaman mevcut bir hesabın şifresini sormaz** (bağlantı daveti yapanda da vardır):
|
|
532
558
|
* - **Adresin hesabı varsa:** kişi o hesapla girer (`POST /v1/auth/login`) ve bu çağrıyı kendi `rws_` oturumuyla, gövdesiz yapar; yanıt aynı oturumu güncel işletmeleriyle döndürür. Başka bir adresin oturumu `403 INVITE_OTHER_ACCOUNT`. Oturumsuz çağrı, şifreyle de olsa, `409 INVITE_SIGN_IN`.
|
|
533
559
|
* - **Hesabı yoksa:** oturumsuz, `password` (en az 10 karakter) ile hesap açılır ve yeni oturum döner. Adres davetle doğrulanmış sayılmaz: doğrulama bağlantısı e-postayla gider (kayıttaki gibi).
|
|
534
560
|
* - IP başına 15 dakikada 20 deneme.
|
|
@@ -977,7 +1003,7 @@ export class RewloyMethods {
|
|
|
977
1003
|
/**
|
|
978
1004
|
* Müşteriler
|
|
979
1005
|
*
|
|
980
|
-
* Kimliğin şube kapsamındaki müşteriler, kartlarıyla. Paneldeki bütün süzgeçler burada da vardır. Bir müşteri, kapsamınızdaki bir şubede kartı ya da ziyareti varsa görünür. Her müşterinin adresleri ve numaraları `identifiers` içinde, durumlarıyla: doğrulanmış olanı yalnız müşteri değiştirir; API bir adresi ya da numarayı değiştirmez
|
|
1006
|
+
* Kimliğin şube kapsamındaki müşteriler, kartlarıyla. Paneldeki bütün süzgeçler burada da vardır. Bir müşteri, kapsamınızdaki bir şubede kartı ya da ziyareti varsa görünür. Her müşterinin adresleri ve numaraları `identifiers` içinde, durumlarıyla: doğrulanmış olanı yalnız müşteri değiştirir; API bir adresi ya da numarayı değiştirmez.
|
|
981
1007
|
*
|
|
982
1008
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
983
1009
|
*
|
|
@@ -993,7 +1019,7 @@ export class RewloyMethods {
|
|
|
993
1019
|
/**
|
|
994
1020
|
* Müşteriler, kart kart
|
|
995
1021
|
*
|
|
996
|
-
* Aynı süzgeçlerle, her satırda bir kart (panelde "kart kart" görünüm). `q` bir kişiyi bulur ve kişinin bütün kartları gelir; `q` bir kart numarası (ya da başı, en az 4 karakter, tire ve büyük-küçük harf önemsiz) olarak da okunur: numarası onunla başlayan kart `matched: true` taşır ve listenin başına gelir, tam eşleşen en başa
|
|
1022
|
+
* Aynı süzgeçlerle, her satırda bir kart (panelde "kart kart" görünüm). `q` bir kişiyi bulur ve kişinin bütün kartları gelir; `q` bir kart numarası (ya da başı, en az 4 karakter, tire ve büyük-küçük harf önemsiz) olarak da okunur: numarası onunla başlayan kart `matched: true` taşır ve listenin başına gelir, tam eşleşen en başa. Bir kartı numarasıyla okumak için `GET /v1/passes/{serial}` daha doğrudur.
|
|
997
1023
|
*
|
|
998
1024
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
999
1025
|
*
|
|
@@ -1057,7 +1083,7 @@ export class RewloyMethods {
|
|
|
1057
1083
|
/**
|
|
1058
1084
|
* Müşteriyi engelle
|
|
1059
1085
|
*
|
|
1060
|
-
* Müşterinin e-postasını ve doğrulanmış numaralarını engelli listesine ekler
|
|
1086
|
+
* Müşterinin e-postasını ve doğrulanmış numaralarını engelli listesine ekler: bunlardan biriyle yeni kart alınamaz; Rewloy Cüzdan'da aynı hesap, bunlardan birini tuttuğu sürece, başka bir adresi ya da numarasıyla da alamaz. Yazılan (doğrulanmamış) telefon engellenmez: kimse kanıtlamadı, başkasının olabilir. `endCards: true` ile açık kartları da kapatılır (her cüzdana bir kez haber gider). Neden kayda geçer; adres ya da numara değil, özeti saklanır. Ne engellendiyse `entries` içinde; kaldırmak: `DELETE /v1/blocked-emails/{hash}` ya da `DELETE /v1/blocked-phones/{hash}`.
|
|
1061
1087
|
*
|
|
1062
1088
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
1063
1089
|
*
|
|
@@ -1153,7 +1179,7 @@ export class RewloyMethods {
|
|
|
1153
1179
|
/**
|
|
1154
1180
|
* Engellenen numaralar
|
|
1155
1181
|
*
|
|
1156
|
-
* Yeniden eskiye
|
|
1182
|
+
* Yeniden eskiye. Numaralar anahtarlı özet ve maskeli ipucuyla görünür; bir numaranın listede olup olmadığını `GET /v1/blocked-phones/check` ile sorun.
|
|
1157
1183
|
*
|
|
1158
1184
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
1159
1185
|
*
|
|
@@ -1238,7 +1264,7 @@ export class RewloyMethods {
|
|
|
1238
1264
|
* | tür | alanlar |
|
|
1239
1265
|
* |---|---|
|
|
1240
1266
|
* | hediye kartı | `valueMinor` zorunlu (100 – 100.000.000 kuruş); kullanım her zaman sınırsız, bakiye bitene kadar |
|
|
1241
|
-
* | kupon | ya `offerText` (ör. "1 tatlı") ya `valueMinor` (100 – 10.000.000 kuruş indirim); `usage`; isteğe bağlı `onlineValue` (online mağazadaki değeri: `{ kind: amount, value: kuruş }` ya da `{ kind: percent, value: 1–100 }
|
|
1267
|
+
* | kupon | ya `offerText` (ör. "1 tatlı") ya `valueMinor` (100 – 10.000.000 kuruş indirim); `usage`; isteğe bağlı `onlineValue` (online mağazadaki değeri: `{ kind: amount, value: kuruş }` ya da `{ kind: percent, value: 1–100 }`) |
|
|
1242
1268
|
* | indirim kartı | `percent` (yoksa programın oranı); `usage` |
|
|
1243
1269
|
*
|
|
1244
1270
|
* `usage`: `once` tek kullanım, `limited` + `usageLimit` (2–1000), `unlimited`. `validUntil` bir gün (YYYY-AA-GG) ise o günün sonuna kadar (Türkiye saati) geçerlidir. Başka türün alanı reddedilir. Planda `instruments` özelliği gerekir.
|
|
@@ -1273,7 +1299,7 @@ export class RewloyMethods {
|
|
|
1273
1299
|
/**
|
|
1274
1300
|
* Koddan verilen kartlar
|
|
1275
1301
|
*
|
|
1276
|
-
* Yeniden eskiye; `status` ile süzülür. Hediye kartında `balance` kalan tutardır (kuruş). Kimliğin `customers.read` yetkisi de varsa kartı alanın bu işletmedeki adresleri ve numaraları `identifiers` içinde gelir, durumlarıyla: numarayla alınan kartın kişisi numarasıyla tanınır
|
|
1302
|
+
* Yeniden eskiye; `status` ile süzülür. Hediye kartında `balance` kalan tutardır (kuruş). Kimliğin `customers.read` yetkisi de varsa kartı alanın bu işletmedeki adresleri ve numaraları `identifiers` içinde gelir, durumlarıyla: numarayla alınan kartın kişisi numarasıyla tanınır. Bu yetki yoksa ya da kişi kimliğin şube kapsamı dışındaysa `identifiers` gelmez: müşterinin iletişim bilgisi müşteri okuma yetkisiyle görülür.
|
|
1277
1303
|
*
|
|
1278
1304
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
1279
1305
|
*
|
|
@@ -1866,7 +1892,7 @@ export class RewloyMethods {
|
|
|
1866
1892
|
/**
|
|
1867
1893
|
* Analitik
|
|
1868
1894
|
*
|
|
1869
|
-
* Son 7, 30 ya da 90 günün göstergeleri: açık kartlar, yeni kartlar, ziyaretler, ziyaret eden kişiler ve bunlardan dönen (2+ ziyaret), ödüller; günlük ziyaretler; haftalık yeni ve dönen ziyaretçiler; program başına kart → kullanım → ödül hunisi; şubeler; en sık gelen müşteriler (yalnız `customers.read` ile). Apple Cüzdan'daki kartlar ve konum hatırlatması taşıyanlar. `programId` ile tek bir programın
|
|
1895
|
+
* Son 7, 30 ya da 90 günün göstergeleri: açık kartlar, yeni kartlar, ziyaretler, ziyaret eden kişiler ve bunlardan dönen (2+ ziyaret), ödüller; günlük ziyaretler; haftalık yeni ve dönen ziyaretçiler; program başına kart → kullanım → ödül hunisi; şubeler; en sık gelen müşteriler (yalnız `customers.read` ile). Apple Cüzdan'daki kartlar ve konum hatırlatması taşıyanlar. `programId` ile tek bir programın sayıları; kapsamı programlarla sınırlı bir kimlik yalnız kendi programlarını görür. Bir mağaza eklentisinin anahtarına müşteri adı gelmez.
|
|
1870
1896
|
*
|
|
1871
1897
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
1872
1898
|
*
|
|
@@ -1882,7 +1908,7 @@ export class RewloyMethods {
|
|
|
1882
1908
|
/**
|
|
1883
1909
|
* İşlem kaydı: kasa
|
|
1884
1910
|
*
|
|
1885
|
-
* Kartlarda yapılan her işlem, yeniden eskiye: damga, puan, ödül, harcama, yükleme, ziyaret, kupon kullanımı… kim (ekip üyesi, API anahtarı ya da sistem), nerede, hangi kart. `day` işletmenin takvim günüdür. Planda `auditlog` özelliği gerekir. `limit` en fazla
|
|
1911
|
+
* Kartlarda yapılan her işlem, yeniden eskiye: damga, puan, ödül, harcama, yükleme, ziyaret, kupon kullanımı… kim (ekip üyesi, API anahtarı ya da sistem), nerede, hangi kart. `day` işletmenin takvim günüdür. Planda `auditlog` özelliği gerekir. `limit` en fazla 200. `at` Rewloy'nun kaydı yazdığı andır (sıra da ona göredir); sonradan yazılan bir satışın olduğu an `occurredAt`'tadır. Bir geri alma `kind: "adjust"` olarak görünür (kuponun ya da indirim kartının geri verilen kullanımı: `delta: 1`, `unit: null`). Kapsamı programlarla sınırlı bir kimlik (ör. mağaza eklentisinin anahtarı) yalnız kendi programlarının kartlarını görür. Bir mağaza eklentisinin anahtarına kişisel veri gelmez: ekip üyesi `actor` yerine "ekip üyesi" yazar, `personId` null'dır.
|
|
1886
1912
|
*
|
|
1887
1913
|
* **Kimlik:** API anahtarı, ekip oturumu.
|
|
1888
1914
|
*
|
|
@@ -1948,7 +1974,7 @@ export class RewloyMethods {
|
|
|
1948
1974
|
*
|
|
1949
1975
|
* Kişisel verinin sistemden çıktığı an; bu yüzden **yalnız ekip oturumuyla** ve oturumu açan kişinin şifresiyle (`password`) yapılır — API anahtarıyla yapılamaz. Saatte en fazla 20; her biri kayda geçer (satır sayısı, kapsam, dönem).
|
|
1950
1976
|
* - `kind: customers` müşteri listesi (`customers.export`), `kind: ledger` son `days` günün işlemleri (`analytics.export`, 1–366).
|
|
1951
|
-
* - Müşteri listesinde e-posta ve telefon durumlarıyla ayrı sütunlardadır
|
|
1977
|
+
* - Müşteri listesinde e-posta ve telefon durumlarıyla ayrı sütunlardadır: `E-posta doğrulandı` (evet/hayır: müşteri adresi kendi koduyla doğruladı mı), `Doğrulanmış telefon` (yalnız müşterinin kendi koduyla doğruladığı numaralar), `Yazılan telefon (doğrulanmamış)` (formda, kasada ya da API ile yazılan; doğrulanmış bir numarayla aynıysa boş). Numaralar 0532 123 45 67 biçiminde.
|
|
1952
1978
|
* - Türkçe Excel için: UTF-8 BOM, `;` ayraç, CRLF. `=`, `+`, `-`, `@` ile başlayan hücreler formül olarak çalışmasın diye `'` ile başlar.
|
|
1953
1979
|
*
|
|
1954
1980
|
* **Kimlik:** ekip oturumu.
|
|
@@ -2370,7 +2396,7 @@ export class RewloyMethods {
|
|
|
2370
2396
|
* - Kod **yalnız bu yanıtta** görünür; Rewloy yalnız özetini saklar. 15 dakika geçerlidir.
|
|
2371
2397
|
* - Kodu bir kişi alır (ekip oturumu; bir anahtar anahtar üretemez), `apikeys.manage`, kartın programında mağaza bağlantısı yetkisi ve — elle anahtar oluştururken olduğu gibi — `team.manage` ile (anahtarın yetkisi o kişiden verilen bir roldür; kişi E-ticaret rolünün yetkilerini tüm şubelerde taşımalıdır), `api` ve `ecommerce` özellikli bir planda. Kod bir API anahtarı ürettiği için kişinin şifresi yeniden istenir (`password`), anahtar oluştururken olduğu gibi. Bağlantı ve anahtar, kod kullanıldığı anda bu kişinin yetkileriyle kurulur: kişi o arada yetkisini kaybettiyse hiçbir şey kurulmaz.
|
|
2372
2398
|
* - Kural alanları `POST /v1/shops` ile aynıdır. En fazla 5 bağlantı ve aynı anda en fazla 5 bekleyen kod.
|
|
2373
|
-
* - **Eklentinin yetkileri
|
|
2399
|
+
* - **Eklentinin yetkileri**, kodu alan kişi seçer; sonra bağlantının sayfasından ya da `PUT /v1/shops/{id}/plugin-abilities` ile değişir:
|
|
2374
2400
|
* - `view` (Görüntüleme; bu çağrıda gönderilmezse kapalı, panelin formunda işaretli gelir): bağlantının programında `passes.read` ve `analytics.read` — kartın durumu (`GET /v1/passes/{serial}`), programın sayıları (`GET /v1/analytics?programId=`) ve kartlardaki son işlemler (`GET /v1/activity`). Müşterinin adı, e-postası ya da telefonu gelmez; ekip üyesinin e-postası da.
|
|
2375
2401
|
* - `tillLocationId` (Kasa, varsayılan kapalı): bu tek şubede ve bağlantının programında `scan.use` — `GET /v1/passes/{serial}/till`, `POST …/sale`, `POST …/actions`. Hediye kartı yüklemek (`load`) yine `instruments.issue` ister ve verilmez. Kapalı başlar: açıkken WooCommerce'i yönetebilen herkes o şubede müşterilerin bakiyesini harcatabilir.
|
|
2376
2402
|
* - Kişi bu yetkileri verebilmelidir (`team.manage` ve alt küme kuralı: Görüntüleme yetkilerini tüm şubelerde, `scan.use`'u o şubede taşımalı).
|
|
@@ -2407,7 +2433,7 @@ export class RewloyMethods {
|
|
|
2407
2433
|
*
|
|
2408
2434
|
* Mağaza eklentisinin tek adımı: paneldeki bağlantı kodunu (`rwc_…`) verir, karşılığında **bir kez** şunları alır: bağlantı (`shop`), bağlantının sırrı (`secret`, WooCommerce webhook'una yazılır) ve yalnız bu bağlantıya bağlı API anahtarı (`apiKey.token`). Kimlik istemez; kod kimliktir.
|
|
2409
2435
|
* - Kod **tek kullanımlıktır**: ikinci kez, süresi dolmuşken ya da iptal edilmişken aynı yanıtı alır: `404 CONNECT_TOKEN_INVALID` (hangisi olduğu söylenmez). Kurulum yarıda reddedilirse (ör. 5 bağlantı sınırı) kod harcanmaz.
|
|
2410
|
-
* - Anahtar "E-ticaret" rolündedir ve bağlantının programıyla sınırlıdır: kartları ve ayarları görür, yalnız kendi bağlantısını görür ve yönetir, o programdan kart verir. Kodu alan kişi Görüntüleme ve Kasa'yı seçtiyse anahtar onları da alır (`apiKey.abilities
|
|
2436
|
+
* - Anahtar "E-ticaret" rolündedir ve bağlantının programıyla sınırlıdır: kartları ve ayarları görür, yalnız kendi bağlantısını görür ve yönetir, o programdan kart verir. Kodu alan kişi Görüntüleme ve Kasa'yı seçtiyse anahtar onları da alır (`apiKey.abilities`); `GET /v1/me` her an yeniden söyler. Bağlantı silinince anahtar da iptal edilir. Test ortamının kodu `rwk_test_` anahtarı verir (`mode`).
|
|
2411
2437
|
* - `shopName` anahtarın panelde görünen adına eklenir ("WooCommerce · …"). IP başına 10 dakikada 20 istek.
|
|
2412
2438
|
*
|
|
2413
2439
|
* **Kimlik:** kimlik gerekmez.
|
|
@@ -2422,10 +2448,10 @@ export class RewloyMethods {
|
|
|
2422
2448
|
/**
|
|
2423
2449
|
* Eklentinin yetkilerini değiştir
|
|
2424
2450
|
*
|
|
2425
|
-
* Bağlantı koduyla kurulmuş bir bağlantının eklenti anahtarının bağlantı dışında yapabildikleri
|
|
2451
|
+
* Bağlantı koduyla kurulmuş bir bağlantının eklenti anahtarının bağlantı dışında yapabildikleri: Görüntüleme (`view`) ve tek bir şubenin Kasası (`tillLocationId`; null = kapalı). Değişiklik mevcut anahtara **hemen** uygulanır; eklentinin yeniden bağlanması gerekmez, eklenti `GET /v1/me` ile okur.
|
|
2426
2452
|
* - Yalnız ekip oturumuyla: bir anahtarın yetkisini değiştirmek, anahtar oluşturmak gibidir. Bağlantının programında `shops.manage` (ya da `apikeys.manage`), ayrıca `apikeys.manage`, `team.manage` ve alt küme kuralı (verilen yetkileri kişi o şubelerde taşımalı) ister; kişinin şifresi (`password`) ve değişikliğin nedeni (`reason`, en fazla 200 karakter, yalnız ekibin gördüğü işlem kaydına yazılır) istenir.
|
|
2427
2453
|
* - Bağlantıyı eklenti kurmadıysa ya da eklentinin anahtarı iptal edildiyse `409 NO_PLUGIN_KEY`.
|
|
2428
|
-
* - **Eklentinin yetkileri
|
|
2454
|
+
* - **Eklentinin yetkileri**, kodu alan kişi seçer; sonra bağlantının sayfasından ya da `PUT /v1/shops/{id}/plugin-abilities` ile değişir:
|
|
2429
2455
|
* - `view` (Görüntüleme; bu çağrıda gönderilmezse kapalı, panelin formunda işaretli gelir): bağlantının programında `passes.read` ve `analytics.read` — kartın durumu (`GET /v1/passes/{serial}`), programın sayıları (`GET /v1/analytics?programId=`) ve kartlardaki son işlemler (`GET /v1/activity`). Müşterinin adı, e-postası ya da telefonu gelmez; ekip üyesinin e-postası da.
|
|
2430
2456
|
* - `tillLocationId` (Kasa, varsayılan kapalı): bu tek şubede ve bağlantının programında `scan.use` — `GET /v1/passes/{serial}/till`, `POST …/sale`, `POST …/actions`. Hediye kartı yüklemek (`load`) yine `instruments.issue` ister ve verilmez. Kapalı başlar: açıkken WooCommerce'i yönetebilen herkes o şubede müşterilerin bakiyesini harcatabilir.
|
|
2431
2457
|
* - Kişi bu yetkileri verebilmelidir (`team.manage` ve alt küme kuralı: Görüntüleme yetkilerini tüm şubelerde, `scan.use`'u o şubede taşımalı).
|
|
@@ -2985,8 +3011,8 @@ export class RewloyMethods {
|
|
|
2985
3011
|
* Webhook ekle
|
|
2986
3012
|
*
|
|
2987
3013
|
* Seçilen olaylar bu adrese imzalı olarak gönderilir; `secret` **yalnız bu yanıtta** döner (imzayı doğrulamak için saklayın). En fazla 10 etkin webhook. Yeni webhook bundan sonraki olayları alır, geçmişi değil.
|
|
2988
|
-
* - **Adres:** herkese açık bir **https** adresi; iç ağ adresleri (localhost, 127.0.0.1, 10.x, 172.16–31.x, 192.168.x…) ve http kabul edilmez (`422 BAD_WEBHOOK_URL`). Kural **test ortamında da aynıdır**: teslimleri Rewloy'un sunucuları yapar ve sizin bilgisayarınıza ulaşamaz. Yerel geliştirmede sunucunuzu bir tünelle açın (ör. `cloudflared tunnel --url http://localhost:3000` ya da `ngrok http 3000`) ve tünelin https adresini verin. Teslim anında adres yeniden çözülür ve denetlenir.
|
|
2989
|
-
* - **API anahtarıyla
|
|
3014
|
+
* - **Adres:** herkese açık bir **https** adresi; iç ağ adresleri (localhost, 127.0.0.1, 10.x, 172.16–31.x, 192.168.x…) ve http kabul edilmez (`422 BAD_WEBHOOK_URL`). Kural **test ortamında da aynıdır**: teslimleri Rewloy'un sunucuları yapar ve sizin bilgisayarınıza ulaşamaz. Yerel geliştirmede sunucunuzu bir tünelle açın (ör. `cloudflared tunnel --url http://localhost:3000` ya da `ngrok http 3000`) ve tünelin https adresini verin. Teslim anında adres yeniden çözülür ve denetlenir. Canlı olmayan bir Rewloy kurulumu (geliştirme, staging) http ve iç ağ adreslerini kabul eder; o zaman yanıttaki `warnings` canlı ortamın bu adresi neden reddedeceğini söyler.
|
|
3015
|
+
* - **API anahtarıyla**: `webhooks.manage` yetkisi taşıyan anahtar webhook ekler, açar, kapatır, deneme olayı gönderir ve teslimleri okur. Anahtar yalnız kendisinin okuyabildiği olayları bir adrese gönderebilir: webhook işletmenin her şubesinin ve her programının olaylarını taşıdığı için anahtarın **her şubede ve her programda** `passes.read` yetkisi olmalıdır (yoksa `403 FORBIDDEN`). Her değişiklik, ekip üyesininki gibi, anahtar adına kaydedilir (`GET /v1/activity/access`). Anahtarın eklediği webhook anahtardan uzun yaşamaz: anahtar kaldırılınca, süresi dolunca ya da yetkisi daralınca kendiliğinden kapanır (`createdByKey`, `disabledReason`).
|
|
2990
3016
|
* - **10 etkin webhook** sınırı işletme başınadır: kişilerin ve bütün anahtarların eklediği etkin webhook'lar birlikte sayılır (`409 LIMIT`).
|
|
2991
3017
|
*
|
|
2992
3018
|
* **Kimlik:** ekip oturumu, API anahtarı.
|
|
@@ -3017,7 +3043,7 @@ export class RewloyMethods {
|
|
|
3017
3043
|
/**
|
|
3018
3044
|
* Aç ya da kapat
|
|
3019
3045
|
*
|
|
3020
|
-
* Kapalıyken olaylar gönderilmez; yeniden açılınca açıldığı andan sonraki olaylar gelir ve başarısızlık sayacı sıfırlanır. Bir API anahtarı yalnız olaylarını okuyabildiği bir webhook'u açabilir; yalnız kendi eklediği webhook'ları kapatabilir, başkasınınkini kapatmak için her yerde `passes.read` gerekir (`403 FORBIDDEN
|
|
3046
|
+
* Kapalıyken olaylar gönderilmez; yeniden açılınca açıldığı andan sonraki olaylar gelir ve başarısızlık sayacı sıfırlanır. Bir API anahtarı yalnız olaylarını okuyabildiği bir webhook'u açabilir; yalnız kendi eklediği webhook'ları kapatabilir, başkasınınkini kapatmak için her yerde `passes.read` gerekir (`403 FORBIDDEN`). Bir anahtarın eklediği kapalı bir webhook'u bir kişi açarsa webhook o kişinin olur.
|
|
3021
3047
|
*
|
|
3022
3048
|
* **Kimlik:** ekip oturumu, API anahtarı.
|
|
3023
3049
|
*
|
|
@@ -3304,7 +3330,7 @@ export class RewloyMethods {
|
|
|
3304
3330
|
* 3. son zamanlarda sık gidilenler: son 90 günün ziyaretleri, yenisi daha ağır (her ziyaret bugün 1, 30 gün önce ½, 60 gün önce ¼ sayılır);
|
|
3305
3331
|
* 4. en yeni kart;
|
|
3306
3332
|
* bütün kartları bitmiş işletmeler en sonda. Bir işletmenin içinde önce etkin kartlar, en eskisi önce. Konuma göre sıralamak uygulamanın işidir: her kart işletmesinin şubelerini (`places`) taşır, konum sunucuya gönderilmez; yıldızlılar yine en başta kalsın.
|
|
3307
|
-
* **Listeden kaldırılan kartlar** (`hidden: true
|
|
3333
|
+
* **Listeden kaldırılan kartlar** (`hidden: true`) bu sıranın ardından, en sonda gelir ve sırayı etkilemez: Kartlarım'ı ve işletme görünümünü onları atlayarak çizin; bütün kartları kaldırılmış işletme Kartlarım'da görünmez. Eski kartlar biten kartlardır (`ended: true`), kaldırılmış olsun olmasın: en son biten önce (`endedAt`, kaydı olmayan en sonda).
|
|
3308
3334
|
* `merchant` (kartlardaki `merchantSlug`) yalnız o işletmenin kartlarını işletme görünümünün sırasıyla verir, listeden kaldırılanlar sonda.
|
|
3309
3335
|
*
|
|
3310
3336
|
* **Kimlik:** kart sahibi oturumu.
|
|
@@ -3560,7 +3586,7 @@ export class RewloyMethods {
|
|
|
3560
3586
|
*
|
|
3561
3587
|
* Hesap, kasadaki QR'ın programına katılır. Kart, hesabın seçilen doğrulanmış adresi ya da numarasıyla verilir ve hesaba bağlanır. Adresle katılımda kartın bağlantısı o adrese de gider: telefon kaybolsa da kart kaybolmaz; numaraya hiçbir şey gitmez. Katılım, aydınlatma metninin sunulduğu andır; bu kayıt (`kvkkConsent: true`) kaynağıyla tutulur (kaynak: Rewloy Cüzdan uygulaması, `cuzdan-app`).
|
|
3562
3588
|
* - `email` ya da `verifiedPhone` (yalnız biri): `GET /v1/holder/programs/{id}` yanıtındaki `emails` ya da `phones` içinden biri. Hesapta doğrulanmamış bir adres ya da numara `400 VALIDATION` döner, çünkü bir forma yazılan adres bir şey kanıtlamaz. Numarayla katılımda programın telefon sorusu sorulmaz: numara telefondur.
|
|
3563
|
-
* - İşletmede hesabın başka bir adresi ya da numarasıyla açılmış bir kaydı varsa yeni kayıt açılmaz: seçilen adres ya da numara o kayda eklenir
|
|
3589
|
+
* - İşletmede hesabın başka bir adresi ya da numarasıyla açılmış bir kaydı varsa yeni kayıt açılmaz: seçilen adres ya da numara o kayda eklenir.
|
|
3564
3590
|
* - Programın sorduğu öteki alanlar (`fields`) gövdede gelir; zorunlu biri eksikse `FIELD_REQUIRED`.
|
|
3565
3591
|
* - Hesabın bu programda zaten kartı varsa yeni kart verilmez, o kart döner (`created: false`, `200`); katılım kapalıyken de. Aynı anda gelen iki istek de tek kart yapar. Yeni kart `201` ile döner.
|
|
3566
3592
|
* - Kartı olmayan hesap için katılım kimliksiz katılımdaki gibi kapanır (`JOIN_CLOSED`). IP başına 10 dakikada 30 katılım sınırı da kimliksiz katılımla ortaktır.
|
|
@@ -3577,7 +3603,7 @@ export class RewloyMethods {
|
|
|
3577
3603
|
/**
|
|
3578
3604
|
* Kodu tek dokunuşla kullan
|
|
3579
3605
|
*
|
|
3580
|
-
* Hediye kartı, kupon ya da indirim kodu (`/c/{code}`) bu hesapla kullanılır: kart, hesabın seçilen doğrulanmış adresi ya da numarasıyla verilir ve hesaba bağlanır. Web'deki `/c/{code}` sayfasının oturum açıkken yaptığıdır
|
|
3606
|
+
* Hediye kartı, kupon ya da indirim kodu (`/c/{code}`) bu hesapla kullanılır: kart, hesabın seçilen doğrulanmış adresi ya da numarasıyla verilir ve hesaba bağlanır. Web'deki `/c/{code}` sayfasının oturum açıkken yaptığıdır. Kodun ne verdiği ve sorduğu alanlar `GET /v1/public/codes/{code}` ile öğrenilir.
|
|
3581
3607
|
* - `email` ya da `verifiedPhone` (yalnız biri): hesabın doğrulanmış adreslerinden ya da numaralarından biri; hesapta doğrulanmamışsa `400 VALIDATION`. Numarayla alımda programın telefon sorusu sorulmaz: numara telefondur.
|
|
3582
3608
|
* - Kişi başına sınır kişide sayılır, hangi adres ya da numarayla tanınırsa tanınsın. Sınır dolduysa yeni kart verilmez, kişinin bu koddan aldığı son kart döner (`created: false`, `200`).
|
|
3583
3609
|
* - İşletmede hesabın başka bir adresi ya da numarasıyla açılmış bir kaydı varsa yeni kayıt açılmaz: seçilen adres ya da numara o kayda eklenir.
|
|
@@ -3763,7 +3789,7 @@ export class RewloyMethods {
|
|
|
3763
3789
|
/**
|
|
3764
3790
|
* E-postayı ya da numarayı değiştir: kod gönder
|
|
3765
3791
|
*
|
|
3766
|
-
* Hesabın bir e-postasının ya da numarasının (`GET /v1/holder/account` listesindeki kimliği) yerine yenisi
|
|
3792
|
+
* Hesabın bir e-postasının ya da numarasının (`GET /v1/holder/account` listesindeki kimliği) yerine yenisi: adrese `email`, numaraya `phone` (aynı türden). Yeniye 6 haneli bir kod gider; kodu bu yanıttaki `request` ile `POST /v1/holder/identities/{id}/replace/verify` gönderin.
|
|
3767
3793
|
* - Uygulamanın oturumu cihazın kanıtıdır (web'deki cihaz anahtarının yerine).
|
|
3768
3794
|
* - Yeni adres ya da numara eskisiyle aynıysa ya da zaten bu hesabınsa `409 IDENT_SAME`. Numara için telefonla giriş açık değilse `501 NOT_ENABLED`; `channel` ve sınırlar `POST /v1/holder/identities/phone` gibidir. Hesap başına saatte 10 (ekleme ve değiştirme birlikte).
|
|
3769
3795
|
* - **Idempotency-Key** (isteğe bağlı, önerilir; 8–64 karakter, her yeni istek için yeni bir UUID): aynı anahtar ve aynı gövdeyle tekrar yeni kod GÖNDERMEZ, ilk yanıtı (aynı `request`) `Idempotent-Replayed: true` ile döndürür ve sınırlardan düşmez — bağlantısı kopan uygulama güvenle yineler. Aynı anahtar başka bir gövdeyle `422 IDEMPOTENCY_KEY_REUSED`; ilk istek sürerken `409 IDEMPOTENCY_IN_PROGRESS` (bir şey gönderilmez). Yanıt şifreli saklanır, 7 gün tekrar edilir; kodun kendisi 15 dakika geçerlidir, yeni kod için yeni anahtar gönderin. Oturumsuz çağrıda anahtar istemcinin IP adresine bağlıdır. Başlık yoksa her çağrı yeni bir kod ve yeni bir `request` demektir.
|
|
@@ -3780,8 +3806,8 @@ export class RewloyMethods {
|
|
|
3780
3806
|
/**
|
|
3781
3807
|
* E-postayı ya da numarayı değiştir: kodu doğrula
|
|
3782
3808
|
*
|
|
3783
|
-
* Değiştirme adımının `request` değeri ve yeniye gelen kod
|
|
3784
|
-
* - Hesaba girmenin en az 72 saattir (`recovery.wait_hours`) hesapta olan başka bir yolu varsa (bir e-posta, bir numara, passkey, Google ya da Apple; yeni eklenen ya da bir birleştirmeyle gelen sayılmaz
|
|
3809
|
+
* Değiştirme adımının `request` değeri ve yeniye gelen kod.
|
|
3810
|
+
* - Hesaba girmenin en az 72 saattir (`recovery.wait_hours`) hesapta olan başka bir yolu varsa (bir e-posta, bir numara, passkey, Google ya da Apple; yeni eklenen ya da bir birleştirmeyle gelen sayılmaz) yenisi eskisinin yerini hemen alır (`applied`): işletmelerdeki kayıtlar yeniye geçer, hesabın öteki adreslerine e-posta, öteki cihazlarına bildirim gider.
|
|
3785
3811
|
* - Yoksa değişiklik bekler (`pending`, `change.dueAt`; ayar `recovery.wait_hours`, 72 saat): o zamana kadar eskisiyle girilir, yenisiyle girilmez. Eski adrese iptal bağlantılı bir e-posta, öteki cihazlara bildirim gider; SMS ya da WhatsApp gitmez.
|
|
3786
3812
|
* - Yeni adres ya da numara başka bir Rewloy Cüzdan hesabındaysa `409 MERGE_REQUIRED` (`details.request`): kişiye sorun, yanıtı `POST /v1/holder/merge` ile gönderin; birleşince değişiklik yapılır. Eski giriş yolu, birleşmeden önce bu hesaba girmenin tek yoluysa değişiklik yine bekler (öteki hesabın giriş yolları sayılmaz).
|
|
3787
3813
|
* - Yanlış kodda `CODE_INVALID`. Eski giriş yolu artık hesapta değilse `404 NOT_FOUND`.
|
|
@@ -3798,7 +3824,7 @@ export class RewloyMethods {
|
|
|
3798
3824
|
/**
|
|
3799
3825
|
* Bekleyen değişikliği iptal et ("Bu değişikliği ben yapmadım")
|
|
3800
3826
|
*
|
|
3801
|
-
* Hesabın bekleyen giriş yolu değişikliğini (`GET /v1/holder/account` `pendingChange.id`) ya da onaylanmış ve bekleyen bir kurtarma talebini (`pendingRecovery.id`) iptal eder
|
|
3827
|
+
* Hesabın bekleyen giriş yolu değişikliğini (`GET /v1/holder/account` `pendingChange.id`) ya da onaylanmış ve bekleyen bir kurtarma talebini (`pendingRecovery.id`) iptal eder.
|
|
3802
3828
|
* - Değişikliği bu cihaz istediyse kişinin vazgeçmesidir. Başka bir cihaz iptal ederse "Bu değişikliği ben yapmadım" demektir: değişikliği isteyen cihazın oturumu kapanır ve hesap işaretlenir (kurtarma talepleri artık kendiliğinden onaylanmaz).
|
|
3803
3829
|
* - Kurtarma talebi iptal edilirse hesap olduğu gibi kalır ve işaretlenir.
|
|
3804
3830
|
* - Bekleyen bir şey yoksa (uygulandı, iptal edildi) `404 NOT_FOUND`.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { OperationMeta } from '../types.js';
|
|
2
2
|
import type { OperationId } from './types.js';
|
|
3
3
|
/** The version of the API document this was generated from (`info.version`). */
|
|
4
|
-
export declare const API_VERSION = "1.
|
|
4
|
+
export declare const API_VERSION = "1.1.0";
|
|
5
5
|
/** The metadata table: per operation, its method and path, the credential kinds it accepts, whether it takes `Rewloy-Merchant` and `Idempotency-Key`, how its answer is read and whether it is paged, streams or is deprecated. */
|
|
6
6
|
export declare const OPERATIONS: {
|
|
7
7
|
readonly [K in OperationId]: OperationMeta;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Generated by scripts/generate.ts from the Rewloy OpenAPI document
|
|
2
|
-
// (openapi/openapi.json, API 1.
|
|
2
|
+
// (openapi/openapi.json, API 1.1.0). Do not edit: run `npm run generate`.
|
|
3
3
|
/** The version of the API document this was generated from (`info.version`). */
|
|
4
|
-
export const API_VERSION = '1.
|
|
4
|
+
export const API_VERSION = '1.1.0';
|
|
5
5
|
/** The metadata table: per operation, its method and path, the credential kinds it accepts, whether it takes `Rewloy-Merchant` and `Idempotency-Key`, how its answer is read and whether it is paged, streams or is deprecated. */
|
|
6
6
|
export const OPERATIONS = {
|
|
7
7
|
issuePass: { method: 'POST', path: '/v1/passes', auth: ['key', 'staff'], merchant: true, idempotency: 'optional', body: true, response: 'json', paged: false, stream: false, deprecated: null },
|
|
@@ -10,6 +10,7 @@ export const OPERATIONS = {
|
|
|
10
10
|
passAction: { method: 'POST', path: '/v1/passes/{serial}/actions', auth: ['key', 'staff'], merchant: true, idempotency: 'required', body: true, response: 'json', paged: false, stream: false, deprecated: null },
|
|
11
11
|
recordSale: { method: 'POST', path: '/v1/passes/{serial}/sale', auth: ['key', 'staff'], merchant: true, idempotency: 'required', body: true, response: 'json', paged: false, stream: false, deprecated: null },
|
|
12
12
|
reverseSale: { method: 'POST', path: '/v1/passes/{serial}/sale/reverse', auth: ['key', 'staff'], merchant: true, idempotency: null, body: true, response: 'json', paged: false, stream: false, deprecated: null },
|
|
13
|
+
reverseAction: { method: 'POST', path: '/v1/passes/{serial}/actions/reverse', auth: ['key', 'staff'], merchant: true, idempotency: null, body: true, response: 'json', paged: false, stream: false, deprecated: null },
|
|
13
14
|
publicProgram: { method: 'GET', path: '/v1/public/programs/{id}', auth: ['public', 'holder', 'staff', 'key'], merchant: true, idempotency: null, body: false, response: 'json', paged: false, stream: false, deprecated: null },
|
|
14
15
|
joinProgram: { method: 'POST', path: '/v1/public/programs/{id}/join', auth: ['public', 'holder', 'staff', 'key'], merchant: true, idempotency: null, body: true, response: 'json', paged: false, stream: false, deprecated: null },
|
|
15
16
|
publicCode: { method: 'GET', path: '/v1/public/codes/{code}', auth: ['public', 'holder', 'staff', 'key'], merchant: true, idempotency: null, body: false, response: 'json', paged: false, stream: false, deprecated: null },
|
|
@@ -361,6 +362,9 @@ export const ERROR_TITLES = {
|
|
|
361
362
|
SALE_NOT_FOUND: 'Geri alınacak satış yok',
|
|
362
363
|
SALE_AMBIGUOUS: 'Bu notla birden çok satış var',
|
|
363
364
|
SALE_ALREADY_SPENT: 'Satışın kazandırdığı kullanılmış',
|
|
365
|
+
ACTION_NOT_FOUND: 'Geri alınacak işlem yok',
|
|
366
|
+
ACTION_AMBIGUOUS: 'Bu notla birden çok işlem var',
|
|
367
|
+
ACTION_NOT_REVERSIBLE: 'İşlem geri alınamaz',
|
|
364
368
|
WRONG_LOCATION: 'Kart bu şubede geçerli değil',
|
|
365
369
|
INVALID_PROMOTION: 'Kasa kampanyası geçersiz',
|
|
366
370
|
PROMOTION_NOT_FOUND: 'Kasa kampanyası bulunamadı',
|