Développeur de signes OneSpan : Création d'un package notarié - Partie 3

Duo Liang, juillet 10, 2019

Dans la partie 1 de cette série de blog, nous avons couvert les étapes fondamentales nécessaires pour faire usage du système eNotary. Ensuite, dans la partie 2, nous nous sommes concentrés sur les pratiques de pari à suivre lors de l'intégration d'eNotary dans votre application.

Maintenant, dans la partie 3 de cette série de blog en cours, nous allons inclure un exemple de travail de l'outil dans C pour montrer comment créer un paquet notarié et ensuite générer le lien de signature programmatique.

Ci-dessous, nous avons inclus une capture d'écran du document notarié intégré dans un iFrame. En suivant ces instructions, vous serez en mesure de faire de même au sein de votre déploiement OneSpan Sign. 7-10-2

Créer un paquet notarié

La première étape de ce flux de travail en deux étapes consiste à créer un package notarié en combinant les méthodes SDK et REST. Vous pouvez télécharger le code complet ici

Étape1:

La première chose que vous voulez faire est d'ajouter des signataires, télécharger des documents, ajouter des signatures et des champs pour les signataires non notaires, et déclencher le paramètre notarié lors de la création du paquet en utilisant les fonctions SDK ci-dessous.

                DocumentPackage pkg1 - PackageBuilder.NewPackageNamed("Créer le paquet notaire par .NET SDK - " - System.DateTime.Now)
                                                               . WithSigner(SignerBuilder.NewSignerWithEmail(notaryEmail)
                                                                       . WithFirstName ("Duo")
                                                                       . WithLastName ("Liang")
                                                                       . WithCustomId (notaryRoleId)
                                                                       )
                                                               . WithSigner(SignerBuilder.NewSignerWithEmail(signerEmail)
                                                                       . WithFirstName ("Marry")
                                                                       . WithLastName ("Doe")
                                                                       . WithCustomId ("demandeur")
                                                                       )
                                                               . WithDocument (DocumentBuilder.NewDocumentNamed(«document 1»)
                                                                       . FromFile ("P: 'Documents'sample_contract.pdf")
                                                                       . WithId (notaryDocumentId)
                                                                       . WithSignature (SignatureBuilder.SignatureFor(signerEmail). AtPosition (100 100)
                                                                            . WithField (FieldBuilder.SignatureDate(). AtPosition (100 200)))
                                                                       )
                                                               . WithNotarized (vrai)
                                                               . Build ();

                PackageId createPackageOneStep - eslClient.CreatePackageOneStep(pkg1);
                Debug.WriteLine("package id: " createPackageOneStep);

Étape2: 

Une fois que vous avez construit l'objet DocumentPackage, définir l'ID de rôle notaire en utilisant la méthode REST.

        set private voidNotaryRoleId (String packageId, String notaryId)
            httpClient httpClient - nouveau httpClient();
            httpClient.DefaultRequestHeaders.Authorization - new AuthenticationHeaderValue ("Basic", API_KEY);
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json");
            mise à jour des cordesPackageString ' "notaryRoleId" : "" - notaireId " " " ";
            StringContent jsonUpdatePackageContent - nouveau StringContent (updatePackageString, Encoding.UTF8, "application/json");

            var réponse - httpClient.PutAsync (nouveau Uri(API_URL) - "/packages/" - packageId, jsonUpdatePackageContent). Résultat;
            si!response( . IsSuccessStatusCode)
            {
                jeter une nouvelle exception (réponse. Content.ReadAsStringAsync(). Résultat);
            }
        }
    }

Étape3: 

Enfin, ajoutez des signatures et des champs de notaire pour le rôle de notaire. De là, vous êtes prêt à envoyer votre colis.

                Signature notarySignature - SignatureBuilder.SignatureFor(notaryEmail)
                         . AtPosition(400, 100)
                         . WithField (FieldBuilder.CustomField("NotaryLicenseExpiryDate")
                             . WithStyle (FieldStyle.UNBOUND_CUSTOM_FIELD)
                             . AtPosition (400 200)
                             )
                          . WithField (FieldBuilder.CustomField("NotaryName")
                             . WithStyle (FieldStyle.SEAL)
                             . AtPosition (400, 300)
                          )
                         . Build ();
                eslClient.ApprovalService.AddApproval(eslClient.GetPackage(createPackageOneStep), notaryDocumentId, notarySignature);

Notez qu'il existe deux types de domaines notaires: "Régulier" et "Seal". Par exemple, voir le code de compétence notaire ci-dessous dans le format JSON d'un champ de notaire régulier :

{
                    "id": "NotaryJurisdiction",
                    "traductions": [
                        {
                            "description": "NotaryJurisdiction",
                            "langue": "en",
                            "id": "",
                            "données": nul,
                            "nom": "NotaryJurisdiction"
                        }
                    ],
                    "données": nul,
                    "catégorie": "NOTARY",
                    "type": "REGULAR",
                    "valeur": "Montréal",
                    "nom": ""
                }

