انتقل إلى المحتوى الرئيسي

الدفع مقابل طلب كمستخدم مسجّل

يسجّل دخول مستخدم، وينشئ طلبًا ويفتح جلسة دفع له. مع حساب دفع إلكتروني، أعد توجيه المستخدم إلى paymentUrl الخاص بالجلسة.

ما يفعله هذا المثال:

  • يسجّل دخول مستخدم مسجّل
  • يُنشئ طلبًا
  • يُنشئ جلسة دفع

المتطلبات المسبقة:

  • قيمتا PROJECT_URL وAPP_TOKEN صالحتان لـ OneEntry API.
  • مستخدم مسجل
  • مخزن طلبات مهيأ بالعلامة "orders"

ملاحظات:

  • تعالج الأمثلة الأخطاء بالحد الأدنى: فهي ترمي استثناءً عندما يُرجع الاستدعاء كائن خطأ.
  • افتراضيًا (isShell: true) يُعيد SDK كائن خطأ بدلًا من رمي استثناء، لذا تحقق من النتيجة، مثل 'statusCode' in result. مع isShell: false يرمي استثناءً، وتعالج الأخطاء باستخدام try/catch. راجع الأخطاء.

وثائق المنصة:

مرجع SDK:

جربها مباشرة​

شغّل هذا المثال في بيئة JS SDK التجريبية. اربط Project URL وApp Token عند الزيارة الأولى، ثم افتح:

السيناريو​

1. استورد defineOneEntry وعرّف PROJECT_URL وAPP_TOKEN​

import { defineOneEntry } from 'oneentry';
import type { IOrderData } from 'oneentry';

const PROJECT_URL = 'https://your-project.oneentry.cloud';
const APP_TOKEN = 'your-app-token';

2. أنشئ عميل API​

const { AuthProvider, Orders, Payments } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});

3. صادِق على المستخدم باستخدام AuthProvider.auth('email', authData)​

const authData = {
authData: [
{
marker: 'email_reg',
value: 'your-email',
},
{
marker: 'password_reg',
value: 'your-password',
},
],
};
const user = await AuthProvider.auth('email', authData);

if ('statusCode' in user) {
throw new Error(user.message);
}

console.log(user);
النتيجة:
{
"userIdentifier": "john@example.com",
"authProviderIdentifier": "email",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR...pZCI6MTYsImF1dGhQ",
"refreshToken": "1745494429101-...-2834edf8"
}

4. أنشئ طلبًا باستخدام Orders.createOrder()​

const body: IOrderData = {
formIdentifier: 'order',
paymentAccountIdentifier: 'cash',
formData: [
{
type: 'string',
marker: 'name',
value: 'John Smith',
},
],
products: [
{
productId: 15,
quantity: 1,
},
],
};
const orderData = await Orders.createOrder('orders', body);

if ('statusCode' in orderData) {
throw new Error(orderData.message);
}
النتيجة:
{
"id": 116,
"formIdentifier": "order",
"paymentAccountIdentifier": "cash",
"formData": [
{
"type": "string",
"marker": "name",
"value": "John Smith"
}
],
"products": [
{
"productId": 15,
"quantity": 1
}
],
"currency": "USD",
"totalSum": 400,
"bonusApplied": 0,
"totalDue": 400,
"discountConfig": {
"orderDiscounts": [],
"productDiscounts": [],
"coupon": null,
"settings": {
"allowStacking": false,
"maxDiscountValue": null,
"allowGiftStacking": false,
"maxBonusPaymentPercent": null,
"minBonusAmount": null,
"minOrderAmountForBonus": null,
"giftRefundPolicy": "KEEP_GIFT"
},
"additionalDiscountsMarkers": [],
"totalRaw": 400,
"totalSumWithDiscount": 400,
"excludedGiftProductIds": [],
"bonus": {
"availableBalance": 0,
"maxBonusDiscount": 0,
"minBonusAmount": null,
"minOrderAmountForBonus": null,
"bonusApplied": 0
},
"bonusApplied": 0,
"totalDue": 400
},
"statusIdentifier": "upcoming",
"statusLocalizeInfos": {
"title": "Upcoming"
},
"createdDate": "2026-06-06T11:38:21.644Z"
}

5. أنشئ جلسة دفع باستخدام Payments.createSession()​

const sessionData = await Payments.createSession(orderData.id, 'session');

if ('statusCode' in sessionData) {
throw new Error(sessionData.message);
}

النتيجة:
{
"id": 65,
"createdDate": "2026-06-06T11:38:22.125Z",
"updatedDate": "2026-06-06T11:38:22.125Z",
"type": "session",
"status": "waiting",
"paymentAccountId": 1,
"orderId": 116,
"amount": null,
"paymentUrl": null
}

6. احصل على جلسة الدفع بمعرّف الطلب باستخدام Payments.getSessionByOrderId()​

const sessionByOrderId = await Payments.getSessionByOrderId(orderData.id);

if ('statusCode' in sessionByOrderId) {
throw new Error(sessionByOrderId.message);
}

console.log({ user, sessionData, sessionByOrderId });
النتيجة:
[
{
"id": 65,
"createdDate": "2026-06-06T11:38:22.125Z",
"updatedDate": "2026-06-06T11:38:22.125Z",
"type": "session",
"status": "waiting",
"paymentAccountId": 1,
"orderId": 116,
"amount": null,
"paymentUrl": null
}
]

المثال النهائي​

// 1. Import defineOneEntry and define PROJECT_URL and APP_TOKEN
import { defineOneEntry } from 'oneentry';
import type { IOrderData } from 'oneentry';

const PROJECT_URL = 'https://your-project.oneentry.cloud';
const APP_TOKEN = 'your-app-token';

// 2. Create an API client
const { AuthProvider, Orders, Payments } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});

// 3. Sign in
const authData = {
authData: [
{
marker: 'email_reg',
value: 'your-email',
},
{
marker: 'password_reg',
value: 'your-password',
},
],
};
const user = await AuthProvider.auth('email', authData);

if ('statusCode' in user) {
throw new Error(user.message);
}

console.log(user);

// 4. Create an order
const body: IOrderData = {
formIdentifier: 'order',
paymentAccountIdentifier: 'cash',
formData: [
{
type: 'string',
marker: 'name',
value: 'John Smith',
},
],
products: [
{
productId: 15,
quantity: 1,
},
],
};
const orderData = await Orders.createOrder('orders', body);

if ('statusCode' in orderData) {
throw new Error(orderData.message);
}

// 5. Create a payment session
const sessionData = await Payments.createSession(orderData.id, 'session');

if ('statusCode' in sessionData) {
throw new Error(sessionData.message);
}

// 6. Get the payment session by order ID
const sessionByOrderId = await Payments.getSessionByOrderId(orderData.id);

if ('statusCode' in sessionByOrderId) {
throw new Error(sessionByOrderId.message);
}

console.log({ user, sessionData, sessionByOrderId });