SDK حديث وآمن النوع لدمج إيصالات في تطبيقات Node.js الخاصة بك.
قم بتثبيت إيصالات TypeScript SDK باستخدام npm أو yarn. يتطلب SDK إصدار Node.js 14 أو أعلى.
npm install esaalatإليك مثال بسيط لتبدأ بإنشاء طلب:
import { Esaalat } from 'esaalat';
// Initialize the client
const client = new Esaalat({
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
baseUrl: 'https://api.esaalat.com' // api.sandbox.esaalat.com for sandbox
});
// List available subscriptions
const subscriptions = await client.getSubscriptions();
console.log(`Found ${subscriptions.length} subscription(s)`);
// Create an order
const orderId = await client.createOrder({
subscriptionId: subscriptions[0].id,
items: [
{
name: 'T-Shirt',
description: 'Premium cotton t-shirt',
price: 29.99,
quantity: 2
}
],
currency: 'USD'
});
console.log(`Order created: ${orderId}`);قم بتهيئة عميل إيصالات ببيانات اعتمادك. يتعامل SDK مع إدارة الرموز تلقائيًا.
import { Esaalat } from 'esaalat';
const client = new Esaalat({
clientId: 'your-client-id', // Your Esaalat client ID
clientSecret: 'your-client-secret', // Your client secret
baseUrl: 'https://api.esaalat.com', // API base URL (api.sandbox.esaalat.com for sandbox)
timeout: 30000 // Optional: request timeout in milliseconds
});💡 نصيحة: قم بتخزين بيانات اعتمادك في متغيرات البيئة للأمان:
import { Esaalat } from 'esaalat';
const client = new Esaalat({
clientId: process.env.ESAALAT_CLIENT_ID!,
clientSecret: process.env.ESAALAT_CLIENT_SECRET!,
baseUrl: process.env.ESAALAT_BASE_URL! // api.sandbox.esaalat.com for sandbox
});يوفر SDK تعريفات TypeScript كاملة لجميع كائنات الطلب والاستجابة:
import { Esaalat, CreateOrderParams, Order } from 'esaalat';
const client = new Esaalat({
clientId: process.env.ESAALAT_CLIENT_ID!,
clientSecret: process.env.ESAALAT_CLIENT_SECRET!,
baseUrl: process.env.ESAALAT_BASE_URL! // api.sandbox.esaalat.com for sandbox
});
// Full type safety
const orderParams: CreateOrderParams = {
subscriptionId: 'f7430a9b-76c6-4c52-91c7-0337d8ca9e9c',
items: [
{
name: 'T-Shirt',
description: 'Premium cotton',
price: 29.99,
quantity: 2
}
],
currency: 'USD'
};
const orderId: string = await client.createOrder(orderParams);
const order: Order = await client.getOrder(orderId);استرجع قائمة حسابات الاشتراك المتاحة لتلقي المدفوعات. ستحتاج إلى معرف اشتراك لإنشاء الطلبات.
// Get all subscriptions
const subscriptions = await client.getSubscriptions();
// Filter for active subscriptions that can receive payments
const activeSubs = subscriptions.filter(s => s.isActive && s.canReceive);
// Use the first active subscription
if (activeSubs.length > 0) {
const subscriptionId = activeSubs[0].id;
console.log(`Using: ${activeSubs[0].providerName} - ${activeSubs[0].username}`);
}يحتوي كل اشتراك على الحقول التالية التي يمكنك استخدامها:
interface Subscription {
id: string; // Unique subscription identifier (use this for orders)
username: string; // Account username
providerName: string; // Payment provider name
isActive: boolean; // Whether the subscription is active
canSend: boolean; // Whether it can send payments
canReceive: boolean; // Whether it can receive payments
notice: string; // Any notices or alerts
}أنشئ طلبات دفع جديدة. يمكنك تحديد عناصر متعددة والعملة.
// Create an order with multiple items
const orderId = await client.createOrder({
subscriptionId: 'f7430a9b-76c6-4c52-91c7-0337d8ca9e9c',
items: [
{
name: 'T-Shirt',
description: 'Premium cotton t-shirt',
price: 29.99,
quantity: 2
},
{
name: 'Mug',
description: 'Coffee mug',
price: 9.99,
quantity: 1
}
],
currency: 'USD' // "USD" or "YER"
});
console.log(`Order created: ${orderId}`);استرجع حالة وتفاصيل طلب موجود:
// Get order details
const order = await client.getOrder(orderId);
console.log(`Status: ${order.status}`);
console.log(`Total: ${order.total} ${order.currency}`);
console.log(`Client: ${order.client.name}`);
// List items
for (const item of order.items) {
console.log(` - ${item.name}: ${item.quantity} x ${item.price}`);
}يوفر SDK فئات خطأ محددة لأنواع مختلفة من الفشل:
import {
Esaalat,
ValidationError,
AuthenticationError,
OrderNotFoundError,
APIError
} from 'esaalat';
const client = new Esaalat({
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
baseUrl: 'https://api.esaalat.com' // api.sandbox.esaalat.com for sandbox
});
try {
const orderId = await client.createOrder({
subscriptionId: 'invalid-id',
items: [
{
name: 'Product',
description: 'Description',
price: -10.50, // Invalid: negative price
quantity: 1
}
],
currency: 'USD'
});
} catch (error) {
if (error instanceof ValidationError) {
console.error(`Validation error: ${error.message}`);
// Handle invalid input
} else if (error instanceof AuthenticationError) {
console.error(`Authentication failed: ${error.message}`);
// Handle auth issues
} else if (error instanceof OrderNotFoundError) {
console.error(`Order not found: ${error.message}`);
// Handle missing order
} else if (error instanceof APIError) {
console.error(`API error: ${error.message}`);
console.error(`Status code: ${error.statusCode}`);
// Handle API errors
} else {
console.error(`Unexpected error: ${error}`);
// Handle other errors
}
}خطأ في التحققيرمي ValidationError. تأكد من وجود جميع الحقول المطلوبة وصلاحيتها.
بيانات اعتماد غير صالحةيرمي AuthenticationError. تحقق من معرف العميل والسر الخاص بك.
الطلب غير موجوديرمي OrderNotFoundError. تحقق من صحة معرف الطلب.
تحقق من الأمثلة الكاملة في مستودع GitHub لمزيد من سيناريوهات الاستخدام المتقدمة.
import { Esaalat } from 'esaalat';
// Initialize client
const client = new Esaalat({
clientId: 'your-client-id',
clientSecret: 'your-client-secret',
baseUrl: 'https://api.esaalat.com' // api.sandbox.esaalat.com for sandbox
});
async function processCheckout() {
// 1. Get active subscriptions
const subscriptions = await client.getSubscriptions();
const activeSub = subscriptions.find(s => s.isActive && s.canReceive);
if (!activeSub) {
console.log('No active subscriptions available');
return;
}
console.log(`Using subscription: ${activeSub.providerName}`);
// 2. Create order with shopping cart items
const cartItems = [
{
name: 'Premium T-Shirt',
description: '100% cotton, size L',
price: 29.99,
quantity: 2
},
{
name: 'Coffee Mug',
description: 'Ceramic mug, 350ml',
price: 9.99,
quantity: 1
}
];
const orderId = await client.createOrder({
subscriptionId: activeSub.id,
items: cartItems,
currency: 'USD'
});
console.log(`Order created: ${orderId}`);
// 3. Check order status
const order = await client.getOrder(orderId);
if (order.status === 'COMPLETED') {
console.log('✓ Payment received!');
console.log(`Total: ${order.total} ${order.currency}`);
} else if (order.status === 'PENDING') {
console.log('⏳ Waiting for payment...');
} else {
console.log(`Status: ${order.status}`);
}
}
processCheckout();مثال على دمج SDK في واجهة برمجة تطبيقات Express.js:
import express from 'express';
import { Esaalat, ValidationError, APIError } from 'esaalat';
const app = express();
app.use(express.json());
const client = new Esaalat({
clientId: process.env.ESAALAT_CLIENT_ID!,
clientSecret: process.env.ESAALAT_CLIENT_SECRET!,
baseUrl: process.env.ESAALAT_BASE_URL! // api.sandbox.esaalat.com for sandbox
});
// Create order endpoint
app.post('/api/orders', async (req, res) => {
try {
const { items, currency } = req.body;
// Get active subscription
const subscriptions = await client.getSubscriptions();
const activeSub = subscriptions.find(s => s.isActive && s.canReceive);
if (!activeSub) {
return res.status(400).json({ error: 'No active subscriptions' });
}
// Create order
const orderId = await client.createOrder({
subscriptionId: activeSub.id,
items,
currency
});
res.json({ orderId });
} catch (error) {
if (error instanceof ValidationError) {
res.status(400).json({ error: error.message });
} else if (error instanceof APIError) {
res.status(error.statusCode || 500).json({ error: error.message });
} else {
res.status(500).json({ error: 'Internal server error' });
}
}
});
// Check order status endpoint
app.get('/api/orders/:orderId', async (req, res) => {
try {
const order = await client.getOrder(req.params.orderId);
res.json(order);
} catch (error) {
if (error instanceof OrderNotFoundError) {
res.status(404).json({ error: 'Order not found' });
} else {
res.status(500).json({ error: 'Internal server error' });
}
}
});
app.listen(3000, () => console.log('Server running on port 3000'));