The SDK is framework-agnostic. In every example, sessionId and token come from your backend's call to POST /v3/public/cashier/session, and baseUrl is the checkout domain Omno assigned to you (default https://checkout.omno.com).
ℹ️ SSR note. The SDK runs client-side only. In Next.js, Nuxt or SvelteKit, create and use
CashierSDKinside client-side lifecycle code, never during server rendering.
<button id="pay">Deposit</button>
<script type="module">
import CashierSDK, { CashierEmitEvent } from "@omno-payment/checkout-js";
const cashier = new CashierSDK({ baseUrl: "https://checkout.omno.com" });
cashier.on(CashierEmitEvent.PAYMENT_SUCCESS, (d) => console.log(d));
document.getElementById("pay").addEventListener("click", async () => {
const { sessionId, token } = await fetch("/api/cashier-session").then((r) => r.json());
cashier.open({ sessionId, token });
});
</script>import { useEffect, useRef } from "react";
import CashierSDK, { CashierEmitEvent } from "@omno-payment/checkout-js";
export function DepositButton() {
const cashier = useRef<CashierSDK>();
useEffect(() => {
cashier.current = new CashierSDK({ baseUrl: "https://checkout.omno.com" });
cashier.current.on(CashierEmitEvent.PAYMENT_SUCCESS, (d) => console.log(d));
return () => cashier.current?.destroy();
}, []);
async function open() {
const { sessionId, token } = await fetch("/api/cashier-session").then((r) => r.json());
cashier.current?.open({ sessionId, token });
}
return <button onClick={open}>Deposit</button>;
}<script setup lang="ts">
import { onMounted, onBeforeUnmount } from "vue";
import CashierSDK, { CashierEmitEvent } from "@omno-payment/checkout-js";
let cashier: CashierSDK;
onMounted(() => {
cashier = new CashierSDK({ baseUrl: "https://checkout.omno.com" });
cashier.on(CashierEmitEvent.PAYMENT_SUCCESS, (d) => console.log(d));
});
onBeforeUnmount(() => cashier?.destroy());
async function open() {
const { sessionId, token } = await fetch("/api/cashier-session").then((r) => r.json());
cashier.open({ sessionId, token });
}
</script>
<template>
<button @click="open">Deposit</button>
</template>import { Component, OnDestroy, OnInit } from "@angular/core";
import CashierSDK, { CashierEmitEvent } from "@omno-payment/checkout-js";
@Component({ selector: "app-deposit", template: `<button (click)="open()">Deposit</button>` })
export class DepositComponent implements OnInit, OnDestroy {
private cashier!: CashierSDK;
ngOnInit() {
this.cashier = new CashierSDK({ baseUrl: "https://checkout.omno.com" });
this.cashier.on(CashierEmitEvent.PAYMENT_SUCCESS, (d) => console.log(d));
}
ngOnDestroy() { this.cashier?.destroy(); }
async open() {
const { sessionId, token } = await fetch("/api/cashier-session").then((r) => r.json());
this.cashier.open({ sessionId, token });
}
}<script lang="ts">
import { onMount, onDestroy } from "svelte";
import CashierSDK, { CashierEmitEvent } from "@omno-payment/checkout-js";
let cashier: CashierSDK;
onMount(() => {
cashier = new CashierSDK({ baseUrl: "https://checkout.omno.com" });
cashier.on(CashierEmitEvent.PAYMENT_SUCCESS, (d) => console.log(d));
});
onDestroy(() => cashier?.destroy());
async function open() {
const { sessionId, token } = await fetch("/api/cashier-session").then((r) => r.json());
cashier.open({ sessionId, token });
}
</script>
<button on:click={open}>Deposit</button>