Checkout Flow
Create a checkout session for on-ramp payments.
- JavaScript
- Python
import { ZenPays } from '@zenxdigitalholdings/zenpays'
async function createCheckout() {
const zenpays = new ZenPays({
apiKey: process.env.ZENPAYS_API_KEY!,
})
// 1. Detect customer's location
const geo = await zenpays.checkout.detectGeo()
console.log('Detected country:', geo.country, 'Currency:', geo.currency)
// 2. Create checkout session
const session = await zenpays.checkout.createSession({
playerId: 'player_123',
amount: 100, // Amount in fiat currency
targetSettlementAsset: 'USDT',
successUrl: 'https://example.com/success',
cancelUrl: 'https://example.com/cancel',
})
console.log('Session created:', session.id)
// 3. Get available banks (if bank transfer)
const { banks } = await zenpays.checkout.getBanks(geo.currency)
console.log('Available banks:', banks.length)
// 4. Select optimal provider
const provider = await zenpays.checkout.selectProvider({
sessionId: session.id,
playerGeo: geo.country,
currency: geo.currency,
amount: 100,
paymentMethod: 'card',
targetSettlementAsset: 'USDT',
})
console.log('Selected provider:', provider.provider)
console.log('Widget URL:', provider.widgetUrl)
console.log('Embed mode:', provider.embedMode)
// 5. Redirect or embed widget
if (provider.embedMode === 'redirect') {
// Redirect to provider
window.location.href = provider.widgetUrl
}
else {
// Embed in iframe
const iframe = document.createElement('iframe')
iframe.src = provider.widgetUrl
iframe.style.width = '100%'
iframe.style.height = '600px'
document.body.appendChild(iframe)
}
// 6. Monitor order status
const checkStatus = async () => {
const order = await zenpays.checkout.getRampOrder(session.rampOrderId!)
switch (order.status) {
case 'pending':
console.log('Waiting for payment...')
break
case 'pending_funds':
console.log('Payment received, waiting for confirmation...')
break
case 'confirmed':
console.log('Payment confirmed!')
break
case 'matched':
console.log('Crypto matched!')
break
case 'cleared':
console.log('Order complete!')
return true
case 'failed':
console.log('Order failed')
return false
}
// Check again in 5 seconds
setTimeout(checkStatus, 5000)
}
checkStatus()
}
createCheckout()
import os
import time
from zenpays import ZenPays
def create_checkout():
zenpays = ZenPays(api_key=os.environ["ZENPAYS_API_KEY"])
# 1. Detect customer's location
geo = zenpays.checkout.detect_geo()
print(f"Detected country: {geo['country']}, Currency: {geo['currency']}")
# 2. Create checkout session
session = zenpays.checkout.create_session({
"player_id": "player_123",
"amount": 100, # Amount in fiat currency
"target_settlement_asset": "USDT",
"success_url": "https://example.com/success",
"cancel_url": "https://example.com/cancel",
})
print(f"Session created: {session['id']}")
# 3. Get available banks (if bank transfer)
result = zenpays.checkout.get_banks(geo["currency"])
banks = result["banks"]
print(f"Available banks: {len(banks)}")
# 4. Select optimal provider
provider = zenpays.checkout.select_provider({
"session_id": session["id"],
"player_geo": geo["country"],
"currency": geo["currency"],
"amount": 100,
"payment_method": "card",
"target_settlement_asset": "USDT",
})
print(f"Selected provider: {provider['provider']}")
print(f"Widget URL: {provider['widget_url']}")
print(f"Embed mode: {provider['embed_mode']}")
# 5. Redirect or embed widget
if provider["embed_mode"] == "redirect":
# Redirect to provider
print(f"Redirect to: {provider['widget_url']}")
# In a web app: redirect user to provider["widget_url"]
else:
# Embed in iframe
print("Embed widget in iframe")
# In a web app: create iframe with provider["widget_url"]
# 6. Monitor order status
def check_status():
order = zenpays.checkout.get_ramp_order(session["ramp_order_id"])
status = order["status"]
if status == "pending":
print("Waiting for payment...")
elif status == "pending_funds":
print("Payment received, waiting for confirmation...")
elif status == "confirmed":
print("Payment confirmed!")
elif status == "matched":
print("Crypto matched!")
elif status == "cleared":
print("Order complete!")
return True
elif status == "failed":
print("Order failed")
return False
# Check again in 5 seconds
time.sleep(5)
return check_status()
check_status()
if __name__ == "__main__":
create_checkout()