POSLink Enterprise API

Gateway unificat pentru terminale POS bancare, dispozitive fiscale (MCR) și plăți QR. Routing automat MQTT-first cu fallback RabbitMQ.

BASE: poslink.eservicii.md/POSLink SCHEMA: REST · OAS 3.0 FORMAT: JSON AUTH: APIKey (UUID) VERSION: v1 SWAGGER UI LIVE ↗

Autentificare

Toate cererile necesită câmpul APIKey de tip UUID/Guid. Pentru endpoint-urile GET, APIKey se trimite ca query parameter. Pentru POST, în corpul JSON al cererii. Cheia se obține din Cabinet POSLink.

EXEMPLU GET
GET /POSLink/Device/Device/Status?APIKey=7f3a2b1c-9d4e-4f5a-8b1c-3d4e5f6a7b8c&DeviceID=POS-001
EXEMPLU POST BODY
{
 "APIKey": "7f3a2b1c-9d4e-4f5a-8b1c-3d4e5f6a7b8c",
 "DeviceID": "7f3a2b1c-9d4e-4f5a-8b1c-3d4e5f6a7b8c",
 "amount": 150.00
}

Răspunsul standard include întotdeauna errorCode (0 = success), errorMessage și, după caz, report (răspunsul brut de la dispozitiv).

Terminal · stare hardware

Verifică starea fizică a terminalului POS Android: dacă e online (prin MQTT/RabbitMQ), nivel baterie, hârtie disponibilă, conexiune la rețea, banca asociată. Util înainte de inițierea unei tranzacții.

GET/POSLink/Device/Device/StatusStatus fizic terminal

Returnează parametrii hardware curenți. Routing automat: MQTT prioritar dacă device-ul e online, fallback RabbitMQ. Timeout 20 secunde.

QUERY PARAMETERS
ParametruTipReq.Descriere
APIKeyuuidreqCheia API (Guid)
DeviceIDstringreqIdentificator unic al terminalului
RESPONSE 200
JSON
{
 "errorCode": 0,
 "errorMessage": "",
 "report": "{\"online\":true,\"battery\":87,\"paper\":\"OK\",\"bank\":\"MAIB\",\"signal\":4}"
}

POS Mode · plăți cu cardul

Operațiuni directe pe terminalul bancar: plată cu cardul, anulare, refund, închidere zi. Routing dual MQTT/RabbitMQ — terminalul răspunde sub 5 minute pentru plăți (timpul în care clientul introduce PIN-ul) sau sub 1 minut pentru operațiuni administrative.

POST/POSLink/Device/payment/PayPlată directă cu cardul

Activează terminalul cu suma exactă. Operatorul nu mai introduce nimic. Suport MAIB, Victoriabank, OTP, MICB. Timeout extins la 5 min (clientul are nevoie de timp pentru PIN/contactless).

REQUEST BODY (PaymentPay)
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIDuuidreqID terminal POS
amountdecimalreqSuma în MDL (ex: 150.00)
documentNruuidoptNumărul documentului intern (Guid)
REQUEST
{
 "APIKey": "7f3a2b1c-9d4e-4f5a-8b1c-3d4e5f6a7b8c",
 "DeviceID": "a8b9c0d1-e2f3-4a5b-9c0d-1e2f3a4b5c6d",
 "amount": 354.50,
 "documentNr": "INV-2024-00841"
}
RESPONSE 200
JSON
{
 "errorCode": 0,
 "errorMessage": "",
 "report": "{\"rrn\":\"428541236789\",\"authCode\":\"123456\",\"operationId\":\"...\",\"amount\":354.50}"
}
GET/POSLink/Device/payment/LastTransactionUltima tranzacție

Returnează detaliile ultimei tranzacții procesate de terminal. Util pentru reconcilieri și verificări post-plată. Timeout 30 secunde.

QUERY PARAMETERS
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIduuidreqID terminal POS
POST/POSLink/Device/payment/CloseDocÎnchide document tranzacție

Obligatoriu după fiecare plată cu success — eliberează memoria terminalului și permite o tranzacție nouă. Timeout 60 secunde.

REQUEST BODY (PaymentCloseDoc)
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIDuuidreqID terminal POS
documentNrstringreqNumărul documentului tranzacției
operationIdstringreqID operațiune (returnat de Pay)
POST/POSLink/Device/payment/closeDayÎnchidere zi bancară (Settlement)

