Connectez votre site Larapen à l’API Envato Marketplace. Vérifiez les codes d’achat des clients, gérez les acheteurs et transformez chaque achat vérifié en clé de licence de l’add-on Licences, qui contrôle l’accès au helpdesk, au forum et à la base de connaissances selon les produits possédés.

Vérification d’Achat

Vérifiez les codes d’achat Envato via l’API officielle. Correspondance automatique de l’identité de l’acheteur.

Connexion OAuth

Les acheteurs lient leur compte Envato via OAuth2. Les achats sont synchronisés automatiquement à l’aide des tokens acheteur.

Contrôle d’Accès

Les achats vérifiés deviennent des clés de licence : l’add-on Licences s’en sert pour restreindre les départements du helpdesk, les catégories du forum et les collections KB.

Gestion des Articles

Importez vos articles Envato, suivez les ventes et liez chaque article au(x) produit(s) de licence qu’il vend.

Cas d’Utilisation

Auteur de Plugin CodeCanyon

Vous vendez un plugin WordPress premium ou un package Laravel sur CodeCanyon. Vous gérez un site de support sur Larapen avec un helpdesk.

  • Importez vos articles CodeCanyon dans Larapen.
  • Liez chaque article à son produit de licence (fenêtre Produits de licence liés), puis liez ce produit de licence à un département du helpdesk (ex. “Support Plugin”).
  • Activez l’option Licences “Exiger une licence active pour ouvrir un ticket” (paramètres HelpDesk) : seuls les clients détenant une clé de licence pour le produit peuvent soumettre des tickets à ce département.
  • Les clients connectent leur compte Envato via OAuth et leurs achats sont synchronisés automatiquement.

Auteur ThemeForest avec Forum Communautaire

Vous vendez plusieurs thèmes et souhaitez un forum communautaire restreint par produit.

  • Créez une catégorie de forum pour chaque thème.
  • Liez chaque article Envato à son produit de licence, et chaque produit de licence à sa catégorie de forum.
  • Activez l’option Licences du forum (licenses_forum_require_purchase, paramètres Forum) : les acheteurs ne peuvent publier que dans les catégories des produits qu’ils possèdent.

Base de Connaissances avec Contenu Premium

Vous avez une base de connaissances avec de la documentation spécifique aux produits qui ne devrait être accessible qu’aux acheteurs.

  • Liez les articles Envato aux produits de licence, et les produits de licence aux collections KB.
  • Activez l’option Licences “Restreindre la base de connaissances par licence” (paramètres HelpDesk) : les articles de ces collections sont réservés aux acheteurs.

Prérequis

  • Larapen CMS v1.0.0 ou ultérieur
  • PHP 8.3+
  • MySQL 8.0+
  • Un token API personnel Envato (voir Créer un Token Envato)
  • L’add-on Licences (dépendance requise ; version 1.0.13 ou ultérieure pour Envato 1.0.6+)
  • Optionnel : l’add-on HelpDesk et/ou Forum, pour le contrôle d’accès (une fonctionnalité des Licences)
Note : L’Intégration Envato Market dépend de l’add-on Licences. La restriction par achat des départements du helpdesk, des collections KB et des catégories du forum est assurée par l’add-on Licences (licenses_entity_links) et ne s’applique que lorsque les add-ons helpdesk et/ou forum sont actifs.

Installation

Étape 1 : Téléverser l’add-on

Dans le panneau d’administration, allez dans Admin → Extensions → Add-ons et cliquez sur le bouton Télécharger un add-on. Sélectionnez le fichier ZIP de l’add-on : le système le décompresse automatiquement et l’add-on apparaît dans la liste des add-ons installés.

Étape 2 : Activer l’add-on

Repérez Intégration Envato Market dans la liste et cliquez sur Activer. Ses migrations, ses seeders (le cas échéant) et ses permissions sont mis en place automatiquement.

Étape 3 : Configurer

Naviguez vers Admin → Envato → Paramètres et saisissez votre token API Envato et votre nom d’utilisateur auteur, puis utilisez le bouton Tester la connexion pour vérifier. Voir Configuration.

Étape 4 : Configurer OAuth (Optionnel)

Pour permettre à vos clients de connecter leur compte Envato via OAuth :

  1. Enregistrez une application sur build.envato.com.
  2. Définissez l’URL de callback à https://yoursite.com/auth/envato/callback.
  3. Dans Admin → Paramètres → Authentification sociale, activez le pilote Envato et saisissez le Client ID et le Client Secret.

Code d’achat (clé de licence)

Intégration Envato Market est vendue comme un produit séparé ; elle possède donc son propre code d’achat (clé de licence) — distinct du code d’achat de l’application principale et de celui de chaque autre add-on. Il vous est demandé lorsque vous activez Intégration Envato Market dans Panneau d’administration → Add-ons.

Nos produits sont vendus sur trois plateformes. La façon dont vous recevez un code d’achat dépend de l’endroit où vous avez acheté le produit.

