Universign est un outil français permettant de mettre en place des signatures électroniques sur vos documents utilisé par des grandes sociétés comme SFR, Total, AXA, SwissLife et Les Echos. Ils annoncent mensuellement plus de 1 000 000 de signatures électroniques.

Universign est particulièrement pertinant dans les secteurs de signature de document comme les assurances, les mutuelles ou la gestion de patrimoine. Il respecte strictement les aspects réglementaires entrés en vigueur le 1er juillet 2016 en instaurant un cadre européen en matière d’identification électronique et de services de confiance. Leur support est très rapide et très pertinent, ce qui en fait un outil de confiance.

Un de mes clients souhaitait connecter son formulaire d’inscription WordPress à Universign pour signer de manière professionnelle et automatisée ses devis. Il n’existait pas de librairie PHP qui fonctionne, c’est pourquoi j’ai décidé de mettre en place la mienne, inspirée grande par celle de Globalis (qui ne fonctionne plus).

Utiliser la librairie

Pour accéder au code source, voici le lien vers le GitHub : https://github.com/pierrebelin/universign

ou directement avec Composer :

composer require pierrebelin/universign

Découvrons ensemble comment utiliser la librairie (la documentation est aussi présente sur le repo Git).

Mettre vos identifiants

Pour connecter la librairie à votre compte Universign, il vous suffit de saisir votre adresse mail ainsi que le mot de passe de votre compte. Les informations seront utilisées pour envoyer le contenu de votre requête vers votre espace Universign.

$ACCOUNT_USER_MAIL = 'contact@pierrebelin.fr';
$ACCOUNT_USER_PASSWORD = 'xxxxxxxxx'; // Mettre votre mot de passe
$UNIVERSIGN_PROFILE = 'default';

Récupérer vos documents à signer

La première étape consiste à récupérer les fichiers qui seront à signer par vos clients.

$document = new TransactionDocument();
$document
    ->setContent(file_get_contents('path/to/file/file.pdf'))
    ->setName('Document name');

Il vous suffit de récupérer le contenu de votre fichier, au format PDF, et de lui attribuer un nom. Ce nom servira lorsque vous ou votre client voudrez télécharger le fichier.

Vous pouvez ajouter autant de documents que vous souhaitez, vous n’êtes pas limité à un seul.

$document1 = new TransactionDocument();
$document1
    ->setContent(file_get_contents('path/to/file/file.pdf'))
    ->setName('Nom du document');

$document2 = new TransactionDocument();
$document2
    ->setContent(file_get_contents('path/to/file/file2.pdf'))
    ->setName('Nom du document 2');
Mettre des documents SEPA

Il est possible de remplacer les documents écrits par des SEPA générés automatiquement par Universign en remplissant les informations du débiteur et du créditeur.

$sepaFrom = new SEPAThirdParty();
$sepaFrom
    ->setName('from')
    ->setAddress('this address')
    ->setPostalCode('69001')
    ->setCity('Lyon')
    ->setCountry('France');

$sepaTo = new SEPAThirdParty();
$sepaTo
    ->setName('to')
    ->setAddress('to address')
    ->setPostalCode('69002')
    ->setCity('Lyon')
    ->setCountry('France');

$sepa = new SEPAData();
$sepa
    ->setIcs('XXXXXXXXXXXXX')
    ->setIban('FR7616798000010000191892XXXX')
    ->setBic('TRZOFR21XXX')
    ->setDebtor($sepaFrom)
    ->setCreditor($sepaTo);

$document = new TransactionDocument();
$document
    ->setDocumentType(TransactionDocumentType::SEPA)
    ->setName('SEPA')
    ->setSEPAData($sepa);

Ajouter les champs de signature

La deuxième étape consiste à définir les champs où vos clients signeront sur les documents.

$signatureField = new SignatureField();
$signatureField->setPage(1)
    ->setX(50)
    ->setY(100);

Ajouter les signataires

Pour chaque signataire, saisissez les informations d’identités. L’adresse email et le numéro de téléphone serviront à valider l’identité du signataire.

$signer = new TransactionSigner();
$signer
    ->setFirstname('Pierre')
    ->setLastname('Belin')
    ->setEmailAddress('contact@pierrebelin.fr')
    ->setPhoneNum('0606060606')
    ->setSuccessURL('https://www.universign.eu/fr/sign/success/')
    ->setCancelURL('https://www.universign.eu/fr/sign/cancel/')
    ->setFailURL('https://www.universign.eu/fr/sign/failed/')
    ->addSignatureField($signatureField1); // you can add multiples times ->addSignatureField($signatureField2) etc...

Vous pouvez ensuite changer les URL de redirection pour choisir une page de votre site en cas de signature ou d’erreurs. Imaginez un cas où vous faites valider un devis, vous pourriez rediriger sur votre page de paiement pour que votre client commence à payer l’acompte pour votre projet.

Créer la requête d’envoi des données

La requête d’envoi centralise les signataires, les documents à signer et le processus mis en place pour les signatures.

$request = new TransactionRequest();
$request
    ->addSigner($signer) // you can add multiples times ->addSignatureField($signer2) etc...
    ->addDocument($document) // you can add multiples times ->addDocument($document2) etc...
    ->setProfile($UNIVERSIGN_PROFILE)
    ->setCustomId(uniqid()) // create your own ID to make easier to get later
    ->setMustContactFirstSigner(false)
    ->setFinalDocSent(true)
    ->setDescription("This is my description")
    ->setCertificateType(TransactionRequestCertificate::CERTIFICATE_SIMPLE)
    ->setLanguage(TransactionRequestLanguage::FRENCH)
    ->setHandwrittenSignature(true)
    ->setChainingMode(TransactionRequestChainingMode::CHAINING_MODE_WEB);

Pour connaître toutes les options possibles, n’hésitez pas à vos rendre sur la documentation d’Universign. Vous pouvez notamment ajouter des signatures manuelles, une identification avec une pièce d’identité pour sécuriser la signature de vos documents.

Le “customId” est très important pour vous permettre plus tard de télécharger les documents.

Envoyer la requête vers Universign

En ajoutant vos informations de connexion et la requête, votre requête peut être envoyé vers Universign.

$requester = new Requester($ACCOUNT_USER_MAIL, $ACCOUNT_USER_PASSWORD, false);
$requester->requestTransaction($request);

Récupérer les informations de la transaction

Vous obtiendrez 2 informations lorsque votre transaction est envoyée vers Universign : l’ID de la transaction et l’URL pour y accéder.

$transactionId = $response->getId();
$transactionUrl = $response->getUrl();

Télécharger les documents

Une fois les documents signés par l’ensemble des signataires, vous aurez la possibilité de les télécharger. Il existe 2 manières de le faire.

$response = $requester->getDocuments('TRANSACTIONID');
$response = $requester->getDocumentsByCustomId('CUSTOMID');

Soit à l’aide du “customId” que vous avez défini dans votre requête, soit grâce à l’identifiant de transaction que Universign retourne à la création de la transaction.

N’hésitez pas à me contacter pour utiliser la librairie !