Trimite Settlement către bancă — finalizează ziua bancară și transmite toate tranzacțiile autorizate. Echivalent cu „Z bancar". Timeout 60 secunde.

REQUEST BODY
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIDuuidreqID terminal POS
POST/POSLink/Device/payment/RefundRambursare (Refund)

Retur parțial sau total al unei tranzacții autorizate (ziua e încă deschisă). După închiderea zilei (closeDay) folosiți CancelTransaction. Timeout 60 secunde.

REQUEST BODY (PaymentRefund)
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIDuuidreqID terminal POS
documentNrstringreqNumărul documentului original
operationIdstringreqID operațiune originală
rrnstringreqReference Retrieval Number
amountdecimalreqSuma de returnat (≤ original)
currencystringoptCod valută (default „MDL")
POST/POSLink/Device/payment/CancelTransactionAnulare tranzacție (Void)

Anulează (void) o tranzacție autorizată dar nedecontată. Diferit de Refund — anularea se face în ziua tranzacției, nu blochează fonduri. Timeout 60 secunde.

REQUEST BODY (PaymentCancelTransaction)
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIDuuidreqID terminal POS
documentNrstringreqNumărul documentului
operationIdstringreqID operațiune
tokenstringreqToken autorizare bancă
amountdecimalreqSuma tranzacției originale

QR Mode · facturi digitale

Flux complet pentru generarea QR-urilor de plată din facturi ERP. POSLink stochează receipt-ul, generează QR Base64, primește scanarea, marchează plata și trimite callback la ERP. Status-uri tranzacție: NewItem → Scanned → Payed sau Expired/Cancelled.

POST/POSLink/Invoice/CreateGenerează factură + QR

Salvează receipt-ul în Cloud, generează un OID unic și un QR Base64 codificat. QR-ul rămâne valabil până la ValidTo sau prima plată reușită.

REQUEST BODY (InvoiceData)
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIDuuidoptID terminal preferat (opțional)
CallbackURIstringoptURL pentru notificări (vezi Callbacks)
ValidTodatetimeoptTermen valabilitate QR (default: nelimitat)
PointOfSalesCodestringoptCod punct de vânzare
ReceiptobjectreqConținutul facturii (vezi schema Receipt)
REQUEST
{
 "APIKey": "7f3a2b1c-9d4e-4f5a-8b1c-3d4e5f6a7b8c",
 "CallbackURI": "https://erp.firma.md/qp?Oid=#OID#&State=#State#",
 "ValidTo": "2025-05-01T18:00:00Z",
 "PointOfSalesCode": "POS-CENTRU-01",
 "Receipt": {
 "Number": "INV-2024-00841",
 "Uid": "a3f9...",
 "Items": [
 { "Name": "Produs A", "Quantity": 2, "Price": 89.75 }
 ]
 }
}
RESPONSE 200
JSON
{
 "errorCode": 0,
 "errorMessage": "",
 "QR": "eyJRUlR5cGUiOjEsIlFSIjoiYTNmOS4uLi..."
}
GET/POSLink/Invoice/StatusVerifică status QR (polling)

Verifică starea curentă a unui QR fără să-l marcheze ca „Scanned". Util pentru polling din ERP. Marchează automat ca Expired dacă termenul ValidTo a trecut.

QUERY PARAMETERS
ParametruTipReq.Descriere
QRstringreqCodul QR Base64 (returnat la Create)
RESPONSE 200
JSON
{
 "errorCode": 0,
 "Status": 1, // 0=NewItem, 1=Scanned, 2=Payed, 3=Expired, 4=Cancelled
 "ReceiptID": ""
}
GET/POSLink/Invoice/GetPreluare detalii (la scanare)

Returnează receipt-ul complet (lista de produse) pentru afișare pe MCR sau POS Android. Marchează automat tranzacția ca Scanned și declanșează callback-ul de scanare către ERP.

QUERY PARAMETERS
ParametruTipReq.Descriere
QRstringreqCodul QR Base64
GET/POSLink/Invoice/PaydMarchează factura ca achitată

Apelat de MCR sau POS după ce plata bancară a fost confirmată. Marchează tranzacția ca Payed și trimite callback-ul de finalizare către ERP cu ReceiptID-ul fiscal.

QUERY PARAMETERS
ParametruTipReq.Descriere
QRstringreqCodul QR Base64
ReceiptIDstringreqID bon fiscal (de la MCR)
DeviceIDstringreqID dispozitiv care a încasat

Fiscal Mode · MCR (mașină de casă)

Operațiuni fiscale pe MCR Intelectsoft: numerar (Money In/Out), rapoarte fiscale (Z/X) și tipărire bon fiscal după plată bancară confirmată. Toate operațiunile sunt înregistrate în memoria fiscală conform legislației din R. Moldova. Routing prin RabbitMQ RPC, timeout 20 secunde (sau extins automat la 5 min pentru plăți cu cardul).

POST/POSLink/Device/Money/InMoney In — depunere numerar

Înregistrează intrarea de numerar în casierie (deschidere zi, schimb tură). Înregistrat în memoria fiscală MCR. Timeout 20 secunde.

REQUEST BODY (MoneyDataToDevice)
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIDuuidreqID dispozitiv MCR
AmountdecimalreqSuma în MDL
ReasonstringoptMotiv (ex: „Deschidere zi")
CallbackURIstringoptURL notificare la finalizare
POST/POSLink/Device/Money/OutMoney Out — extragere numerar

Înregistrează ieșirea de numerar (depunere bancă, returnare client). Aceeași schemă ca Money/In. Timeout 20 secunde.

POST/POSLink/Device/Report/CreateRaport fiscal Z sau X

Generează raport fiscal pe MCR. Raportul Z (închidere zi) resetează contoarele zilnice. Raportul X (intermediar) afișează totalurile fără reset. Timeout 20 secunde.

REQUEST BODY (InvoiceDataToDevice)
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIDuuidreqID dispozitiv MCR
Fiscalbooleanreqtrue → Raport Z (închidere) · false → Raport X (intermediar)
CallbackURIstringoptURL notificare
POST/POSLink/Device/Invoice/PayTipărire bon fiscal

Tipărește bonul fiscal pe MCR — strict după confirmarea bancară pentru plățile cu cardul. Timeout adaptiv: 5 min dacă receipt-ul conține plată cu cardul (PaymentCode 1, 2, 7 sau 1000), 1 min altfel. Conformitate cu legislația fiscală RM.

REQUEST BODY (InvoiceData)
ParametruTipReq.Descriere
APIKeyuuidreqCheia API
DeviceIDuuidreqID dispozitiv MCR
CallbackURIstringoptURL notificare
ReceiptobjectreqReceipt complet cu Items + Payments

Callback-uri (webhooks)

POSLink trimite notificări către CallbackURI la fiecare schimbare de stare. URL-ul suportă placeholders pentru substituție automată — devine în webhook real cu valori concrete.

GETCallbackURIFormat URL & placeholders

Worker-ul POSLink execută GET către URL-ul configurat, cu placeholder-urile înlocuite. Retry automat la eșec (5 încercări la 1, 5, 30 minute, 1h, 6h).

PLACEHOLDERS
PlaceholderÎnlocuit cuDescriere
#OID#UUIDOID-ul intern al facturii
#State#enumStatus: NewItem / Scanned / Payed / Expired / Cancelled
#ReceiptID#stringDoar la State=Payed — ID bon fiscal
#DeviceID#stringDoar la State=Payed — terminal care a încasat
CALLBACK URI TEMPLATE
https://erp.firma.md/qp?Oid=#OID#&State=#State#&ReceiptID=#ReceiptID#&DeviceID=#DeviceID#
CALLBACK ACTUAL (la State=Payed)
https://erp.firma.md/qp?Oid=a3f9b2c8&State=Payed&ReceiptID=FR-00841&DeviceID=POS-MAIB-001

Coduri de eroare

Toate răspunsurile includ errorCode (integer) și errorMessage (text). Codul 0 înseamnă succes (NoError). Codurile non-zero sunt definite în enum-ul EnErrorCode.

errorCodeEnErrorCodeDescriere
0NoErrorOperațiune reușită
1Internal_errorEroare internă pe server
2Error_Connection_DatabaseBază de date offline
3Timeout_or_no_responseDispozitivul nu a răspuns în timpul alocat
10Invalid_API_KeyCheia API lipsă, expirată sau invalidă
11API_Key_Wrong_ProductCheia nu are acces la modulul POSLink
20Record_not_existQR / invoice / tranzacție inexistentă
21Invalid_QRFormat QR invalid sau corupt
22The_status_cannot_be_appliedTranziție de stare ilegală (ex: Payed → Scanned)
30Device_OfflineTerminalul nu e disponibil pe MQTT/RabbitMQ
31Device_BusyTerminalul procesează altă tranzacție