Plateforme / Marketplace Comment vous obtenez le code d’achat Où le retrouver
Boutique bedigit.com
Achat sur le site (Boutique)
Généré automatiquement lorsque la commande est payée, puis envoyé par email — soit dans un email de licence dédié, soit dans l’email de confirmation de commande. Mon compte → Mes licences sur bedigit.com
Gumroad Créé dès que Gumroad nous notifie la vente, puis envoyé dans un email séparé, en plus du reçu Gumroad. L’email de licence, votre Bibliothèque Gumroad et Mon compte → Mes licences sur bedigit.com
Envato Market
CodeCanyon
Délivré par Envato, et non par nous, et jamais envoyé par email : vous le téléchargez vous-même depuis votre compte Envato. Compte Envato → DownloadsLicense certificate & purchase code
Vérifiez votre dossier spam. Pour les achats effectués sur la boutique bedigit.com et sur Gumroad, le code d’achat est livré par email. Les emails de licence automatiques sont très souvent filtrés : si le message n’est pas dans votre boîte de réception, regardez dans votre dossier spam / courrier indésirable avant de contacter le support, et ajoutez notre adresse d’expédition à vos contacts ou à votre liste d’autorisation.

1. Boutique bedigit.com (achat sur le site)

  • Dès que le statut de paiement de la commande passe à Payée, une clé de licence est générée automatiquement pour chaque article sous licence de la commande (une clé par unité achetée — l’achat de 3 unités donne 3 clés distinctes).
  • Elle est envoyée par email à l’adresse utilisée pour la commande, soit dans un email de licence dédié, soit dans l’email de confirmation de commande. Vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
  • La clé reste disponible dans votre compte sous Mon compte → Mes licences. Les clés sont masquées dans la liste ; ouvrez la page de détail de la licence pour révéler et copier la clé complète, voir les domaines sur lesquels elle est activée, et désactiver un domaine pour libérer un emplacement d’activation.
  • La facture correspondante se trouve sous Mon compte → Mes commandes.

2. Gumroad

  • Un achat sur Gumroad génère deux emails distincts : le reçu Gumroad (envoyé par Gumroad, donnant accès aux fichiers) et un email de clé de licence (envoyé par bedigit.com) qui contient votre code d’achat.
  • L’email de clé de licence est généré dès que Gumroad nous notifie la vente ; il arrive donc normalement quelques secondes après le paiement. Ici aussi, vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
  • Lorsque le produit Gumroad utilise la fonctionnalité de clé de licence propre à Gumroad, la même clé apparaît aussi dans votre reçu Gumroad et sous Bibliothèque → votre achat sur gumroad.com.
  • Utilisez la même adresse email sur bedigit.com que sur Gumroad : vos clés sont alors liées automatiquement à votre compte et listées sous Mon compte → Mes licences, même si vous vous inscrivez après l’achat. Vous pouvez aussi ajouter manuellement une clé Gumroad depuis Mon compte → Mes licences Gumroad.

3. Envato Market (CodeCanyon)

  • Les codes d’achat Envato sont émis et délivrés par Envato Market, jamais envoyés par email par nos soins — il n’y a donc rien à chercher dans votre dossier spam : vous récupérez le code depuis votre compte Envato.
  • Connectez-vous à votre compte Envato / CodeCanyon, ouvrez la page Downloads, trouvez l’article et choisissez License certificate & purchase code dans le menu déroulant Download. Le code figure dans ce certificat.
  • Un code d’achat Envato ressemble à 12345678-90ab-cdef-1234-567890abcdef (8-4-4-4-12 caractères). Il ne change jamais, et le renouvellement du support de l’article n’en génère pas de nouveau.
  • Article officiel Envato : Where Is My Purchase Code?
Vous avez perdu votre code d’achat ? Recherchez dans votre boîte mail (dossier spam inclus) “licence” ou “code d’achat”, puis consultez Mon compte → Mes licences sur bedigit.com pour les achats Boutique et Gumroad, ou Downloads → License certificate sur Envato. S’il reste introuvable, ouvrez un ticket sur notre Centre d’aide avec votre numéro de commande (Boutique), l’identifiant de vente Gumroad ou l’email de l’acheteur (Gumroad), ou votre nom d’utilisateur Envato et le nom de l’article (Envato).

Configuration

Tous les paramètres sont gérés dans Admin → Envato → Paramètres (stockés dans la table settings, groupe envato).

Paramètre Description Défaut
envato_api_token Token API personnel Envato pour les appels API au niveau auteur (vérifier les ventes, importer les articles). (vide)
envato_author_username Votre nom d’utilisateur Envato Marketplace. (vide)
envato_require_email_match Lorsqu’activé, l’email Envato de l’acheteur doit correspondre à l’email de son compte sur le site pour que la vérification d’achat réussisse. false
envato_link_multiple_products Autoriser la liaison d’un article Envato à plusieurs produits de licence (packs). Désactivé : la fenêtre Produits de licence liés n’accepte qu’un seul produit. false
envato_license_sync_queued Exécuter la synchronisation Licences → Envato (les enregistrements client et article créés lorsqu’une clé est vérifiée via l’add-on Licences) dans la file d’attente au lieu d’en ligne. false
Les paramètres de contrôle d’accès ont été déplacés. Les anciens interrupteurs envato_helpdesk_require_purchase, envato_forum_require_purchase et envato_kb_restrict_by_purchase n’existent plus. La restriction se configure dans l’add-on Licences : licenses_helpdesk_require_purchase et licenses_kb_restrict_by_purchase (paramètres HelpDesk) et licenses_forum_require_purchase (paramètres Forum). L’acceptation des codes d’achat Envato comme clés de licence est gérée par le paramètre Licences licenses_envato_marketplace_enabled (Licences → Paramètres → Places de marché).

Variables d’Environnement

Note : Les variables d’environnement sont utilisées comme valeurs par défaut. Les paramètres enregistrés dans le panneau d’administration les remplacent.

Configuration OAuth (Auth Sociale)

