Abonnez-vous au contenu
Dans cet exemple, nous démontrons comment gérer l'accès au contenu basé sur un abonnement en utilisant l'API OneEntry. Nous vérifions si un utilisateur a un abonnement actif et accordons l'accès au contenu premium ou l'invitons à s'abonner.
✅ Objectif du scénario :
- Seuls les utilisateurs ayant un abonnement ont accès au contenu
- La vérification est basée sur les Orders, User.
- Ceux qui ne sont pas autorisés ou n'ont pas acheté recevront une offre pour s'abonner.
✅ Ce dont vous avez besoin :
- Un PROJECT_URL et un APP_TOKEN valides pour l'authentification avec l'API OneEntry.
- Un formulaire avec le marqueur "subscriptions", les attributs "expired_date" et "subscription_time" et le type "Order form"
- Un utilisateur enregistré
📌 Important :
- Ces exemples n'incluent pas la gestion des erreurs.
- Vous pouvez gérer les erreurs en utilisant un bloc try-catch ou en employant une construction comme await Promise.catch((error) => error).
Scénario
1. Importer defineOneEntry depuis le SDK et définir l'url et le token
Exemple :
import { defineOneEntry } from 'oneentry';
const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';
2. Création d'un client API avec la fonction defineOneEntry()
Exemple :
const { Users, Orders, Pages, Payments, AuthProvider, Forms } = defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});
3. Préparation des données pour l'autorisation de l'utilisateur
Exemple :
[
{
"marker": "email_reg",
"value": "your-user@email.com"
},
{
"marker": "password_reg",
"value": "123456"
}
]
4. Autorisation et obtention des données utilisateur AuthProvider.auth()
Exemple :
const authResponse = await AuthProvider.auth('email', {
authData,
});
Résultat :
{
"userIdentifier": "your-user@email.com",
"authProviderIdentifier": "email",
"accessToken": "eyJhbGciOiJIUzI1NiIsInR...pZCI6MTYsImF1dGhQ"
"refreshToken": "1745494429101-...-2834edf8"
}
5. Nous obtenons une liste des commandes de l'utilisateur avec Orders.getAllOrdersByMarker()
Exemple :
const orders = await Orders.getAllOrdersByMarker('subscriptions');
Résultat :
{
"items": [
{
"id": 95,
"storageId": 2,
"createdDate": "2025-08-29T13:32:04.663Z",
"statusIdentifier": "active",
"formIdentifier": "subscription",
"formData": [
{
"marker": "expired_date",
"type": "date",
"value": {
"fullDate": "2026-05-07T00:00:00.000Z",
"formattedValue": "03-05-2026 00:00",
"formatString": "DD-MM-YYYY HH:mm"
}
}
],
"attributeSetIdentifier": "subscriptions",
"totalSum": "100.00",
"currency": "",
"paymentAccountIdentifier": "cash",
"paymentAccountLocalizeInfos": {
"title": "Cash"
},
"products": [
{
"id": 3,
"title": "1 mois",
"sku": "",
"previewImage": null,
"price": 100,
"quantity": 1
}
],
"isCompleted": false
},
{
"id": 94,
"storageId": 2,
"createdDate": "2025-08-29T13:29:30.068Z",
"statusIdentifier": "active",
"formIdentifier": "subscription",
"formData": [
{
"marker": "expired_date",
"type": "date",
"value": {
"fullDate": "2026-05-07T00:00:00.000Z",
"formattedValue": "07-05-2026 00:00",
"formatString": "DD-MM-YYYY HH:mm"
}
}
],
"attributeSetIdentifier": "subscriptions",
"totalSum": "100.00",
"currency": "",
"paymentAccountIdentifier": "cash",
"paymentAccountLocalizeInfos": {
"title": "Cash"
},
"products": [
{
"id": 3,
"title": "1 mois",
"sku": "",
"previewImage": null,
"price": 100,
"quantity": 1
}
],
"isCompleted": false
},
{
"id": 91,
"storageId": 2,
"createdDate": "2025-04-30T21:48:40.628Z",
"statusIdentifier": "active",
"formIdentifier": "subscription",
"formData": [
{
"type": "date",
"marker": "expired_date",
"value": {
"fullDate": "2025-05-07T00:00:00.000Z",
"formattedValue": "07-05-2025 00:00",
"formatString": "DD-MM-YYYY HH:mm"
}
},
{
"type": "list",
"marker": "subscription_time",
"value": [
{
"title": "1 mois",
"value": "1",
"extended": {
"type": "real",
"value": "100"
}
}
]
}
],
"attributeSetIdentifier": "subscriptions",
"totalSum": "100.00",
"currency": "",
"paymentAccountIdentifier": "cash",
"paymentAccountLocalizeInfos": {
"title": "Cash"
},
"products": [
{
"id": 3,
"title": "1 mois",
"sku": "",
"previewImage": null,
"price": 100,
"quantity": 1
}
],
"isCompleted": false
}
],
"total": 3
}
6. Vérification d'un abonnement actif
Exemple :
const now = new Date();
const hasActiveSubscription = orders.items?.some(
(order: any) =>
new Date(
order.formData.find(
(d: { marker: string }) => d.marker === 'expired_date',
).value.fullDate,
) > now,
);
Résultat :
true
7. Si l'abonnement est actif, nous fournissons l'accès, sinon nous créons une commande et générons le paiement
Exemple :
let content = null;
if (hasActiveSubscription) {
// ✅ Abonnement actif → afficher le contenu
content = await Pages.getPageByUrl('premium_page');
console.log('🎉 L’accès est ouvert :', content);
} else {
// ❌ Pas d'abonnement → créer une commande et générer le paiement
const body = {
formIdentifier: 'subscription',
paymentAccountIdentifier: 'cash',
formData: [
{
type: 'date',
marker: 'expired_date',
value: {
fullDate: '2025-05-07T00:00:00.000Z',
formattedValue: '07-05-2025 00:00',
formatString: 'DD-MM-YYYY HH:mm',
},
},
{
type: 'list',
marker: 'subscription_time',
value: [
{
title: '1 mois',
value: '1',
extended: {
type: 'real',
value: '100',
},
},
],
},
],
products: [
{
productId: 3,
quantity: 1,
},
],
};
const order = await Orders.createOrder('subscriptions', body);
const payment = await Payments.createSession(order.id, 'session', false);
// console.log('💸 Procéder au paiement de votre abonnement :', payment)
}
Résultat :
{
"id": 7,
"parentId": null,
"pageUrl": "premium_page",
"depth": 0,
"localizeInfos": {
"title": "Page Premium",
"menuTitle": "Page Premium",
"htmlContent": "",
"plainContent": ""
},
"isVisible": true,
"blocks": [],
"type": "common_page",
"templateIdentifier": null,
"attributeSetIdentifier": null,
"attributeValues": {},
"moduleFormConfigs": [],
"isSync": false
}
Exemple final
// 1. Importer defineOneEntry depuis le SDK et définir PROJECT_URL et APP_TOKEN
import { defineOneEntry } from 'oneentry';
const PROJECT_URL = 'your-project-url';
const APP_TOKEN = 'your-app-token';
// 2. Création d'un client API
const { Users, Orders, Pages, Payments, AuthProvider, Forms } =
defineOneEntry(PROJECT_URL, {
token: APP_TOKEN,
});
// 3. Préparation des données pour l'autorisation de l'utilisateur
const form = await Forms.getFormByMarker('subscription');
// expired_date - Date
// subscription_time - liste
const authData = [
{
marker: 'email_reg',
value: 'your-user@email.com',
},
{
marker: 'password_reg',
value: '123456',
},
];
// 4. Autorisation et obtention des données utilisateur
const authResponse = await AuthProvider.auth('email', {
authData,
});
const user = await Users.getUser();
// 5. Nous obtenons une liste des commandes de l'utilisateur
const orders = await Orders.getAllOrdersByMarker('subscriptions');
// 6. Vérification d'un abonnement actif
const now = new Date();
const hasActiveSubscription = orders.items?.some(
(order: any) =>
new Date(
order.formData.find(
(d: { marker: string }) => d.marker === 'expired_date',
).value.fullDate,
) > now,
);
// 7. Si l'abonnement est actif, nous fournissons l'accès, sinon nous créons une commande et générons le paiement
let content = null;
if (hasActiveSubscription) {
// ✅ Abonnement actif → afficher le contenu
content = await Pages.getPageByUrl('premium_page');
console.log('🎉 L’accès est ouvert :', content);
} else {
// ❌ Pas d'abonnement → créer une commande et générer le paiement
const body = {
formIdentifier: 'subscription',
paymentAccountIdentifier: 'cash',
formData: [
{
type: 'date',
marker: 'expired_date',
value: {
fullDate: '2025-05-07T00:00:00.000Z',
formattedValue: '07-05-2025 00:00',
formatString: 'DD-MM-YYYY HH:mm',
},
},
{
type: 'list',
marker: 'subscription_time',
value: [
{
title: '1 mois',
value: '1',
extended: {
type: 'real',
value: '100',
},
},
],
},
],
products: [
{
productId: 3,
quantity: 1,
},
],
};
const order = await Orders.createOrder('subscriptions', body);
const payment = await Payments.createSession(order.id, 'session', false);
console.log('💸 Procéder au paiement de votre abonnement :', payment);
}