Mo.one

Mo.one · Demo Integrace

Ukázková pokladna s integrací plateb

Vyzkoušejte si platební flow Mo.one. Stejné API pokrývá Intent, LAN i Cloud.

Ověřování…

Produkty

Vlastní částka

0CZK

Košík

Košík je prázdný

Platba

0CZK

Mo.one Payment Integration Guide

Kompletní dokumentace pro integraci plateb

Tři metody integrace, jedno JSON schéma. Vyberte Intent (on-device), HTTP (LAN) nebo Cloud podle topologie vašeho POS.

1. Přehled

Mo.one nabízí 3 metody integrace pro příjem plateb: On-Device (Intent) pro Android aplikace běžící přímo na terminálu, LAN (HTTP) pro libovolný POS systém ve stejné síti a Cloud pro vzdálené řízení přes centrální server. Všechny tři používají stejné JSON schéma požadavku i odpovědi.

┌─────────────┐     Intent      ┌──────────────────┐
│  POS / App  │ ──────────────▶ │  Mo.one terminál │
│  (Android)  │     request     │     (PayApp)     │
└─────────────┘                 └──────────────────┘
       │                                 │
       │  HTTP (LAN)                     │  WebSocket
       │  POST :8088/execute-operation   │  (Cloud)
       ▼                                 ▼
┌─────────────┐                 ┌──────────────────┐
│  Libovolný  │                 │   Cloud server   │
│  POS systém │                 │   (centrální)    │
└─────────────┘                 └──────────────────┘

2. Proč je integrace snadná

Jednotné JSON API

Stejný formát pro všechny tři metody. Napište kód jednou, použijte kdekoliv.

Plug & Play

Stačí znát adresu terminálu a odeslat POST. Žádná složitá registrace.

Bez SDK

Standardní HTTP volání z libovolného jazyka. PHP, Python, JS, Java, C#.

3. Podporované typy požadavků

Payment

Platba

Nová platební transakce s volitelným spropitným a omezením metody.

{
  "type": "payment",
  "amount": "150.00",
  "currency": "CZK",
  "reference": "ORDER-12345",
  "orderId": "ORD-001",
  "invoiceId": "INV-0099",
  "clerkId": "CLERK-01",
  "tipAmount": "10.00",
  "paymentMethodConstraints": ["MOONE", "EFT"]
}
Refund

Refundace

Vrácení platby zákazníkovi. Vyžaduje částku a referenci.

{
  "type": "refund",
  "amount": "50.00",
  "currency": "CZK",
  "reference": "REF-12345"
}
LastResult

Poslední výsledek

Získání výsledku poslední operace. Užitečné při výpadku spojení.

{ "type": "lastresult" }
paymentMethodConstraints přijímá hodnoty MOONE a EFT (case-insensitive). Pokud je zadán právě jeden, platba startuje automaticky.

4. Struktura odpovědi (TransactionResult)

{
  "type": "payment_result",
  "result": {
    "status": "APPROVED",
    "method": "MOONE",
    "amount": "150.00",
    "approvedAmount": "150.00",
    "currency": "CZK",
    "reference": "ORDER-12345",
    "date": "2026-01-16T13:23:53.778Z",
    "customerMessage": "Transakce schválena",
    "eftResult": {
      "transactionId": "TXN-123456",
      "authorizationCode": "AUTH123",
      "cardBrand": "VISA",
      "truncatedPAN": "****1234"
    }
  }
}
APPROVEDREJECTEDCANCELED

Pole method může nabývat hodnot MOONE, XPAY, SWITCHIO. EFT detaily jsou v eftResult.

5. Metody integrace

A. HTTP integrace (LAN)

Pro POS systémy ve stejné lokální síti. Base URL: http://<device-ip>:8088. Komunikace probíhá přes REST.

  • GET/statusOvěření stavu terminálu
  • POST/execute-operation/{device_id}Synchronní operace (blokuje do dokončení)
  • POST/start-operation/{device_id}/{operationId}Asynchronní start operace
  • GET/operation-status/{device_id}/{operationId}Polling stavu asynchronní operace
  • POST/stop-operation/{device_id}/{operationId}Hint na zrušení (best-effort)
curl -X POST http://192.168.1.25:8088/execute-operation/LOCAL \
  -H "Content-Type: application/json" \
  -d '{
    "type": "payment",
    "amount": "150.00",
    "currency": "CZK",
    "reference": "ORDER-12345",
    "paymentMethodConstraints": ["MOONE"]
  }'
Na terminálu může současně běžet pouze jedna operace. Když je terminál zaneprázdněn, server vrací HTTP 409 Conflict.

B. On-Device integrace (Intent)

Pro Android aplikace běžící přímo na stejném zařízení jako Mo.one terminál.

// Kotlin · spuštění platby přes Intent
val intent = Intent().apply {
    setClassName("cz.moone.payapp", "cz.moone.payapp.ui.payment.PaymentActivity")
    putExtra("request", """
      { "type": "payment", "amount": "150.00", "currency": "CZK" }
    """.trimIndent())
}
paymentLauncher.launch(intent)
Pro Android 11+ deklarujte <queries><package android:name="cz.moone.payapp" /></queries> v AndroidManifest.xml.

C. Cloud integrace

Stejné API jako LAN, ale přes centrální cloud server. Použijte skutečné Device ID místo "LOCAL" a nahraďte lokální IP URL cloudu.

6. Příklad implementace

Tato stránka volá vlastní Next.js API route (/api/demo/payment), která signál přeposílá na terminál. V produkci stačí stejný kód směrovat přímo na /execute-operation.

async function processPayment(amount: number, currency: "CZK" | "EUR", method: "MOONE" | "EFT") {
  const res = await fetch("/api/demo/payment", {
    method: "POST",
    headers: { "content-type": "application/json" },
    body: JSON.stringify({
      type: "payment",
      amount: amount.toFixed(2),
      currency,
      reference: `ORDER-${Date.now()}`,
      paymentMethodConstraints: [method],
    }),
  });
  const data = await res.json();
  return data?.result?.status === "APPROVED";
}

7. Nastavení

Konfigurace cílového terminálu probíhá přes proměnné prostředí na serveru.

MOONE_DEMO_TERMINAL_URL

Base URL terminálu, např. http://192.168.1.25:8088 nebo URL cloud serveru.

MOONE_DEMO_DEVICE_ID

LOCAL pro LAN, skutečné Device ID pro Cloud.