Le OAuth Envato est configuré via les paramètres d’Auth Sociale du noyau, et non directement par l’add-on :

  • social_auth_envato_enabled : Activer/désactiver le driver OAuth Envato
  • social_auth_envato_client_id : Client ID OAuth de build.envato.com
  • social_auth_envato_client_secret : Client Secret OAuth

Créer un Token Envato

  1. Allez sur build.envato.com/create-token.
  2. Donnez-lui un nom descriptif (ex. “Site Support Larapen”).
  3. Activez ces permissions :
    • View and search Envato sites
    • View the user’s Envato Account username
    • View the user’s email address
    • View the user’s account profile details
    • View the user’s items’ sales history
  4. Copiez le token généré et collez-le dans Admin → Envato → Paramètres.
Important : Le token nécessite la permission “View sales history” pour vérifier les codes d’achat. Sans elle, l’appel API author/sale échouera.

Admin : Paramètres

La page des paramètres (Envato → Paramètres) est organisée en onglets :

Configuration API

  • Token Personnel : champ mot de passe masqué avec bouton afficher/masquer.
  • Nom d’utilisateur auteur : votre nom d’utilisateur Envato Marketplace.
  • Bouton Tester la connexion : appel AJAX qui teste le token en temps réel (fonctionne avec les valeurs non enregistrées saisies dans le formulaire). Renvoie le nom d’utilisateur résolu en cas de succès.

État des Dépendances

Indique si l’add-on Licences requis est actif, avec un avertissement lorsqu’il ne l’est pas.

Options de Vérification

  • Exiger la correspondance des emails : lorsqu’activé, l’email Envato de l’acheteur doit correspondre à l’email de son compte sur le site.

Synchronisation Licences

Affichée tant que l’add-on Licences est actif :

  • Autoriser plusieurs produits de licence par article (envato_link_multiple_products) : désactivé par défaut, de sorte qu’un article est lié à un seul produit de licence et que la fenêtre Produits de licence liés le remplace lorsqu’un autre est choisi.
  • Exécuter la synchronisation en arrière-plan (envato_license_sync_queued) : lorsqu’une clé est vérifiée via l’add-on Licences avec le marketplace Envato, les enregistrements client et article correspondants sont créés ici ; n’activez cette option qu’avec un worker de file d’attente en cours d’exécution.

Admin : Articles

La page Articles (Envato → Articles) gère votre catalogue local d’articles Envato Marketplace.

Liste des Articles

Un tableau trié et paginé (20 par page) affichant :

  • Miniature : icône de l’article depuis Envato
  • Nom & ID Envato
  • Site marketplace (ex. codecanyon, themeforest)
  • Prix (formaté depuis les centimes)
  • Nombre de ventes
  • Liens : à combien de produits de licence cet article est lié ; les produits liés sont également affichés sous forme de badges sous le nom de l’article
  • Dernière synchronisation

Actions par article : Voir, Gérer les liens (ouvre la fenêtre Produits de licence liés, où un produit de licence peut aussi être créé depuis l’article — voir Produit de Licence), Supprimer. Suppression en masse avec sélection par cases à cocher. Filtres : recherche (nom ou ID Envato), site marketplace, liés / non liés, avec / sans achats.

Importation d’Articles

Cliquez sur Importer depuis Envato pour lancer une importation séquentielle pilotée par JavaScript :

  1. L’interface envoie POST admin/envato/items/import?page=1.
  2. Le serveur récupère une page (jusqu’à 10 articles) depuis le point de terminaison Envato author/sales.
  3. Pour chaque nouvel article (pas encore en base), il appelle getCatalogItem() pour obtenir les détails complets.
  4. Une barre de progression se met à jour en temps réel affichant : nouveaux articles importés, articles ignorés (doublons), pages traitées.
  5. Si hasMore = true, le JS demande automatiquement la page suivante.
Note : L’importation découvre les articles à partir de votre historique de ventes, pas d’une recherche de catalogue. Seuls les articles que vous avez vendus au moins une fois seront importés. Pour ajouter un article sans ventes, créez-le manuellement dans la base de données.

Détail de l’Article & Synchronisation

La page de détail de l’article (Envato → Articles → {article}) affiche :

  • Carte d’info de l’article : miniature, nom, ID Envato, marketplace, auteur, prix, nombre de ventes, note, lien “Voir sur Envato”
  • Les badges Produits de licence liés sous le nom de l’article (lorsque l’add-on Licences est actif) — voir Produit de Licence
  • Bouton Synchroniser : re-récupère l’article depuis l’API catalogue Envato et met à jour tous les champs
  • Formulaire Ajouter un code d’achat : l’admin peut ajouter manuellement un code d’achat connu pour cet article
  • Tableau des achats : tous les achats vérifiés pour cet article, affichant le nom d’utilisateur de l’acheteur, l’utilisateur lié du site, l’email, le code d’achat (complet, visible par l’admin), le type de licence, le montant, la date de vente
  • Barre latérale Lié à : les produits de licence auxquels cet article est lié (les inactifs sont signalés), avec un bouton Modifier qui ouvre la fenêtre Produits de licence liés

Créer un Produit de Licence depuis un Article

