Basic Payment
A complete example of creating and processing a payment.
- JavaScript
- Python
import { PaymentError, ValidationError, ZenPays } from '@zenxdigitalholdings/zenpays'
async function processPayment() {
const zenpays = new ZenPays({
apiKey: process.env.ZENPAYS_API_KEY!,
})
try {
// 1. Create a payment intent
const intent = await zenpays.payments.createPaymentIntent({
amount: 2999,
currency: 'INR',
paymentMethod: 'upi',
customerEmail: 'john@example.com',
customerFirstName: 'John',
customerLastName: 'Doe',
customerCountry: 'IN',
description: 'Pro Plan - Monthly',
})
console.log('Payment Intent created:', intent.intentId)
// 2. Confirm with payment details
const result = await zenpays.payments.confirmPayment(intent.intentId, {
customerDetails: {
name: 'John Doe',
email: 'john@example.com',
address: { country: 'US' },
},
paymentMethodDetails: {
type: 'upi',
vpa: 'john@upi',
},
})
// 3. Handle the result
switch (result.status) {
case 'succeeded':
console.log('Payment successful!')
console.log('Transaction ID:', result.externalTransactionId)
return { success: true, transactionId: result.externalTransactionId }
case 'processing':
console.log('Payment is processing...')
return { success: false, status: 'processing' }
case 'failed':
console.log('Payment failed:', result.message)
return { success: false, error: result.message }
default:
// Handle next actions (3D Secure, etc.)
if (result.nextAction) {
return handleNextAction(result.nextAction)
}
}
}
catch (error) {
if (error instanceof ValidationError) {
console.error('Validation error:', error.message)
return { success: false, error: 'Invalid payment details' }
}
if (error instanceof PaymentError) {
console.error('Payment error:', error.message)
return { success: false, error: 'Payment declined' }
}
throw error
}
}
function handleNextAction(nextAction: any) {
if (nextAction.type === 'redirect') {
console.log('Redirect required:', nextAction.redirectUrl)
return { success: false, redirect: nextAction.redirectUrl }
}
if (nextAction.type === 'three_ds') {
console.log('3D Secure required')
return { success: false, threeDsUrl: nextAction.threeDsUrl }
}
return { success: false, error: 'Unknown action required' }
}
// Run the example
processPayment()
.then(result => console.log('Result:', result))
.catch(console.error)
import os
from zenpays import ZenPays
from zenpays.errors import PaymentError, ValidationError
def process_payment():
zenpays = ZenPays(api_key=os.environ["ZENPAYS_API_KEY"])
try:
# 1. Create a payment intent
intent = zenpays.payments.create_payment_intent({
"amount": 2999,
"currency": "INR",
"paymentMethod": "upi",
"customerEmail": "john@example.com",
"customerFirstName": "John",
"customerLastName": "Doe",
"customerCountry": "IN",
"description": "Pro Plan - Monthly",
})
print(f"Payment Intent created: {intent['intent_id']}")
# 2. Confirm with payment details
result = zenpays.payments.confirm_payment(intent["intent_id"], {
"customer_details": {
"name": "John Doe",
"email": "john@example.com",
"address": {"country": "US"},
},
"payment_method_details": {
"type": "upi",
"vpa": "john@upi",
},
})
# 3. Handle the result
status = result["status"]
if status == "succeeded":
print("Payment successful!")
print(f"Transaction ID: {result['external_transaction_id']}")
return {"success": True, "transaction_id": result["external_transaction_id"]}
elif status == "processing":
print("Payment is processing...")
return {"success": False, "status": "processing"}
elif status == "failed":
print(f"Payment failed: {result['message']}")
return {"success": False, "error": result["message"]}
else:
# Handle next actions (3D Secure, etc.)
if "next_action" in result:
return handle_next_action(result["next_action"])
except ValidationError as e:
print(f"Validation error: {e}")
return {"success": False, "error": "Invalid payment details"}
except PaymentError as e:
print(f"Payment error: {e}")
return {"success": False, "error": "Payment declined"}
def handle_next_action(next_action):
if next_action["type"] == "redirect":
print(f"Redirect required: {next_action['redirect_url']}")
return {"success": False, "redirect": next_action["redirect_url"]}
if next_action["type"] == "three_ds":
print("3D Secure required")
return {"success": False, "three_ds_url": next_action["three_ds_url"]}
return {"success": False, "error": "Unknown action required"}
# Run the example
if __name__ == "__main__":
result = process_payment()
print(f"Result: {result}")