OneSpan Sign Developer : Notification d'événements par rappel - Python

Duo Liang,

Python est l'un des langages de programmation polyvalents les plus populaires pour les applications web, le développement de logiciels et les domaines de l'interface graphique de bureau.

Dans le cadre de la série de blogs sur les notifications d'événements par rappel, nous allons aujourd'hui configurer une application Web Python pour qu'elle serve d'auditeur de rappel et réponde aux notifications d'événements OneSpan Sign. Sans plus attendre, commençons !

La notification d'événement par rappel en action

Avant de commencer un projet Python, assurez-vous d'avoir effectué les opérations suivantes :

  • Enregistrez-vous pour les notifications d'événements: Avant que le système OneSpan Sign puisse vous notifier un événement, vous devez activer les notifications. Suivez ce guide des fonctionnalités pour savoir comment vous inscrire. Dans notre exemple, nous nous enregistrerons simplement à partir du portail Web.
  • Installez Python: Python est un langage de programmation interprété, orienté objet et multiplateforme qui convient parfaitement à une application web. L'exemple de code utilisé dans ce blog est basé sur Python 3.7.
  • Téléchargez Ngrok.

Le Code

Téléchargez le code source complet. N'hésitez pas à copier les fichiers nécessaires directement dans votre projet existant.

L'entrée principale du projet est le fichier callbackListener.py, où nous démarrons le serveur et écoutons le port 4449 pour les connexions.

app = Flask(__name__)
if __name__ == '__main__' :
    # Exécutez le serveur d'application sur localhost:4449
app.run('localhost', 4449)

Nous allons exposer une route API pour gérer les demandes de rappel envoyées par OneSpan Sign. Voyez le code ci-dessous pour traiter la notification d'événement.

@app.route('/callback', methods=['POST'])
def callback() :
    .....
return json.dumps({'success':True}), 200, {'ContentType':'application/json'} 

Une fois la transaction terminée, OneSpan Sign envoie une requête POST à l'URL enregistrée avec l'exemple suivant de charge utile JSON :

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

Le code correspondant pour décompresser cette requête ressemble à ceci :

    callbackKey = request.headers.get('Authorization')
    callbackPayload = json.loads(request.data)
    print('callback key : '+ callbackKey)
    print('callback body : '+ json.dumps(callbackPayload))

    eventName = {
        'PACKAGE_COMPLETE' : packageComplete,
        'PACKAGE_ARCHIVE' : packageArchive,
        'PACKAGE_DECLINE' : packageDecline,
    }
    eventName[callbackPayload['name']](callbackPayload)

Dans notre logique commerciale principale, nous téléchargerons simplement les documents signés si le nom de l'événement est égal à "PACKAGE_COMPLETE", sur la base des données transmises par la demande de rappel :

def packageComplete(callbackPayload) :   
    if not os.path.exists(filePath) :
        os.makedirs(filePath)  

    filename = packageId + '.zip' 
    file_path = os.path.join(filePath, filename)
    headers = { 'Authorization' : 'Basic ' + apiKey}
    r = requests.get(apiUrl + '/packages/' + packageId + '/documents/zip', headers, stream=True)
    if r.ok :
        print("saving to", os.path.abspath(file_path))
        with open(file_path, 'wb') as f :
            for chunk in r.iter_content(chunk_size=1024 * 8) :
                if chunk :
                    f.write(chunk)
                    f.flush()
                    os.fsync(f.fileno())
    else : 
        print("Le téléchargement a échoué : code d'état {}\n{}".format(r.status_code, r.text))

    return

Effectuez un test

Lancez votre serveur local avec XAMPP. Ensuite, ouvrez une invite de commande et changez le répertoire à l'endroit où vous avez sauvegardé votre exécutable ngrok. Entrez la commande suivante :

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

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

Enfin, créez, envoyez et complétez un paquet test. Vous devriez pouvoir visualiser les documents signés sous forme de fichier zippé à l'emplacement de votre choix. Au moment où OneSpan Sign envoie une notification de rappel à votre auditeur, vous verrez le message ci-dessous dans votre console de sortie.

10-19-1

Si vous avez des questions sur ce blog ou sur l'intégration de OneSpan Sign dans votre application, visitez les forums de la communauté des développeurs. Vos commentaires nous intéressent !

Parcourez l'intégralité de la série de blogs :