Lorsque l’add-on Licences est actif, la fenêtre Produits de licence liés d’un article comporte un bouton Créer un produit de licence. C’est l’équivalent, article par article, de l’importation en masse Importer depuis le module Envato de l’add-on Licences — utilisez-le pour transformer un seul article en produit de licence à la demande, sans relancer toute l’importation.

  • Un clic crée un produit de licence depuis l’article (nom, description et métadonnées telles que le marketplace, l’auteur, le prix et le nombre de ventes), lie l’article à ce produit et le sélectionne dans la fenêtre. Si l’article possède déjà un produit de licence, ce produit est actualisé à la place, de sorte qu’aucun doublon n’est créé.
  • Le SKU du produit est son propre identifiant et n’est pas l’ID de l’article Envato : l’ID de l’article est conservé dans la fiche Envato de l’article (licenses_product_marketplace), qui est ce qui identifie le produit pour les codes d’achat Envato.
  • L’importation d’articles sur cette page crée également les produits de licence correspondants (lorsque le marketplace Envato est activé dans les paramètres des Licences).
Même résultat qu’avec l’importateur. Un produit créé ici est identique à celui produit par Licences → Produits → Importer depuis le module Envato ; tous deux utilisent le même mappage et la même déduplication (d’abord le lien de l’article, puis son ID d’article Envato, son slug et son nom), de sorte que les articles ne se retrouvent jamais avec deux produits de licence.

Admin : Produits de Licence Liés

Un article Envato est lié au(x) produit(s) de licence qu’il vend. Les produits de licence sont la seule chose à laquelle un article peut être lié : les départements du helpdesk, les collections KB et les catégories du forum sont liés à des produits de licence dans l’add-on Licences, jamais à des articles Envato.

Édition des Liens

  • Ouvrez la fenêtre Produits de licence liés depuis l’icône de lien d’une ligne d’article sur Envato → Articles, ou depuis le bouton Modifier de la carte Lié à de la page de l’article (permission envato.links.edit). Il n’y a plus de page de liens séparée : l’ancienne page /admin/envato/links a été retirée en 1.0.5.
  • La fenêtre utilise le sélecteur partagé Produits de licence (recherchable, avec le slug / SKU / la version sur chaque ligne). Un produit par article par défaut ; plusieurs lorsque envato_link_multiple_products est activé.
  • Créer un produit de licence (affiché avec la permission licenses.products.create ou licenses.products.edit) crée le produit depuis l’article en un clic et le sélectionne.
  • L’enregistrement remplace les liens de l’article par les produits sélectionnés.
Où les liens sont stockés : depuis Envato 1.0.6, un lien est une fiche Envato du produit de licence dans la table licenses_product_marketplace de l’add-on Licences (external_id = l’ID de l’article Envato, listing_id = envato_items.id). L’ancienne table envato_item_links est supprimée par la mise à jour 1.0.6 après que ses lignes y ont été copiées. Le même enregistrement est affiché dans la section Envato du formulaire du produit de licence (Licences → Produits).

Admin : Clients

La page Clients (Envato → Clients) fournit une vue agrégée de tous les acheteurs.

Liste des Clients

Les achats sont regroupés par buyer_username, affichant :

  • Nom d’utilisateur Envato
  • Email
  • Compte site lié (le cas échéant)
  • Nombre d’achats & Nombre d’articles
  • Total dépensé
  • Statut du support (badge actif/expiré)
  • Date du dernier achat

Recherchable par nom d’utilisateur acheteur, email acheteur, ou nom/email de l’utilisateur lié.

Détail du Client

Cliquez sur une ligne client pour voir son historique d’achats complet :

  • Barre latérale : nom d’utilisateur, email, compte site lié avec bouton “Révoquer le lien”, grille de statistiques (achats, articles, total dépensé, nombre vérifié), alerte de statut de support
  • Tableau des achats : miniature de l’article, nom de l’article, code d’achat, type de licence, montant, date de vente, badge d’expiration du support

Révocation d’un Lien

L’action Révoquer le lien :

  1. Supprime tous les enregistrements envato_user_purchases de l’acheteur
  2. Efface les données OAuth Envato de l’utilisateur (provider, provider_id, provider_token, etc.)
  3. L’utilisateur perd immédiatement l’accès à toutes les fonctionnalités conditionnées par l’achat

Comptes Liés

La page Comptes liés (Envato → Comptes liés) affiche tous les utilisateurs du site qui ont connecté leur compte Envato via OAuth.

  • Utilisateur du site : avatar, nom, email
  • Badge Nom d’utilisateur Envato
  • Nombre d’achats
  • Date de liaison

Actions par ligne :

  • Synchroniser les achats (AJAX) : appelle le point de terminaison Envato buyer/purchases en utilisant le token OAuth stocké de l’utilisateur et importe tous les nouveaux achats. Met à jour le badge de comptage en ligne.
  • Voir les achats : navigue vers la page de détail du client
  • Révoquer le lien : déconnecte le compte Envato et supprime tous les achats

Flux OAuth

L’intégration OAuth Envato utilise Laravel Socialite et est gérée par le SocialAuthController du noyau.

Pour les Nouveaux Utilisateurs (Connexion/Inscription)

  1. L’utilisateur clique sur “Se connecter avec Envato” sur la page de connexion.
  2. Redirigé vers la page d’autorisation OAuth d’Envato.
  3. Après approbation, Envato redirige vers /auth/envato/callback.
  4. Le système trouve ou crée un compte utilisateur (correspondance par nom d’utilisateur Envato, puis par email).
  5. Les tokens OAuth (provider_token, provider_refresh_token, provider_token_expires_at) sont stockés dans la table users.
  6. Tous les achats Envato de l’utilisateur sont automatiquement synchronisés via syncUserPurchases().
  7. L’utilisateur est connecté et redirigé.