Le code CMD correspondant peut être représenté comme :

                         . WithField (FieldBuilder.CustomField("NotaryLicenseExpiryDate")
                             . WithStyle (FieldStyle.UNBOUND_CUSTOM_FIELD)
                             . AtPosition (400 200)
                             )

De même, pour un champ de notaire Sceau JSON comme ci-dessous:

                {
                    "id": "STAMP",
                    "traductions": [
                        {
                            "description": "STAMP",
                            "langue": "en",
                            "id": "",
                            "données": nul,
                            "nom": "STAMP"
                        }
                    ],
                    "données": nul,
                    "catégorie": "NOTARY",
                    "type": "SEAL",
                    "valeur": "20190704Test1'nTest2'nTest3",
                    "nom": ""
                }

La bonne façon de coder en action est :

                          . WithField (FieldBuilder.CustomField("NotaryName")
                             . WithStyle (FieldStyle.SEAL)
                             . AtPosition (400, 300)
                          )

Générer un lien de signature notarié

Comme nous l'avons vu dans la partie 2, les notaires de votre organisation qui ont déjà acquis leurs clés API peuvent éviter le processus de connexion en utilisant un jeton d'expéditeur à la place. En supposant qu'il s'agit de notre cas d'utilisation et nous voulons intégrer la signature notariée dans un iFrame, cette section comprend les étapes nécessaires. 

Pour générer un lien de cérémonie de signature, créez un jeton utilisateur pour votre notaire. Cet objectif peut être atteint en suivant les étapes 4 à 6.

Etape 4: 

Vous trouverez ci-dessous un exemple de code personnalisé dans la méthode REST pour générer l'ID de l'expéditeur par sender Email.

        private String getSenderIdByEmail (String senderEmail)
            httpClient httpClient - nouveau httpClient();
            httpClient.DefaultRequestHeaders.Authorization - new AuthenticationHeaderValue ("Basic", API_KEY);
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json");

            Url de chaîne - nouveau Uri (API_URL) - "/compte/senders?search" - senderEmail;
            var réponse - httpClient.GetAsync(url). Résultat;
            JObject responseJSON - JObject.Parse(réponse. Content.ReadAsStringAsync(). Résultat);
            var senders - responseJSON["résultats"];

            foreach (expéditeur var en expéditeurs)
            {
                si (sender["email"]. ToString() 'senderEmail'
                    renvoyer l'expéditeur ["id"]. ToString() ;
                }
            }
            retour nul;
        }

Étape 5: 

Ensuite, récupérez la clé API pour cet expéditeur spécifique à l'aide de l'ID d'expéditeur de la personne obtenu à l'étape 4. Cela est possible, car le notaire est également un expéditeur sous notre compte principal dans ce scénario particulier.

        chaîne privée getSenderApiKeyById (String senderId)
        {
            httpClient httpClient - nouveau httpClient();
            httpClient.DefaultRequestHeaders.Authorization - new AuthenticationHeaderValue ("Basic", API_KEY);
            httpClient.DefaultRequestHeaders.Add("Accept", "application/json");

            Url de chaîne - nouveau Uri (API_URL) - "/compte/senders/" - senderId '/apiKey";
            var réponse - httpClient.GetAsync(url). Résultat;
            JObject responseJSON - JObject.Parse(réponse. Content.ReadAsStringAsync(). Résultat);
            réponse de retourJSON["apiKey"]. ToString();
        }

Étape 6:

Après la clé API, nous pouvons générer un jeton utilisateur temporaire pour cet utilisateur et l'utiliser pour autoriser la cérémonie de signature du notaire.

                EslClient client2 - nouveau EslClient (senderApiKey, API_URL);
                string notaryUserToken - client2. AuthenticationTokenService.CreateUserAuthenticationToken();

Étape 7:

                signature de chaîneLink 'BASE_API_URL'/auth?authenticationToken'''''notaryUserToken ''target''' BASE_API_URL '''packages/'''createPackageOneStep.Id '/sign?iframe'true";

Enfin, créez le lien de signature notarié ci-dessous qui repose sur un jeton utilisateur au lieu d'un jeton de session de portail Web. Il a également spécifié la page cible après la connexion en tant que notaire. 

Si vous avez des questions concernant ce blog ou toute autre chose concernant l'intégration de OneSpan Sign dans votre application, visitez les Forums communautairesdes développeurs . Vos commentaires sont importants pour nous!

OneSpan Sign Developer Community

OneSpan Sign Developer Community

Rejoignez la communauté OneSpan Sign Developer! Forums, blogs, documentation, téléchargements SDK, et plus encore.

Joignez-vous aujourd'hui