2
Transactions
viva.transactions
Vente, capture de pré-autorisation, remboursements, rebate et actions sur le terminal. Les champs
optionnels partagés sont définis par TransactionCommonParams. Montants
toujours en centimes.
interface TransactionCommonParams {
merchantReference?: string; // défaut: valeur "SDK-..." générée
currencyCode?: string; // défaut: "978" (EUR)
customerTrns?: string;
showTransactionResult?: boolean;
showReceipt?: boolean;
sessionId?: string; // auto-généré (UUID v4) si omis
extra?: Record<string, unknown>; // champs API additionnels fusionnés tels quels
}
Body vide sur succès. La plupart des endpoints /ecr/v1/transactions:* répondent HTTP 200 sans body — c'est le succès du dispatch vers le terminal, pas le résultat du paiement. Chaque méthode retourne un TransactionResult : pollez sessionId pour le résultat réel.
— Empty body on success: poll the session for the actual payment outcome.
sale(params: SaleParams): Promise<TransactionResult>
Initier une vente — POST /ecr/v1/transactions:sale.
| Paramètre |
Type |
Défaut |
Description |
terminalId | string | number | requis | ID du terminal cible (ex : "16000010") |
amount | number | requis | Montant à autoriser, en centimes |
cashRegisterId | string | requis | Identification de la caisse (défini par le marchand) |
tipAmount | number | 0 | Pourboire en centimes (incompatible avec preauth) |
preauth | boolean | — | Flag de pré-autorisation (nécessite activation Viva) |
paymentMethod | string | — | Méthode de paiement affichée (ex : "CardPresent") |
skipSurcharge | boolean | — | Désactiver la surcharge pour cette transaction |
merchantReference | string | "SDK-{sessionId}" | Référence marchand (texte libre) |
currencyCode | string | "978" | Code ISO 4217 numérique en string |
customerTrns | string | — | Référence client (texte libre) |
showTransactionResult | boolean | — | Afficher le résultat sur le terminal |
showReceipt | boolean | — | Afficher le reçu + résultat sur le terminal |
sessionId | string | auto (UUID) | UUID de session |
extra | object | {} | Champs API additionnels (ex : fiscalisationData) |
Retourne :
Promise<TransactionResult>
const sale = await viva.transactions.sale({
terminalId: "16000010",
amount: 2599, // 25,99 EUR
cashRegisterId: "CR-01",
customerTrns: "Table 12",
showReceipt: true,
});
const final = await viva.pollUntilComplete(sale.sessionId, { timeoutSeconds: 90 });
capturePreauth(params: CapturePreauthParams): Promise<TransactionResult>
Capturer une transaction pré-autorisée — POST /ecr/v1/transactions:preauth-completion.
Capture le montant retenu par la pré-autorisation identifiée par parentSessionId.
CapturePreauthParams ajoute parentSessionId, terminalId,
amount, cashRegisterId aux champs communs.
Retourne : Promise<TransactionResult>
// Pré-autoriser (nécessite preauth activé sur le compte Viva)
const preauth = await viva.transactions.sale({
terminalId: "16000010",
amount: 5000,
cashRegisterId: "CR-01",
preauth: true,
});
await viva.pollUntilComplete(preauth.sessionId);
// Plus tard, capturer le montant final (peut être inférieur à l'autorisé)
const capture = await viva.transactions.capturePreauth({
parentSessionId: preauth.sessionId,
terminalId: "16000010",
amount: 4200,
cashRegisterId: "CR-01",
});
await viva.pollUntilComplete(capture.sessionId);
refund(params: RefundParams): Promise<TransactionResult>
Rembourser une vente, en référençant la session originale — POST /ecr/v1/transactions:refund.
Un nouveau sessionId est généré pour le remboursement ; parentSessionId
référence la vente originale. RefundParams ajoute parentSessionId,
terminalId, amount, cashRegisterId aux champs communs.
Retourne : Promise<TransactionResult>
const refund = await viva.transactions.refund({
parentSessionId: sale.sessionId,
terminalId: "16000010",
amount: 1170,
cashRegisterId: "CR-01",
});
await viva.pollUntilComplete(refund.sessionId);
unreferencedRefund(params: StandaloneRefundParams): Promise<TransactionResult>
Remboursement autonome (non référencé), non lié à une vente originale —
POST /ecr/v1/transactions:unreferenced-refund. StandaloneRefundParams
ajoute terminalId, amount, cashRegisterId aux champs communs.
Retourne : Promise<TransactionResult>
const refund = await viva.transactions.unreferencedRefund({
terminalId: "16000010",
amount: 1500,
cashRegisterId: "CR-01",
});
await viva.pollUntilComplete(refund.sessionId);
fastRefund(params: StandaloneRefundParams): Promise<TransactionResult>
Remboursement rapide (swift) sur Visa / Mastercard / Maestro —
POST /ecr/v1/transactions:fast-refund. Mêmes paramètres
(StandaloneRefundParams) que unreferencedRefund().
Retourne : Promise<TransactionResult>
const refund = await viva.transactions.fastRefund({
terminalId: "16000010",
amount: 1170,
cashRegisterId: "CR-01",
});
await viva.pollUntilComplete(refund.sessionId);
rebate(params: StandaloneRefundParams): Promise<TransactionResult>
Rabais vers une carte Visa / Mastercard / Maestro — POST /ecr/v1/transactions:rebate.
Mêmes paramètres (StandaloneRefundParams) que unreferencedRefund().
Retourne : Promise<TransactionResult>
const rebate = await viva.transactions.rebate({
terminalId: "16000010",
amount: 500,
cashRegisterId: "CR-01",
});
await viva.pollUntilComplete(rebate.sessionId);
createAction(payload: CreateActionParams): Promise<JsonObject>
Créer une action à invoquer sur un terminal (ex : aade-fim-control) —
POST /ecr/v1/actions. Le payload est transmis tel quel (camelCase) et doit inclure
terminalId, cashRegisterId, actionType et request.
Retourne : Promise<JsonObject> (notamment actionId)
const action = await viva.transactions.createAction({
terminalId: "16000010",
cashRegisterId: "XDE384678UY",
actionType: "aade-fim-control",
request: { token: "ECR0210U/RCFB77000041/CMAC_K:299BFD51...:CC5FFF" },
});
console.log(action.actionId); // f7287549-e93a-4d33-b936-000027d326d0
getAction(actionId: string): Promise<JsonObject>
Récupérer le résultat d'une action — GET /ecr/v1/actions/{actionId}. Retourne HTTP 202
(body vide → {}) tant que l'action est en cours, ou le résultat une fois terminée.
Retourne : Promise<JsonObject> (successfullyProcessed, response, …)
const result = await viva.transactions.getAction(
"f7287549-e93a-4d33-b936-000027d326d0",
);
if (result.successfullyProcessed === true) {
console.log(result.response); // { status: "success", message: "..." }
}
3
Sessions
viva.sessions
Récupération, listing, abort et polling des sessions. Une session représente le cycle de vie d'une
transaction sur un terminal. Après avoir initié une transaction, pollez la session par son id pour
observer son résultat (eventId, success, transactionId, …).
get(sessionId: string): Promise<Session>
Récupérer une session par son id — GET /ecr/v1/sessions/{sessionId}.
Retourne : Promise<Session> (success, eventId, transactionId, amount, …)
const session = await viva.sessions.get(sale.sessionId);
console.log(session.eventId); // 0 = succès
console.log(session.transactionId); // UUID de la transaction Viva
listByDate(params: ListSessionsParams): Promise<JsonObject>
Lister toutes les sessions d'une date — GET /ecr/v1/sessions?date=YYYY-MM-DD.
| Paramètre |
Type |
Défaut |
Description |
date | string | requis | Date au format YYYY-MM-DD |
aadeAutonomouslyOnly | boolean | — | Filtrer aux sessions AADE-autonomes uniquement (Grèce) |
Retourne : Promise<JsonObject>
const sessions = await viva.sessions.listByDate({ date: "2026-06-06" });
abort(sessionId: string, cashRegisterId: string): Promise<JsonObject>
Annuler une session active — DELETE /ecr/v1/sessions/{sessionId}?cashRegisterId=….
Seule la caisse ayant créé la transaction peut l'annuler.
Retourne : Promise<JsonObject>
await viva.sessions.abort(sale.sessionId, "CR-01");
pollUntilComplete(sessionId: string, options?: PollOptions): Promise<Session>
Poll une session jusqu'à un état terminal ou expiration du timeout. Continue tant que
eventId vaut IN_PROGRESS (1100), en dormant intervalMs entre
les tentatives. S'arrête aussi sur un eventId inconnu (fail-safe). Disponible sur la
ressource sessions et comme raccourci sur le client.
| Paramètre |
Type |
Défaut |
Description |
sessionId | string | requis | UUID de la session à poller |
options.timeoutSeconds | number | 120 | Temps d'attente total maximum (secondes) |
options.intervalMs | number | 3000 | Délai entre deux tentatives (millisecondes) |
Retourne : Promise<Session> — l'état final. En cas de timeout :
{ success: false, eventId: 1003, message: "SDK poll timeout" }.
import { ecrEventIdFrom, isSuccessfulEvent } from "@qrcommunication/viva-cloud-terminal-sdk";
const result = await viva.pollUntilComplete(sale.sessionId, { timeoutSeconds: 90 });
const event = ecrEventIdFrom(result.eventId);
if (event !== null && isSuccessfulEvent(event)) {
// Paiement confirmé
}