Pour les Utilisateurs Existants (Liaison de Compte)

  1. L’utilisateur authentifié clique sur “Connecter le compte Envato” sur la page Mes Achats.
  2. Redirigé vers OAuth Envato.
  3. Après approbation, le callback lie le compte Envato à l’utilisateur existant.
  4. Revalidation : Tous les achats existants appartenant à un autre acheteur Envato sont supprimés.
  5. Synchronisation : Tous les nouveaux achats du compte de l’acheteur sont importés.
  6. L’utilisateur est redirigé vers la page Mes Achats avec un message récapitulatif.

Rafraîchissement du Token

La méthode EnvatoApiClient::getBuyerPurchases() vérifie automatiquement l’expiration du token. Si le token est expiré (ou expire dans les 5 minutes), elle appelle refreshUserToken() qui utilise le refresh token stocké pour obtenir un nouveau token d’accès depuis l’API Envato. Le nouveau token est enregistré dans la base de données de manière transparente.

Mes Achats

La page d’achats front-end est disponible à /{locale}/envato/purchases (authentification requise).

URL & Routes

MéthodeURLNom de RouteDescription
GET /{locale}/envato/purchases envato.purchases.localized Page Mes Achats
POST /{locale}/envato/purchases/add envato.purchases.store.localized Ajouter un code d’achat
DELETE /{locale}/envato/purchases/disconnect envato.purchases.disconnect.localized Déconnecter le compte Envato
POST /{locale}/envato/purchases/{id}/register-as-license envato.purchases.register-as-license.localized Enregistrer un achat vérifié comme clé de licence (add-on Licences, JSON)
DELETE /{locale}/envato/purchases/{id} envato.purchases.destroy.localized Supprimer un achat spécifique

Des variantes non localisées (sans {locale}) sont également enregistrées.

Mise en Page

Mise en page responsive à trois colonnes (col-lg-8 + col-lg-4) :

Contenu Principal

  • Non connecté : Une carte stylée “Connectez votre compte Envato” avec un bouton de connexion vert Envato. Affiche un avertissement si OAuth est désactivé dans les paramètres.
  • Connecté : Un badge “Connecté en tant que {nom d’utilisateur}” avec un bouton Déconnexion.
  • Formulaire Ajouter un code d’achat : champ texte pour le code d’achat (format UUID) + bouton soumettre. Affiché uniquement lorsque le compte Envato de l’utilisateur est connecté.
  • Liste des Achats vérifiés : chaque achat affiche : miniature de l’article, nom, code d’achat masqué, type de licence, date d’expiration du support, date de vérification et un bouton Supprimer.

Barre Latérale

  • Carte Statut du compte Envato (badge connecté/non-connecté, action connecter/déconnecter)
  • Carte Besoin d’assistance ? avec lien helpdesk (affichée uniquement si l’add-on HelpDesk est actif)
  • Liste de conseils

Déconnexion

Lorsqu’un utilisateur déconnecte son compte Envato :

  1. Tous ses enregistrements envato_user_purchases sont supprimés.
  2. Les colonnes provider, provider_id, provider_token, provider_refresh_token, provider_token_expires_at et provider_avatar de la table users sont mises à null.
  3. Ils perdent immédiatement l’accès à toutes les fonctionnalités conditionnées par l’achat.

Flux de Validation d’Achat

Lorsqu’un utilisateur soumet un code d’achat (via la page Mes Achats), le système suit ce flux de validation :

  1. Vérifier la base locale : ce code d’achat est-il déjà dans envato_user_purchases ? Si oui, vérifier la propriété :
    • Si le code appartient à l’utilisateur actuel : renvoyer “déjà ajouté”.
    • Si le code appartient à un autre utilisateur : renvoyer l’erreur already_used.
  2. Vérifier via l’API Envato : appeler author/sale?code={code} en utilisant le token personnel de l’auteur.
  3. Trouver ou créer l’article : faire correspondre le item.id de la réponse à un enregistrement local envato_items. Si non trouvé, créer automatiquement l’article à partir de la réponse API.
  4. Vérification d’identité de l’acheteur : vérifier que l’utilisateur est le véritable acheteur en utilisant cette priorité :
    1. Correspondance OAuth Envato : provider = 'envato' ET provider_id = buyer_username (plus fiable)
    2. Correspondance de nom : le nom de l’utilisateur correspond au nom d’utilisateur de l’acheteur
    3. Correspondance du préfixe email : le préfixe email correspond au nom d’utilisateur de l’acheteur
  5. Créer l’enregistrement d’achat : insérer dans envato_user_purchases avec les données de vérification.
  6. Enregistrement automatique de licence : si l’add-on Licences est actif, créer automatiquement un enregistrement LicenseKey (voir Intégration Licences).

Statuts de Validation

Statut Description
valid Code d’achat vérifié et ajouté avec succès.
invalid Code d’achat non trouvé sur Envato ou n’appartient pas à l’auteur configuré.
already_used Le code d’achat est déjà enregistré par un autre utilisateur sur ce site.
email_mismatch La correspondance d’email est requise mais l’email de l’acheteur ne correspond pas à l’email de l’utilisateur.
item_mismatch Le code d’achat est valide mais appartient à un article différent de celui attendu.
api_error Une erreur s’est produite lors de la communication avec l’API Envato (erreur réseau, token invalide, etc.).

Contrôle d’Accès : Restriction par Achat

Le contrôle d’accès est une fonctionnalité de l’add-on Licences (depuis Envato 1.0.2). Le rôle de l’add-on Envato est de transformer les achats vérifiés en clés de licence ; il ne lie plus les articles aux entités du helpdesk, du forum ou de la KB, et son ancienne classe EnvatoPurchaseValidator, son binding envato.access.checker et son point de terminaison items-for-entity ont disparu.

