Mua hàng hóa và dịch vụ mà không cần đăng ký người dùng
Trong ví dụ này, chúng tôi sẽ trình bày cách đặt hàng cho khách mà không yêu cầu đăng ký người dùng.
✅ Mục đích của kịch bản:
- Người dùng không được ủy quyền.
- Người dùng điền vào một mẫu với thông tin liên lạc (ví dụ, guest_orders).
- Chọn sản phẩm (bạn có thể thiết lập trước một danh sách).
- Đơn hàng được đặt cho người dùng guest_user.
✅ Những gì bạn cần:
- Một PROJECT_URL và APP_TOKEN hợp lệ để xác thực với API OneEntry.
- Thẻ của mẫu đơn hàng khách, ví dụ guest_orders
- danh sách productId và số lượng
📌 Quan trọng:
- Các trường trong mẫu (thẻ, loại) phải khớp với cài đặt mẫu trong bảng điều khiển quản trị.
- Nếu bạn cần gửi thông báo về một đơn hàng, bạn có thể sử dụng Events.
- Những ví dụ này không bao gồm xử lý lỗi.
- Bạn có thể quản lý lỗi bằng cách sử dụng khối try-catch hoặc bằng cách sử dụng cấu trúc như await Promise.catch((error) => error).
📚 Xem trong tài liệu:
📦 Tham khảo SDK:
Thử nghiệm trực tiếp
Chạy phương thức này một cách tương tác trong JS SDK sandbox — kết nối URL Dự án và Mã thông báo Ứng dụng của bạn khi truy cập lần đầu, sau đó mở:
- Mua hàng hóa và dịch vụ mà không cần đăng ký người dùng — Trong ví dụ này, chúng tôi sẽ trình bày cách đặt hàng cho khách mà không yêu cầu đăng ký người dùng.
Kịch bản
1. Nhập defineOneEntry từ SDK xác định PROJECT_URL và APP_TOKEN
Ví dụ:
import { defineOneEntry } from 'oneentry';
import { IOrderData } from 'oneentry/dist/orders/ordersInterfaces';
const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';
2. Tạo một API client
Ví dụ:
const { AuthProvider, Orders, Payments } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});
3. Chúng tôi tạo một mảng với các trường cần thiết cho việc ủy quyền người dùng
Ví dụ:
const authData = [
{
// registration form email marker
marker: 'email_reg',
value: 'your-email',
},
{
// registration form password marker
marker: 'password_reg',
value: 'your-password',
},
];
Kết quả:
[
{
"marker": "email_reg",
"value": "kvasssukr.net@gmail.com"
},
{
"marker": "password_reg",
"value": "123456"
}
]
4. Đăng nhập với tư cách người dùng khách để đặt hàng
Ví dụ:
const user = await AuthProvider.auth('email', {
authData: authData,
});
console.log(user);
Kết quả:
{
"userIdentifier": "kvasssukr.net@gmail.com",
"authProviderIdentifier": "email",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR...pZCI6MTYsImF1dGhQ"
"refreshToken": "1745494429101-...-2834edf8"
}
5. Tạo dữ liệu thường được nhận từ mẫu frontend
Ví dụ:
const guestFormData = [
{
marker: 'guest_name',
type: 'string',
value: 'Christina Thomas',
},
{
marker: 'guest_phone',
type: 'string',
value: '+18005000500',
},
{
marker: 'guest_email',
type: 'string',
value: 'guest@yourmail.com',
},
];
const productsData = [
{
productId: 15,
quantity: 1,
},
];
const body: IOrderData = {
formIdentifier: 'guest_order',
paymentAccountIdentifier: 'cash',
formData: guestFormData,
products: productsData,
};
Kết quả:
[
{
"productId": 15,
"quantity": 1
}
]
6. Tạo một đơn hàng khách
Ví dụ:
const order = await Orders.createOrder('guest_orders', body);
if ('statusCode' in order) {
throw new Error(order.message);
}
Kết quả:
{
"id": 113,
"formIdentifier": "guest_order",
"paymentAccountIdentifier": "cash",
"formData": [
{
"marker": "guest_name",
"type": "string",
"value": "Christina Thomas"
},
{
"marker": "guest_phone",
"type": "string",
"value": "+18005000500"
},
{
"marker": "guest_email",
"type": "string",
"value": "guest@yourmail.com"
}
],
"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": "guest_upcoming",
"statusLocalizeInfos": {
"title": "Upcoming"
},
"createdDate": "2026-06-06T11:37:20.044Z"
}
7. Tạo phiên thanh toán
Ví dụ:
const paymentSession = await Payments.createSession(
order.id,
'session',
false,
);
console.log(paymentSession);
Kết quả:
{
"id": 62,
"createdDate": "2026-06-06T11:37:21.260Z",
"updatedDate": "2026-06-06T11:37:21.260Z",
"type": "session",
"status": "waiting",
"paymentAccountId": 1,
"orderId": 113,
"amount": null,
"paymentUrl": null
}
8. Lấy một đối tượng phiên thanh toán theo định danh đơn hàng với Payments.getSessionByOrderId()
Ví dụ:
const sessionByOrderId = await Payments.getSessionByOrderId(order?.id).catch(
(e: any) => e,
);
console.log(sessionByOrderId, paymentSession, user);
Kết quả:
[
{
"id": 62,
"createdDate": "2026-06-06T11:37:21.260Z",
"updatedDate": "2026-06-06T11:37:21.260Z",
"type": "session",
"status": "waiting",
"paymentAccountId": 1,
"orderId": 113,
"amount": null,
"paymentUrl": null
}
]
Ví dụ cuối cùng
// 1. Import defineOneEntry from SDK define PROJECT_URL and APP_TOKEN
import { defineOneEntry } from 'oneentry';
import { IOrderData } from 'oneentry/dist/orders/ordersInterfaces';
const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';
// 2. Creating an API client
const { AuthProvider, Orders, Payments } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});
// 3. We form an array with fields required for user authorization
const authData = [
{
// registration form email marker
marker: 'email_reg',
value: 'your-email',
},
{
// registration form password marker
marker: 'password_reg',
value: 'your-password',
},
];
// 4. Log in as a guest user to place an order
const user = await AuthProvider.auth('email', {
authData: authData,
});
console.log(user);
// 5. Generate data that is usually received from the frontend form
const guestFormData = [
{
marker: 'guest_name',
type: 'string',
value: 'Christina Thomas',
},
{
marker: 'guest_phone',
type: 'string',
value: '+18005000500',
},
{
marker: 'guest_email',
type: 'string',
value: 'guest@yourmail.com',
},
];
const productsData = [
{
productId: 15,
quantity: 1,
},
];
const body: IOrderData = {
formIdentifier: 'guest_order',
paymentAccountIdentifier: 'cash',
formData: guestFormData,
products: productsData,
};
// 6. Create a guest order
const order = await Orders.createOrder('guest_orders', body);
if ('statusCode' in order) {
throw new Error(order.message);
}
// 7. Creation of payment session
const paymentSession = await Payments.createSession(
order.id,
'session',
false,
);
console.log(paymentSession);
// 8. Get one payment session object by order identifier with [Payments.getSessionByOrderId()](/docs/payments/getSessionByOrderId)
const sessionByOrderId = await Payments.getSessionByOrderId(order?.id).catch(
(e: any) => e,
);
console.log(sessionByOrderId, paymentSession, user);