POS cihazı ve mağaza sistemi nasıl bağlanır
IBRESE merkezi bir ödeme şirketi değildir. Kasa veya e-ticaret, kendi
merchant-pos servisinizi çalıştırır; müşteri IBRESE Cüzdan ile öder;
durum kendi düğümünüzün (veya güvendiğiniz public node’un)
GET /payments/:id yanıtından türetilir. Bu sayfa ve yanındaki dosyalar
bağlanmak için yeterlidir.
ibrese.com /v1/pos barındırmaz.
Cihaz kaydı ve fatura, sizin makinenizdeki servise gider
(http://127.0.0.1:8101 veya iç ağ). Public RPC yalnız gözlemdir:
https://rpc.ibrese.com. consensusAuthority ve
finalityAuthority her zaman false.
Kim ne bağlar
| Senaryo | Ne yapılır |
|---|---|
| Fiziksel kasa / Android-Windows POS yazılımı |
Mağazada merchant-pos çalışır. Cihaz
POST /v1/pos/devices ile kaydolur, her satışta fatura açar, QR gösterir.
İsterseniz hazır kasa teması: GET /.
|
| E-ticaret, ERP, WooCommerce, özel checkout |
Shop backend bir “cihaz” gibi kaydolur. Webhook URL sipariş sisteminize aittir.
Ödeme sayfasında fatura + QR. payment.finalized gelince siparişi
kendi node doğrulamanızdan sonra ödendi işaretlersiniz.
|
| Doğrudan Payment Protocol (POS servisi yok) |
Kendi kodunuz canonical PaymentRequest + cryptoproject://pay üretir.
Durumu GET https://rpc.ibrese.com/payments/{paymentId} ile okursunuz.
Webhook zorunlu değildir.
|
Mimari
POS cihazı veya shop checkout
│ POST /v1/pos/invoices (sizin merchant-pos)
▼
canonical PaymentRequest + QR + URI
│ müşteri IBRESE Wallet tarar / açar
▼
imzalı transfer → ibrese-l1 (data = PAYMENT_BIND)
│
▼
sizin merchant-pos GET {node}/payments/:id (gözlem)
│ HMAC POST
▼
sizin webhook URL (kasa “ödendi” / sipariş paid)
│ yeniden doğrulayın
▼
GET https://rpc.ibrese.com/payments/:id veya kendi node’unuz
Ağ: networkId=ibrese, chainId=ibrese-l1, varlık
NATIVE (IBR). URI şeması: cryptoproject://pay?…
Tutar
Zincir 5 ondalık kullanır. 1 IBR = 100000 alt birim. API
amount alanı ondalık string alt birimdir, fiat değildir.
| Vitrin | Kuruş (2 ondalık) | API amount |
|---|---|---|
| 0,01 IBR | 1 | "1000" |
| 1,00 IBR | 100 | "100000" |
| 12,50 IBR | 1250 | "1250000" |
merchantReference sipariş numarasıdır; consensus alanı değildir. Her fatura için benzersiz tutun.
1. merchant-pos’u çalıştırın
POS_MERCHANT_ADDRESS=<64-hex-alıcı-adres> \ POS_NODE_URL=https://rpc.ibrese.com \ POS_NETWORK_ID=ibrese \ POS_CHAIN_ID=ibrese-l1 \ POS_HOST=127.0.0.1 \ POS_PORT=8101 \ npm run pos
POS_MERCHANT_ADDRESS IBR’nin yatacağı hesap. Cihaz kaydında
recipient ile kasa bazında değiştirebilirsiniz. Üretim webhook’ları için
POS_REQUIRE_HTTPS=1. Kasa arayüzü: http://127.0.0.1:8101/
2. POS cihazını bağlayın
- Cihazın ulaşabileceği bir webhook URL’si hazırlayın (aşağıdaki örnek dosyalar).
-
POST /v1/pos/devices— yanıttaapiKeyvewebhookSecretbir kez gelir. Kasada ve sunucuda saklayın. POST /v1/pos/webhooks/testilepos.pingdoğrulayın.-
Satışta
POST /v1/pos/invoices+ Bearer apiKey. YanıttakiqrPng(data URL) veyaurimüşteriye gösterilir. -
Cihaz
GET /v1/pos/invoices/:paymentIdpoll eder veya webhook bekler. Satışı yalnızinvoicePaid: trueiken kapatın.
curl -s -X POST http://127.0.0.1:8101/v1/pos/devices \
-H 'content-type: application/json' \
-d '{"name":"Kasa-1","webhookUrl":"https://magaza.example/ibrese/webhook"}'
Hazır kasa ekranı için tarayıcıyı http://127.0.0.1:8101/ açın — tuş takımı,
QR, ödendi. Üçüncü parti POS yazılımı aynı REST’i çağırır; IBRESE’ye doğrudan bağlanmaz.
3. Shop sistemini bağlayın
- Checkout backend’i bir cihaz olarak kaydedin; webhook = sipariş endpoint’iniz.
- Müşteri ödeye tıklayınca fatura açın;
merchantReference=ORDER-{id}. - Sayfada QR (
qrPng) ve “cüzdanla aç” (uri) gösterin. -
Webhook
payment.finalized+invoicePaid true→X-IBRESE-Webhook-Idile idempotent olun →GET https://rpc.ibrese.com/payments/{paymentId}(veya kendi node)FINALIZEDveMATCH/OVERPAYMENTise siparişi paid yapın.
WooCommerce iskeleti: woocommerce-ibrese.php.example. Checkout script: shop-checkout.mjs.
HTTP API
Açık API: openapi.json · keşif: discovery.json
| Yöntem | Yol | Auth | Açıklama |
|---|---|---|---|
| GET | / |
— | Kasa HTML |
| GET | /v1/info |
— | role: merchant-pos |
| POST | /v1/pos/devices |
— | Cihaz; apiKey + webhookSecret bir kez |
| POST | /v1/pos/invoices |
Bearer | Fatura, uri, qr, qrPng |
| GET | /v1/pos/invoices/:paymentId |
Bearer | Durum; node yenilenir; otorite değil |
| GET | /v1/pos/invoices |
Bearer | Bu cihazın faturaları |
| POST | /v1/pos/webhooks/test |
Bearer | pos.ping |
| POST | /v1/pos/poll |
Bearer | Toplu yenileme |
| GET | https://rpc.ibrese.com/payments/:id |
— | Public node gözlemi |
Fatura yanıtı (özet): paymentId, amount, recipient,
uri, qr, qrPng, paid,
lastVerification, authoritative: false.
Webhook
JSON POST. Ham gövdeyi byte-byte kullanın (JSON’u yeniden stringify etmeyin).
X-IBRESE-Webhook-Signature: t=<unix-ms>,v1=<hmac-sha256-hex> X-IBRESE-Webhook-Event: payment.finalized X-IBRESE-Webhook-Id: <event-id>
HMAC-SHA256(webhookSecret, "<t>.<raw-body>").
|now − t| > 5 dakika ise reddedin. 2xx dönün. 4xx (429 hariç) yeniden denenmez;
5xx / ağ 5 denemeye kadar (50ms · 2^(n−1)) tekrarlanır.
Olaylar: pos.ping · payment.updated ·
payment.finalized · payment.expired.
Gövde her zaman authoritative: false,
source: "merchant-pos-observer" taşır. Satışı
payment.finalized ve invoicePaid: true olmadan kapatmayın.
Settlement politikası
| Gözlem | invoicePaid | policy |
|---|---|---|
| Mempool / blok QC’siz | false | UNFINALIZED |
| FINALIZED, tutar eksik | false | UNDERPAYMENT |
| FINALIZED, tutar eşit | true | PAID |
| FINALIZED, fazla | true | OVERPAYMENT |
| Aynı paymentId’ye birden fazla finalized tx | true | MULTIPLE |
Durum kodları: REQUESTED, PENDING, INCLUDED, FINALIZED, FAILED, EXPIRED, UNKNOWN.
Güvenlik
- Webhook’a körü körüne güvenmeyin; node
GET /payments/:idile doğrulayın. - apiKey / webhookSecret’i URL’ye, QR’a, log’a yazmayın.
- webhookUrl kullanıcı/şifre içeremez. Üretimde HTTPS.
- POS finality ilan etmez. Gateway otorite değildir.
- Bu sitede kurtarma kelimesi / özel anahtar girmeyin.
Dosyalar
Hepsi statik; PHP örnekleri .example uzantılıdır (sunucuda çalışmaz).
Toplu indirme:
ibrese-pos-connect.zip
- discovery.jsonmakine okur keşif
- openapi.jsonHTTP şema
- examples/curl.shkayıt + fatura
- examples/hmac-verify.mjsHMAC
- examples/webhook-node.mjsNode alıcı
- examples/webhook-python.pyPython alıcı
- examples/webhook-php.examplePHP alıcı
- examples/shop-checkout.mjse-ticaret checkout
- examples/pos-device.mjskasa yazılımı
- examples/woocommerce-ibrese.php.example WooCommerce iskeleti
- MERCHANT_PROTOCOL.mdmerchant yüzeyi
- PAYMENT_PROTOCOL.mdödeme protokolü
Özet sayfa: /pos.html · soru: info@ibrese.com