Fonctionnement de la Restriction

  1. Un admin lie chaque article Envato à son produit de licence (Produits de licence liés).
  2. Un admin lie les produits de licence aux départements du helpdesk, aux collections KB ou aux catégories du forum (stockés dans la table licenses_entity_links des Licences), depuis les pages d’administration HelpDesk et Forum.
  3. Un admin active l’option Licences correspondante : licenses_helpdesk_require_purchase, licenses_kb_restrict_by_purchase ou licenses_forum_require_purchase.
  4. Lorsqu’un acheteur ajoute un code d’achat (ou en vérifie un via l’API Licences), l’add-on Envato enregistre une clé de licence pour le produit de licence de l’article (voir Intégration de l’add-on Licences).
  5. Les add-ons helpdesk / forum demandent à l’add-on Licences (LicensesAccessService) si l’utilisateur détient une clé de licence active pour un produit lié à l’entité.
Principe clé : Les entités sans aucun produit de licence lié sont toujours accessibles. Lier un produit de licence est ce qui active la restriction d’accès pour cette entité spécifique.

Intégration HelpDesk

Lorsque licenses_helpdesk_require_purchase est activé (paramètres HelpDesk), un département lié à des produits de licence n’accepte les tickets que des utilisateurs détenant une clé de licence pour l’un d’eux. Le formulaire de ticket renvoie vers la page Mes Achats afin que les acheteurs puissent ajouter leur code d’achat Envato. Les admins voient aussi les achats Envato du client dans la barre latérale du ticket.

Intégration Forum

Lorsque licenses_forum_require_purchase est activé (paramètres Forum), les fils de discussion et les réponses dans une catégorie liée à des produits de licence sont réservés aux utilisateurs détenant une clé de licence pour l’un d’eux — quel que soit le marketplace d’où provient la clé (Envato, Gumroad, Boutique ou manuelle).

Intégration Base de Connaissances

Lorsque licenses_kb_restrict_by_purchase est activé (paramètres HelpDesk), une collection KB liée à des produits de licence n’est lisible que par les utilisateurs détenant une clé de licence pour l’un d’eux : les visiteurs sont envoyés vers la page de connexion, et les utilisateurs connectés sans clé vers leur page Mes licences, où ils peuvent en enregistrer une.

Intégration de l’add-on Licences

Lorsque les add-ons Envato et Licences sont tous deux actifs et que le marketplace Envato est activé dans Licences → Paramètres → Places de marché (licenses_envato_marketplace_enabled), l’intégration est bidirectionnelle.

Envato → Licences (Création Automatique de Clé)

Lorsqu’un achat Envato vérifié est créé, une clé de licence est automatiquement enregistrée :

  1. Vérifie si l’add-on Licences est actif.
  2. Vérifie si une clé de licence avec ce code d’achat existe déjà (ignore le cas échéant).
  3. Résout le LicenseProduct dans cet ordre : le ou les produits actifs auxquels l’article est lié (Produits de licence liés) → tout produit possédant une fiche Envato pour cet ID d’article → un produit dont le slug ou l’alias de slug correspond au nom de l’article → le premier produit actif → un nouveau produit, qui est immédiatement référencé sous l’article afin que la prochaine vente se résolve par le lien.
  4. Mappe le type de licence Envato : “Extended License” → extended, tous les autres → standard.
  5. Crée une clé de licence avec marketplace = 'envato', le code d’achat comme clé, et expires_at = null (les licences Envato sont perpétuelles).

Articles Envato → Synchronisation Produits Licences

Lorsque le marketplace Envato est activé dans les paramètres des Licences :

  • Importation : L’importation d’articles Envato sur Admin → Envato → Articles crée automatiquement les produits de licence correspondants et enregistre chaque article comme fiche Envato du produit (licenses_product_marketplace). L’ID de l’article Envato n’est pas écrit dans le SKU ni dans les métadonnées du produit ; un article déjà référencé conserve son produit.
  • Suppression : La suppression d’articles Envato supprime également le produit de licence référencé sous l’ID Envato de l’article, ainsi que les fiches de l’article.
Note : Les échecs lors de l’enregistrement automatique ou de la synchronisation de produits sont capturés et journalisés comme avertissements : ils ne propagent jamais d’erreurs à l’utilisateur. L’opération se termine avec succès.

Licences → Envato (Vérification par Marketplace)

Lorsqu’un code d’achat est vérifié via l’API Licences (GET /api/licenses/verify) et n’est pas trouvé localement, le marketplace Envato le vérifie automatiquement auprès de l’API Envato. Si elle est valide, la clé est créée pour les recherches futures, sur le produit de licence auquel l’article est lié. L’article et l’achat sont ensuite répercutés dans les pages Articles et Clients d’Envato (voir envato_license_sync_queued).

Si l’add-on Envato est actif, son client API est utilisé pour la vérification. Sinon, l’add-on Licences effectue des appels HTTP directs vers l’API Envato.

Ce que l’API Licences accepte comme product

Une application cliente envoie le paramètre product à côté du code d’achat sur GET /api/licenses/verify. L’add-on Licences accepte plusieurs identifiants du même produit, et l’ID de l’article Envato en est un — via la fiche de l’article, pas via le SKU :

