Download the PHP package scell/sdk without Composer
On this page you can find all versions of the php package scell/sdk. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Informations about the package sdk
Scell.io PHP SDK
SDK PHP officiel pour l'API Scell.io - Facturation electronique (Factur-X/UBL/CII) et signature electronique (eIDAS EU-SES).
Features
- Facturation electronique conforme (Factur-X, UBL 2.1, UN/CEFACT CII)
- Support B2B et B2C (particulier) avec generation Factur-X conforme BR-CO-26 EN16931
- Signature electronique simple (eIDAS EU-SES)
- Gestion multi-tenant (sub-tenants, factures directes et entrantes)
- Conformite fiscale ISCA (integrite, clotures, FEC, attestations)
- Statistiques et facturation plateforme
- Integration Laravel native avec auto-discovery
- Builders fluent pour factures et signatures
- Verification HMAC-SHA256 des webhooks
- Retry automatique avec backoff exponentiel
- DTOs types et Enums PHP 8.2+
- Gestion d'erreurs complete
Installation
Configuration
Variables d'environnement
Utilisation Standalone
Client API (integration backend)
Pour les integrations serveur-a-serveur avec API Key:
Creer une facture
Facturation internationale
Pour les parties non-francaises, le SIRET n'est pas requis. Utilisez les numeros de TVA pour les entreprises EU et legal_id avec un code de schema pour les entreprises hors-EU.
Facture avec acheteur belge (EU)
Note : Pour les transactions B2B intra-communautaires (ex: FR -> BE, FR -> DE), le taux de TVA est generalement 0% via le mecanisme d'autoliquidation. L'acheteur comptabilise la TVA dans son propre pays.
Facture avec acheteur UK (hors-EU)
Pour les acheteurs hors-EU, utilisez buyer_legal_id et buyer_legal_id_scheme en plus du numero de TVA :
Creer une signature
White-label avance + options de signature (v1.12.0)
Positions multiples par signataire (v2.27.0)
Le champ optionnel signerIndex (0-base) affecte explicitement une position de
signature a un signataire precis (0 = premier signataire ajoute, 1 = deuxieme,
etc.). EU-SES autorise desormais plusieurs positions pour un meme signataire :
appelez addSignaturePosition() autant de fois que necessaire avec le meme
signerIndex.
Notes :
signerIndexest optionnel et 100% retrocompatible : sans lui, le mapping positionnel historique (1 position par signataire dans l'ordre) reste applique.- Combinable avec
documentIndex(multi-document) : un signataire peut signer sur plusieurs documents du bundle.
Blocs personnalises (paraphe + mentions + date) — v2.12.0
Notes :
- Les 3 champs sont optionnels et 100% retrocompatibles avec les payloads pre-v2.12.0.
- Chaque setter accepte un tableau associatif (snake_case) OU un DTO type. Les DTO valident defensivement les valeurs au constructeur.
BlockPosition::pageaccepte un entier (1-indexe) pour les mentions ; pourinitialsBlock/dateBlock, la chaine'last'est aussi acceptee.
Client Dashboard (Bearer token)
Pour les operations via le dashboard utilisateur:
Onboarder un nouveau partenaire (SuperPDP OAuth2)
Le flow d'onboarding intègre SuperPDP pour gérer l'inscription, le KYB et la vérification d'identité de vos utilisateurs dans une popup. Une fois le flow complété, Scell provisionne automatiquement un tenant pour l'utilisateur.
| Méthode | Endpoint | Description |
|---|---|---|
createSession(array $input) |
POST /onboarding/sessions |
Créer une session d'onboarding |
getSession(string $id) |
GET /onboarding/sessions/:id |
Consulter le statut d'une session |
getSuperPDPAuthorizeUrl(string $sessionId) |
POST /onboarding/superpdp/authorize |
Obtenir l'URL OAuth2 SuperPDP |
superpdpCallback(string $sessionId, string $code, string $state) |
POST /onboarding/superpdp/callback |
Finaliser l'enrôlement après redirect |
Gerer les factures entrantes (fournisseurs)
Telecharger des fichiers
Gerer les sub-tenants
| Méthode | Endpoint | Description |
|---|---|---|
superpdpAuthorize(string $id) |
POST /tenant/sub-tenants/:id/superpdp-authorize |
Démarrer un flow OAuth2 SuperPDP pour un sub-tenant sans access token ({ authorize_url, state }) |
getResumeUrl(string $id) |
POST /tenant/sub-tenants/:id/resume-url |
Régénérer une URL signée de reprise d'onboarding (7 jours) |
superpdpDisconnect(string $id) |
POST /tenant/sub-tenants/:id/superpdp-disconnect |
(v3.1.0) Révoquer les tokens SuperPDP du sub-tenant et repasser onboarding_status à pending_superpdp. Les factures déjà émises restent immuables (ISCA) ; les futures B2B passent en mode papier jusqu'à reconnexion. Retourne le SubTenantSummary |
superpdpReconnect(string $id) |
POST /tenant/sub-tenants/:id/superpdp-reconnect |
(v3.1.0) Déconnexion suivie d'une nouvelle authorize_url en un seul appel. Retourne SuperPDPAuthorizeUrl |
superpdpWidgetToken(string $id, bool $reset = false) |
POST /tenant/sub-tenants/:id/superpdp-widget-token |
(v3.1.0) Émettre un jeton signé (URL signée, scopée à UN sub-tenant, 24 h, anti-IDOR HMAC) pour le web component <scell-onboarding mode="superpdp" resume-token="...">. $reset = true déconnecte avant d'émettre le jeton |
Factures pour les sub-tenants
Conformite fiscale (ISCA)
Documents de conformité ISCA
Statistiques et facturation
Gerer les avoirs (Credit Notes)
Resolution TVA cross-border (v2.18.0)
Avant d'emettre une facture vers un client etranger, interrogez le moteur de regles TVA pour determiner la categorie applicable (autoliquidation, hors-champ, taux reduit, etc.) :
VatCategory helpers (enum Scell\Sdk\Enums\VatCategory) :
defaultRate()— taux FR par defaut (ex: 20.0 pour STANDARD, 0.0 pour REVERSE_CHARGE)en16931Code()— code XML EN16931 (S / Z / E / AE / O)exemptionReason()— raison si taux nul, null sinon
Integration Laravel
Installation
Le SDK supporte l'auto-discovery Laravel. Publiez la configuration:
Configuration (.env)
Utilisation avec Facades
Controller de Webhook
Injection de dependances
Echeancier de paiement (Payment Schedule)
Associez un echeancier d'acomptes a un devis et convertissez chaque ligne en facture acompte.
Branding (Marque tenant et sub-tenant)
Personnalisez le logo, la couleur primaire et les textes des emails et PDFs emis.
Gestion des erreurs
Exceptions metier specifiques (v2.13.0+)
Types et Enums
Le SDK utilise des enums PHP 8.2+ pour les valeurs predefinies:
Configuration avancee
Tests
API Reference
ScellClient (Bearer token)
| Resource | Description |
|---|---|
invoices() |
Gestion des factures electroniques (+ depositGroups()/depositGroup() pour les deals multi-factures, v3.5.0) |
signatures() |
Gestion des signatures electroniques |
companies() |
Gestion des entreprises |
products() |
Catalogue produits/services (CRUD, scope tenant + sub_tenant) |
productCategories() |
Categories du catalogue produits (CRUD) |
balance() |
Consultation du solde |
webhooks() |
Gestion des webhooks |
branding() |
Configuration marque tenant (logo, couleur, textes emails, upload direct, apercu avec overrides) |
documents() |
Apercu HTML non persiste d'un document en cours de saisie |
invoiceTemplates() |
Templates de personnalisation factures/avoirs (CRUD, default, logo, derive-colors email + facture, preview, v3.5.0) |
invoiceMentions() |
Assistant de mentions legales de facture : assistant() + preview() (v3.5.0) |
ScellApiClient (API Key)
| Resource | Description |
|---|---|
invoices() |
Factures (builder, download, audit trail, sendByEmail, depositGroups()/depositGroup() v3.5.0) |
signatures() |
Signatures (builder, download, audit trail) |
subTenants() |
Gestion des sub-tenants (CRUD, recherche) |
tenantInvoices() |
Factures des sub-tenants (create, submit, update) |
directInvoices() |
Factures directes (create, bulk operations) |
incomingInvoices() |
Factures entrantes (accept, reject, markPaid) |
creditNotes() |
Avoirs (create, send, download) |
fiscal() |
Conformite fiscale ISCA (integrite, clotures, FEC) |
stats() |
Statistiques (overview, monthly, par sub-tenant) |
billing() |
Facturation plateforme (invoices, usage, top-up) |
quotes() |
Devis (builder, send, convert, echeancier, paymentSchedule()) |
products() |
Catalogue produits/services (CRUD, scope tenant + sub_tenant) |
productCategories() |
Categories du catalogue produits (CRUD) |
branding() |
Configuration marque tenant + sub-tenant (logo, couleur, emails, upload direct, apercu avec overrides) |
documents() |
Apercu HTML non persiste d'un document en cours de saisie |
invoiceTemplates() |
Templates de personnalisation factures/avoirs (CRUD, default, logo, derive-colors email + facture, preview, v3.5.0) |
invoiceMentions() |
Assistant de mentions legales de facture : assistant() + preview() (v3.5.0) |
ScellTenantClient (Multi-Tenant Partner)
ScellTenantClient API Reference
| Resource | Methods |
|---|---|
| Direct methods | me(), update(data), balance(), stats(), regenerateKey() |
subTenants() |
list(), create(data), get(id), update(id, data), delete(id), findByExternalId(externalId) |
directInvoices() |
list(filters), create(data), bulkCreate(invoices), bulkSubmit(ids), bulkStatus(ids) |
directCreditNotes() |
list(filters), create(data), get(id), send(id), update(id, data), download(id), remainingCreditable(invoiceId) |
invoices() |
listForSubTenant(subId, filters), createForSubTenant(subId, data), get(id), update(id, data), delete(id), submit(id), status(id), remainingCreditable(id) |
creditNotes() |
listForSubTenant(subId, filters), createForSubTenant(subId, data), get(id), update(id, data), delete(id), send(id), download(id), remainingCreditable(invoiceId) |
incomingInvoices() |
listForSubTenant(subId, filters), create(subId, data), get(id), accept(id, data), reject(id, reason, code), markPaid(id, ref, data) |
signatures() (v2.7.0+) |
list(filters), get(id), listForSubTenant(subId, filters), getForSubTenant(subId, id) — read-only, scope tenant URL-nested. Pour les writes (create/remind/cancel/download/auditTrail), utiliser ScellApiClient::signatures(). |
fiscal() |
compliance(), integrity(params), integrityHistory(params), integrityForDate(date), closings(params), performDailyClosing(data), fecExport(params), attestation(year), attestationDownload(year), entries(params), killSwitchStatus(), killSwitchActivate(data), killSwitchDeactivate(data), anchors(params), rules(params), ruleDetail(key), ruleHistory(key, params), createRule(data), updateRule(id, data), exportRules(params), replayRules(data), forensicExport(params) |
billing() |
invoices(params), showInvoice(id), downloadInvoice(id), usage(params), topUp(data), confirmTopUp(data), transactions(params) |
detailedStats() |
overview(params), monthly(params), subTenantOverview(subId, params) |
Webhook Events
| Event | Description |
|---|---|
invoice.created |
Facture creee |
invoice.validated |
Facture validee et conforme |
invoice.transmitted |
Facture transmise au PDP |
invoice.accepted |
Facture acceptee par le destinataire |
invoice.rejected |
Facture rejetee |
invoice.error |
Erreur de traitement de la facture |
invoice.incoming.received |
Facture entrante recue |
invoice.incoming.accepted |
Facture entrante acceptee |
invoice.incoming.rejected |
Facture entrante rejetee |
invoice.incoming.disputed |
Facture entrante contestee |
invoice.incoming.paid |
Facture entrante payee |
signature.created |
Signature creee |
signature.waiting |
Signature en attente des signataires |
signature.signer_completed |
Un signataire a signe |
signature.signed |
Tous les signataires ont signe |
signature.completed |
Tous les signataires ont signe |
signature.refused |
Signature refusee |
signature.expired |
Signature expiree |
signature.error |
Erreur de traitement de la signature |
balance.low |
Solde bas (seuil configurable) |
Requirements
- PHP 8.2+
- Guzzle 7.0+
- Laravel 11/12 (optionnel)
Contributing
Les contributions sont bienvenues. Merci de:
- Fork le repository
- Creer une branche (
git checkout -b feature/amazing-feature) - Commit les changements (
git commit -m 'Add amazing feature') - Push sur la branche (
git push origin feature/amazing-feature) - Ouvrir une Pull Request
Code Standards
- PSR-12 pour le style de code
- PHPStan niveau 8 minimum
- Tests pour toute nouvelle fonctionnalite
Security
Si vous decouvrez une vulnerabilite, merci d'envoyer un email a [email protected] plutot que d'ouvrir une issue publique.
Changelog
Voir CHANGELOG.md pour l'historique des versions.
License
MIT License. Voir LICENSE pour plus d'informations.
Support
- Documentation: docs.scell.io
- Email: [email protected]
- Issues: GitHub Issues