Ana içeriğe geç

POST /dynamicqr — Dinamik QR Kod Oluşturma

📋 Genel Bilgi

Dinamik QR kod oluşturur. config gönderilirse base64 SVG QR, gönderilmezse sadece link döner.

Base URL: {{url}}/dynamicqr Method: POST Content-Type: application/json


🔐 Headers

HeaderValue
AuthorizationBearer {{masked_jwt_8}}
Content-Typeapplication/json

📥 Request Body

{
"terminal_code": "TERM-003",
"store_code": "mobildev-mq",
"redirectUri": "https://example.com/thank-you",
"metadata": {
"İşlem ID": "Random İşlem ID",
"Müşteri Sadakat": "sadakat bilgileri"
},
"config": {
"colorDark": "#000000",
"colorLight": "#ffffff",
"size": 300,
"errorCorrection": "M"
},
"expireAt": ""
}

Parametreler

AlanTipZorunluAçıklamaÖrnek
terminal_codestringTerminal kodu"TERM-003"
store_codestringMağaza kodu"mobildev-mq"
redirectUristringQR tarandıktan sonra yönlendirilecek URL (thank-you sayfası)"https://example.com/thank-you"
metadataobjectMüşterinin dinamik olarak göstermek istediği QR linkleri / işlem bilgileri-
config.colorDarkstringQR koyu renk (hex)"#000000"
config.colorLightstringQR açık renk (hex)"#ffffff"
config.sizeintegerQR boyutu (px)300
config.errorCorrectionstringHata düzeltme seviyesi (L, M, Q, H)"M"
expireAtstringSon kullanma tarihi (ISO 8601)""

🔄 Akış Diyagramı (Dynamic QR — Uzaktan Doğrulama)

Adım Açıklamaları:

AdımTarafİşlemAçıklama
1Terminal → APIPOST /dynamicqrMağaza terminali, doğrulama için dinamik QR oluşturur. redirectUri, metadata (randevu tarihi, servis bilgisi vb.) gönderilir.
2API → TerminalQR kod + URL dönerBenzersiz code, url (https://wentro.net/dq/{code}) ve isteğe bağlı base64 SVG QR döner.
3Terminal → MüşteriQR göster / link gönderQR mağazada ekranda gösterilir veya müşteriye SMS/e-posta/WhatsApp ile link gönderilir.
4Müşteri → QRQR tarar / linki açarSon kullanıcı, oluşturulan QR kodu tarar veya gönderilen https://wentro.net/dq/{code} linkini açar.
5Müşteri → APIDoğrulama yapılırLink açıldığında müşteri passkey ile doğrulama ekranı görür. Onay verildiğinde doğrulama tamamlanır.
6API → MüşteriredirectUri'ye yönlendirilirDoğrulama başarılı olduğunda, istek sırasında belirlenen redirectUri (thank-you sayfası) kullanılarak müşteri yönlendirilir.
7Thank-You → MüşteriSayfa gösterilirSon kullanıcı teşekkür/sonuç sayfasını görür. İşlem tamamlanır.

Kullanım Senaryoları:

SenaryoAçıklama
Randevu OnayıMüşteri randevu tarihi, servis bilgisi ve tutarı metadata'ya ekler → QR oluşturur → müşteri linki açar ve onay verir.
İşlem Bazı DoğrulamaÖdeme/transfer işleminden önce "Ek Onay Gerekiyor" uyarısı verilir → Dynamic QR ile son kullanıcıdan anlık onay alınır.
KVKK / EK OnayıMüşterinin KVKK veya Ek Onay (SMS, call, email) onayları alınmak istendiğinde kullanılır.

✅ Response — 200 OK

{
"code": "0OTd490VcI",
"url": "https://wentro.net/dq/0OTd490VcI",
"base64": "data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMDAiIGhlaWdodD0iMzAwIiB2aWV3Qm94PSIwIDAgMzAwIDMwMCI+CiAgPHJlY3Qgd2lkdGg9IjMwMCIgaGVpZ2h0PSIzMDAiIGZpbGw9IiNmZmZmZmYiLz4KICA8cmVjdCB4PSIzNy4wIiB5PSIzNy4wIiB3aWR0aD0iMS4wIiBoZWlnaHQ9IjEuMCIgZmlsbD0iIzAwMDAwMCIvPgogIDxyZWN0IHg9IjM3LjAiIHk9IjM4LjAiIHdpZHRoPSIxLjAiIGhlaWdodD0iMS4wIiBmaWxsPSIjMDAwMDAwIi8+CiAgPHJlY3QgeD0iMjYxLjAiIHk9IjI2MC4wIiB3aWR0aD0iMS4wIiBoZWlnaHQ9IjEuMCIgZmlsbD0iIzAwMDAwMCIvPgogIDxyZWN0IHg9IjI2MS4wIiB5PSIyNjEuMCIgd2lkdGg9IjEuMCIgaGVpZ2h0PSIxLjAiIGZpbGw9IiMwMDAwMDAiLz4KPC9zdmc+"
}

Response Alanları

AlanTipAçıklama
codestringQR kod benzersiz kodu (10 karakter)
urlstringQR kod URL'si (https://wentro.net/dq/{code})
base64stringBase64 encoded SVG QR kod (sadece config gönderildiyse)

❌ Error Responses

Tüm hata yanıtları aşağıdaki formatta döner:

{
"Response": {
"code": 4003,
"description": "Either store_code or terminal_code must be set"
},
"Success": false
}
HTTPcodeEnumdescriptionNe Zaman Oluşur
4004003StoreOrTerminalCodeRequiredEither store_code or terminal_code must be setstore_code ve terminal_code alanlarının ikisi de gönderilmemiş, ya da ikisi de boş string olarak gönderilmiş
4004004QrExpirationDatePastQR expiration date is in the pastexpiresAt gönderildiğinde, UnixTime.getInstance().before(this.expiresAt) koşulu sağlanırsa
4004005QrExpirationDateTooFarQR code expiration date can be a maximum of 72 hoursexpiresAt gönderildiğinde, UnixTime.getInstance().addDate(3).after(this.expiresAt) koşulu sağlanırsa
5004001DynamicQrInsertErrorAn error occurred while creating the dynamic QR codeINSERT sorgusu veritabanı seviyesinde başarısız olduğunda (örn. constraint ihlali, bağlantı hatası) fırlatılır
4003001StoreCodeInvalidInvalid store codeCacheContainer.getInstance().checkStoreBy(companyId, storeCode) çağrısında, gönderilen store_code sisteme kayıtlı bir mağazaya karşılık gelmiyorsa

Örnek — 400 Store/Terminal Code Required

{
"Response": {
"code": 4003,
"description": "Either store_code or terminal_code must be set"
},
"Success": false
}

Örnek — 400 Expiration Date Errors

{
"Response": {
"code": 4004,
"description": "QR expiration date is in the past"
},
"Success": false
}
{
"Response": {
"code": 4005,
"description": "QR code expiration date can be a maximum of 72 hours"
},
"Success": false
}

Örnek — 400 Invalid Store Code

{
"Response": {
"code": 3001,
"description": "Invalid store code"
},
"Success": false
}

Örnek — 500 Insert Error

{
"Response": {
"code": 4001,
"description": "An error occurred while creating the dynamic QR code"
},
"Success": false
}

📝 Notlar

  • Amaç: Dynamic QR, son kullanıcıdan uzaktan işlem bazında onay almak için kullanılır. Mağazada değil, müşterinin kendi cihazından doğrulama yapılır.

  • config gönderilmezse sadece link döner, base64 SVG QR oluşturulmaz.

  • QR kod tek kullanımlık olabilir (maxScans: 1). Bir kez tarandıktan sonra scanLimitReached: true olur ve bir daha kullanılamaz.

  • QR tarandıktan veya link açıldıktan sonra müşteri passkey doğrulama ekranı görür → onay verir → redirectUri'ye yönlendirilir.

  • Metadata alanına istediğiniz dinamik verileri ekleyebilirsiniz (randevu tarihi, servis bilgisi, tutar vb.).

  • expireAt boş bırakılırsa sistem varsayılan süreyi kullanır.

  • Hata response'larındaki code alanı AppError enum'undaki uygulama-içi hata kodudur (Response.code); tüm hata gövdesi Response adlı bir alt obje içinde döner, en dışta ayrıca Success: false alanı bulunur.