Ce que le client envoie Ce qui se passe
Le SKU du produit de licence Accepté en premier. C’est ce que les applications clientes actuelles envoient avant tout le reste (clé de manifeste sku).
L’un de ses alias de slug Accepté ensuite. Un alias peut être partagé par plusieurs produits, de sorte qu’une clé de l’un ou l’autre se vérifie.
L’ID de l’article Envato Accepté lorsque l’article est référencé sous ce produit de licence (voir Produits de licence liés). C’est le marketplace_item_ids.envato du manifeste. Si le produit n’a pas de fiche Envato pour cet ID, rien ne correspond et la réponse est “License key does not belong to this product.”
Son slug (nom de répertoire) Accepté en dernier, ce qui correspond à ce que les anciennes applications clientes envoient.
Aucun product La vérification du produit est ignorée : la clé se vérifie dès lors qu’elle existe, qu’elle est active et que sa limite d’activation le permet. La réponse nomme tout de même le véritable produit.
Ancien logiciel envoyant item_id= au lieu de product=. Sur GET /api/licenses/verify, ce paramètre est ignoré, de sorte que l’appel se comporte comme la dernière ligne ci-dessus : vérifié, mais sur aucun produit particulier. Il n’est lu que par le point de terminaison de vérification legacy des Licences (dont le chemin est envato.php par défaut, celui que ces clients appellent déjà), qui résout l’ID de l’article vers son produit de licence via la fiche Envato et le vérifie alors bien. La correspondance est exacte : sensible à la casse et sans suppression des espaces.

L’ordre complet que le serveur essaie, ainsi que les identifiants des autres marketplaces, sont documentés dans la documentation de l’add-on Licences (Comment l’API reconnaît un produit).

Mise à Jour

Il y a deux façons de mettre à jour cet add-on : via le panneau d’administration (recommandé) ou en remplaçant manuellement les fichiers.

Méthode 1 : Téléversement via le panneau d’administration (recommandée)

  1. Téléchargez le dernier fichier .zip de cet add-on.
  2. Allez dans Panneau d’administrationAdd-ons et cliquez sur le bouton Téléverser.
  3. Sélectionnez ou glissez le fichier .zip dans la zone de téléversement.
  4. Une invite de confirmation affichera les numéros de version actuelle et nouvelle. Cliquez sur Remplacer pour continuer.
  5. Allez dans Panneau d’administrationMise à jour du système (/admin/update) pour appliquer les migrations de base de données en attente.

Méthode 2 : Remplacement manuel des fichiers

Étape 1 : Remplacer les Fichiers

Remplacez le répertoire de l’add-on par la nouvelle version.

Étape 2 : Exécuter les Migrations

php artisan migrate

Les migrations en attente ne s’exécutent qu’une seule fois : la commande peut être relancée sans risque.

Étape 3 : Vider les Caches

php artisan config:clear
php artisan route:clear
php artisan view:clear

Étape 4 : Vérifier

Visitez Envato → Paramètres et cliquez sur Tester la connexion pour confirmer que le token API fonctionne toujours.

Sauvegarde d’abord : Sauvegardez toujours votre base de données avant d’exécuter les migrations sur un système de production.
Ordre de mise à jour pour la 1.0.6 : mettez à jour l’add-on Licences en 1.0.13 (ou ultérieure) avant de mettre Envato à jour en 1.0.6. Envato 1.0.6 copie ses liens article → produit de licence dans la table licenses_product_marketplace des Licences et supprime envato_item_links ; tant que les tables des Licences sont absentes, il saute cette étape et conserve la table jusqu’à ce que la mise à jour des Licences ait été exécutée.

Désinstallation

Éteindre un add-on sans rien perdre, c’est le désactiver : allez dans Panneau d’administration → Add-ons, trouvez Envato Market Integration et cliquez sur Désactiver.

  • Ses routes, ses vues, ses entrées de menu d’administration et ses permissions cessent d’être enregistrées, et ses pages publiques ne répondent plus.
  • Ses tables de base de données et toutes les données qu’elles contiennent sont conservées, et ses fichiers restent dans extensions/addons/envato/. Rien n’est supprimé.
  • Le code d’achat enregistré lors de l’activation est conservé lui aussi : réactiver l’add-on ne le redemande pas.
  • La désactivation est refusée tant qu’un autre add-on actif dépend de celui-ci : désactivez d’abord cet add-on.

Cliquez sur Activer sur la même carte pour le rallumer. Les migrations en attente sont rejouées, les assets republiés, et l’add-on reprend exactement là où il s’était arrêté.

Suppression

La suppression est définitive et détruit les données de l’add-on. Le bouton Supprimer n’apparaît que sur un add-on désactivé : la suppression se fait donc toujours en deux temps :

  1. Désactivez Envato Market Integration (voir Désinstallation).
  2. Cliquez sur Supprimer sur sa carte et confirmez la demande.

Le panneau d’administration, en une seule passe :

  • exécute le hook de désinstallation de l’add-on, s’il en fournit un, tant que son code est encore sur le disque ;
  • révoque les permissions déclarées dans son addon.json ;
  • annule ses migrations — ce qui supprime ses tables de base de données et toutes les lignes qu’elles contiennent — et purge ses entrées de la table migrations, afin qu’une réinstallation ultérieure reparte de zéro ;
  • supprime ses assets publiés : public/addons/envato/, public/vendor/envato/ et storage/app/public/addons/envato/ ;
  • supprime le dossier de l’add-on extensions/addons/envato/ ;
  • supprime sa ligne dans la table addons (le code d’achat enregistré disparaît avec elle) et vide le cache de l’application.
Cette action est irréversible. Sauvegardez votre base de données avant de supprimer un add-on dont les données peuvent encore vous servir : le réinstaller plus tard crée des tables vides, pas votre ancien contenu.

