OneSpan Sign Developer: Notification d'événement de rappel - Partie 4

Duo Liang, mai 15, 2019

Dans l'entrie précédente dans cette série, nous avons présenté comment configurer une application Web Java Spring Boot et comment écouter les notifications de rappel OneSpan Sign. Dans ce blog, nous adviendrons le même objectif avec C dans un projet d'application d'API Web ASP.NET en suivant les flux recommandés couverts dans la partie 2.

Notification d'événement de rappel en action

Avant de commencer le projet ASP.NET Web API Application, assurez-vous de compléter les éléments suivants :

- Inscrivez-vous aux notificationsd'événements : Avant que le système oneSpan Sign ne puisse vous informer d'un événement, vous devez activer les notifications. Suivez ce guide de fonctionnalités pour apprendre à vous inscrire. Dans notre exemple, nous nous inscrirons simplement à partir du portail Web.

Visual Studio: Toute version du Visual Studio de Microsoft fonctionnera. Dans notre exemple, nous allons utiliser Visual Studio Community 2019 que vous pouvez télécharger gratuitement à partir d'ici.

Téléchargez OneSpan Sign's .NET SDK: Vous aurez également besoin de OneSpan Sign's .NET SDK. Téléchargez et dézez le SDK à l'emplacement de votre choix.

Télécharger Ngrok

Le code

Le code source complet peut être trouvé ici. N'hésitez pas à importer directement la solution ou à copier toutes les classes nécessaires à votre projet existant.

Nous aurons besoin d'un contrôleur API pour traiter les demandes de rappel envoyées par OneSpan Sign. Vous trouverez ci-dessous le code pour le CallbackController pour traiter la notification d'événement.

    classe publique CallbackController : ApiController
    {
        POST api/
        public ActionResult Post (JObject jsonResult)
        {
            #region "vérifier la clé de rappel le cas échéant"
            string callbackKey - Request.Headers.GetValues ("Autorisation"). Tout d'abord();
            Debug.WriteLine("clé de rappel: "CallbackKey);
            #endregion

            #region "Extraire les données de la demande"
            nom de chaîne ' jsonResult["nom"]. ToString();
            session de cordesUser 'jsonResult["sessionUser"]. ToString();
            forfait de cordesId ' jsonResult["packageId"]. ToString();
            message de chaîne ' jsonResult["message"]. ToString();
            string documentId 'jsonResult["documentId"]. ToString();
            chaîne crééeDate ' jsonResult["createdDate"]. ToString();

            OssCallbackVo ossCallbackVo - nouveau OssCallbackVo
            {
                Nom et nom,
                SessionUser - SessionUser,
                PackageId - packageId,
                Message et message,
                DocumentId et documentId,
                CréationDate - CréationDate
            };

            Debug.WriteLine ("charge utile de rappel: " jsonResult.ToString());
            #endregion

            #region "rappel de processus"
            OssCallbackHandler callbackHandlder - nouveau OssCallbackHandler();
            Task.Run (async () - attendre callbackHandlder.ProcessOssCallback(ossCallbackVo));
            #endregion

            retour de nouveaux httpStatusCodeResult(200);
        }
    }

Dans le code ci-dessus, toute demande POST ciblant l'itinéraire "/api/Callback" sera traitée par notre contrôleur.

Une fois que tous les documents d'un paquet ont été signés et le paquet complété, OneSpan Sign fera une demande POST à l'URL enregistrée avec l'exemple suivant Charge utile JSON: 

{
  "@class": "com.silanis.esl.packages.event.ESLProcessEvent",
  "nom": "PACKAGE_COMPLETE",
  "sessionUser": "0787be84-f095-44c7-ba00-787093df86fc",
  "packageId": "KHiRfOXgKK0gpVWwwpFOSNy6o34",
  "message": nul,
  "documentId": nul
}

Note:

Le "sessionUser" ci-dessus se réfère à l'ID de signataire, il est donc recommandé de définir l'ID personnalisé (dans SDK) ou l'ID de signataire (dans REST) lors de la création du signataire et le stocker dans votre base de données locale.

Ensuite, nous distribuerons à différentes fonctions de service en fonction de l'événement de rappel. Une classe de service avec méthode asynchrone a été utilisée pour gérer cette logique métier.

    classe publique OssCallbackHandler
    {
        Processus de tâche publiqueOssCallback(OssCallbackVo ossCallbackVo)
        {
            commutateur (ossCallbackVo.Name)
            {
                cas C.OssCallbackEvents.PACKAGE_CREATE:
                    pause;
                cas C.OssCallbackEvents.PACKAGE_ACTIVATE:
                    OssCallback_PACKAGE_ACTIVATE(ossCallbackVo);
                    pause;
                cas C.OssCallbackEvents.PACKAGE_DEACTIVATE:
                    pause;
                cas C.OssCallbackEvents.PACKAGE_READY_FOR_COMPLETION:
                    pause;
                cas C.OssCallbackEvents.PACKAGE_COMPLETE:
                    OssCallback_PACKAGE_COMPLETE(ossCallbackVo);
                    pause;
	        ......
            }

            retour Task.CompletedTask;
        }

        OssCallback_PACKAGE_ACTIVATE de vide privé (OssCallbackVo ossCallbackVo)
        {
        }

        OssCallback_PACKAGE_COMPLETE de vide privé (OssCallbackVo ossCallbackVo)
        {
            manipuler l'état du paquet dans votre DB

            télécharger le document
            EslClient eslClient - nouveau EslClient(C.OSS. API_KEY, C.OSS. API_URL);
            PackageId pkgId - nouveau PackageId(ossCallbackVo.PackageId);
            byte[] contenu - eslClient.DownloadZippedDocuments(pkgId);
            fichier de cordesLocation ' C.SIGNED_DOCUMENTS_STORAGE_PATH '' ' ' ' ' ' ' ' ' yyyy_MM_dd ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '

            Debug.WriteLine ("fichier enregistrer le chemin: " ' fileLocation);
            File.WriteAllBytes(@fileLocation, contenu);            
        }
        ......
    }

Maintenant, nous avons déclaré toutes les fonctions de talon possible de gestion des événements de rappel dans notre code. Dans cet exemple, l'événement « PACKAGE_COMPLETE » a été surveillé et a déclenché la fonction de service correspondante. Puis eslClient a été utilisé pour télécharger les documents signés.

Enfin, toutes vos configurations liées au signe OneSpan sont stockées dans Constants.cs fichier. Il vous suffit d'ajuster avant d'exécuter le code.

Effectuer un test

Déboguer/Libérer votre projet en Studio Visuel. Ensuite, ouvrez une invite de commande et changez le répertoire à l'endroit où vous avez enregistré votre Ngrok exécutable. Entrez la commande suivante :

ngrok http [port] -host-header"localhost:[port]"

Ensuite, connectez-vous à votre compte OneSpan Sign, naviguez vers la page Admin et modifiez le domaine de votre URL de rappel.

Enfin, créez, envoyez et remplissez un package de test. Vous devez être en mesure de voir les documents signés comme un fichier zippé à l'emplacement de votre choix configuré à Constants.cs fichier. Dès que OneSpan Sign envoie une notification de rappel à votre auditeur, vous verrez le message ci-dessous sur votre console de sortie. 5-15-1

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!

Parcourir les autres entrées dans cette série de blog:
Notification d’événement de rappel - Partie1
Notification d’événement de rappel - Partie2
Notification d'événement de rappel - Partie3

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