JavaScript/TypeScript Browser SDK (Public Key)
Use Public Key in the browser to create and query orders without a backend. It automatically exchanges a short-lived token and manages refresh.
If you prefer a quick reference, check Public Key Guide.
Installation
npm install @ponponpay/sdkPublic Key Client
Public Key can only create and query orders. It does not support full order management or admin APIs.
Initialize Client
import { PonponPayClient } from '@ponponpay/sdk/browser';
const client = new PonponPayClient({
publicKey: 'pub_your_public_key',
// Optional: baseUrl: 'https://api.ponponpay.com'
});Create Order
const order = await client.createOrder({
currency: 'USDT',
network: 'tron',
amount: 100,
orderId: 'ORDER_123456', // optional
notifyUrl: 'https://your-site.com/webhook',
redirectUrl: 'https://your-site.com/success'
});
console.log(order.tradeId);
console.log(order.paymentUrl);Query Order Status
const status = await client.getOrderStatus(order.tradeId);
console.log(status.status); // 'pending' | 'paid' | 'expired' | 'cancelled'Browser Checkout UI
The Checkout SDK handles redirects, modal payment, and status polling.
Script Tag (host under your domain)
<script src="https://ponponpay.com/sdk/ponponpay.min.js"></script>
<script>
const checkout = new PonponPayCheckout();
checkout.redirect(paymentUrl);
</script>ES Modules
import { PonponPayCheckout } from '@ponponpay/sdk/browser';
const checkout = new PonponPayCheckout();Open Payment Modal
checkout.openModal(paymentUrl, {
width: '450px',
height: '650px',
onClose: () => {
console.log('Modal closed');
}
});Poll Payment Status
checkout.pollStatus('PP202412110001', {
interval: 3000,
timeout: 1800000
});
checkout.on('paid', (data) => {
console.log('Payment successful!', data);
});React Integration
// hooks/usePonponPay.ts
import { useEffect, useRef } from 'react';
import { PonponPayCheckout } from '@ponponpay/sdk/browser';
export function usePonponPay() {
const checkoutRef = useRef<PonponPayCheckout | null>(null);
useEffect(() => {
checkoutRef.current = new PonponPayCheckout();
return () => {
checkoutRef.current?.stopPolling();
};
}, []);
return checkoutRef.current;
}
// components/PayButton.tsx
function PayButton({ paymentUrl }: { paymentUrl: string }) {
const checkout = usePonponPay();
const handlePay = () => {
checkout?.openModal(paymentUrl);
};
return <button onClick={handlePay}>Pay Now</button>;
}