La suppression est refusée, avec un message explicatif et avant toute destruction, lorsque l’add-on est encore actif, lorsqu’un autre add-on actif en dépend, ou lorsque l’utilisateur du serveur web (PHP) ne peut pas supprimer extensions/addons/envato/. Dans ce dernier cas, donnez à cet utilisateur le droit d’écriture sur le dossier et sur son parent, puis réessayez.

Supprimer le dossier en FTP ou en SSH n’est pas équivalent : les tables de l’add-on, ses entrées dans la table migrations et sa ligne addons restent en place, et sa carte reste dans la liste. Utilisez plutôt Supprimer dans le panneau d’administration.

Dépannage

Le Test de Connexion échoue : “Could not connect to Envato API”

Vérifiez que :

  • Le token API est correct et n’a pas été révoqué.
  • Le token possède les permissions requises (notamment “View sales history”).
  • Votre serveur peut atteindre api.envato.com (pas de pare-feu bloquant le HTTPS sortant).

L’importation ne trouve aucun article

L’importation utilise le point de terminaison author/sales, qui ne renvoie que les articles que vous avez vendus. Si vous avez un nouvel article avec zéro vente, il n’apparaîtra pas dans l’importation. Vous pouvez ajouter manuellement des articles dans la base de données ou attendre la première vente.

La vérification du code d’achat échoue : “Invalid purchase code”

  • Assurez-vous que le code d’achat est un UUID valide (36 caractères, tirets inclus).
  • Vérifiez que le code appartient à l’un de vos articles (le point de terminaison author/sale ne renvoie que les ventes de l’auteur configuré).
  • Vérifiez que envato_author_username est correctement défini dans les paramètres.

L’utilisateur ne peut pas connecter son compte Envato

  • Assurez-vous que le driver OAuth Envato est activé dans Admin → Paramètres → Authentification sociale.
  • Vérifiez que le Client ID et le Client Secret sont définis.
  • L’URL de rappel chez Envato doit correspondre exactement à https://yoursite.com/auth/envato/callback.

Les achats ne se synchronisent pas après la connexion OAuth

  • Le token OAuth a peut-être expiré. Essayez de déconnecter et reconnecter.
  • Vérifiez que les colonnes provider_token et provider_refresh_token existent dans la table users (exécutez php artisan migrate si la migration n’a pas été exécutée).
  • Vérifiez les logs du serveur pour les erreurs de l’API Envato pendant le processus de synchronisation.

La restriction par achat ne fonctionne pas : les utilisateurs accèdent sans achat

  • La restriction est une fonctionnalité des Licences : assurez-vous que l’option Licences concernée est activée (licenses_helpdesk_require_purchase, licenses_forum_require_purchase ou licenses_kb_restrict_by_purchase).
  • Assurez-vous qu’au moins un produit de licence est lié à l’entité (licenses_entity_links). Les entités sans produit lié sont toujours non restreintes.
  • Assurez-vous que l’article Envato est lié à ce produit de licence (Produits de licence liés) ; sinon la clé de l’acheteur est enregistrée sur un autre produit.

Clé de licence enregistrée sur le mauvais produit

  • Un achat est enregistré sur le produit de licence auquel l’article est lié. Ouvrez l’article, vérifiez sa carte Lié à et corrigez le lien.
  • Sans lien, le produit est deviné (slug ou alias du nom de l’article, puis le premier produit actif) — liez toujours vos articles.
  • Exécutez php artisan licenses:doctor : il signale les liens pointant vers un article ou un produit supprimé (orphan_link), les produits importés depuis Envato mais liés à aucun de ses articles (source_without_link) et les articles liés dont le titre diffère (title_mismatch).

Les liens d’articles ont disparu après la mise à jour

  • Envato 1.0.6 copie les lignes envato_item_links restantes dans la table licenses_product_marketplace des Licences, puis supprime la table. Mettez d’abord à jour l’add-on Licences en 1.0.13 : sa mise à jour copie également les liens, et la migration Envato saute la copie (et conserve la table) tant que les tables des Licences n’existent pas.
  • Si Envato a été mis à jour en premier, mettez à jour les Licences, puis relancez les mises à jour en attente depuis Admin → Mise à jour du système afin que la migration Envato puisse s’achever.

Non-correspondance d’identité de l’acheteur : achat rejeté malgré un code valide

Le système essaie de faire correspondre l’acheteur à l’utilisateur authentifié via trois méthodes (dans l’ordre) :

  1. Correspondance OAuth Envato (provider_id = nom d’utilisateur acheteur) : plus fiable
  2. Correspondance de nom
  3. Correspondance du préfixe email

Si aucune ne correspond, l’achat est rejeté. Solution : faites connecter le compte Envato de l’utilisateur via OAuth d’abord, puis ajoutez le code d’achat. La correspondance OAuth est définitive.

La création automatique de licence ne fonctionne pas

  • Assurez-vous que l’add-on Licences est installé et actif.
  • Vérifiez que la classe Addons\Licenses\Services\LicenseKeyService existe.
  • Vérifiez que le marketplace Envato est activé dans Licences → Paramètres → Places de marché (licenses_envato_marketplace_enabled) pour les vérifications via l’API Licences et les importations d’articles.
  • Vérifiez les logs du serveur pour les avertissements pendant le processus d’enregistrement automatique.
  • Si une clé de licence avec le même code d’achat existe déjà, la création automatique est ignorée (par conception).

Intégration Envato Market v1.0.0 : fait partie de la plateforme CMS Larapen.

© BeDigit. Tous droits réservés.

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Besoin d'aide ? Créez un ticket de support

Créer un Ticket