OneSpan Sign Developer: Intégrer avec Oracle PL / SQL - Partie 4

Duo Liang, septembre 18, 2019

Au cours de la première partie, la deuxième partie, et la troisième partie de cette série de blog, nous avons couvert plusieurs exemples d'intégration OneSpan Sign Restful API avec Oracle PL / SQL. Ces exemples comprennent la création d'une transaction électronique ainsi que le téléchargement de documents signés.

Dans ce blog, nous aborderons les deux défis techniques restants de cette série. La première est de savoir comment analyser et extraire l'information de la charge utile JSON, et la seconde est de savoir comment implémenter la remise d'erreurs dans la programmation PL/SQL. Sans plus tarder, commençons !

Parse JSON dans PL/SQL

OneSpan Sign vous fournit une API entièrement reposante, donc afin de traiter les informations contenues dans le corps du message dans le format JSON, il est très nécessaire pour nous d'étudier comment y parvenir dans PL/ SQL.

Dans cette section, je vais vous montrer comment tirer parti d'un Oracle intégré dans la classe JSON_OBJECT_T à gérer avec des cordes JSON. Apprenons d'abord quelques utilisations de base :

--Déclarer :
l_obj JSON_OBJECT_T;
--Pour initialiser
l_obj : JSON_OBJECT_T ('employee_no':9999 ');
--Pour obtenir une valeur d'attribut
oss_package_id_string : l_obj.get_string ('id');

Avec cela, vous êtes déjà en mesure de gérer des structures JSON simples, telles que l'extraction de l'ID paquet à partir d'une charge utile. Ensuite, nous allons démontrer un code de travail pour créer une transaction et de récupérer l'ID du paquet de réponse. 

créer ou remplacer la procédure create_package
 Est
  l_http_request utl_http.req;
  l_http_response utl_http.resp;
  l_response_text VARCHAR2 (32767);
  l_obj JSON_OBJECT_T;

  oss_api_url varchar2(50) : 'https://sandbox.esignlive.com/api';
  oss_payload varchar2(4000) : '''nom":"package créé à partir d'oracle'';
  oss_api_key varchar2(50) : your_api_key';

Commencer
  l_http_request : utl_http.begin_request (oss_api_url '/paquets', 'POST', HTTP/1.1');
  utl_http.set_header (l_http_request, 'agent utilisateur', 'mozilla/4.0'); 
  utl_http.set_header (l_http_request, 'type de contenu', 'application/json'); 
  utl_http.set_header (l_http_request, 'Authorization', 'Basic' ' ' ' oss_api_key ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ' 
  utl_http.set_header (l_http_request, 'Content-Length', longueur (oss_payload));
 
  utl_http.write_text (l_http_request, oss_payload);
  l_http_response : utl_http.get_response (l_http_request);

  UTL_HTTP.read_text (l_http_response, l_response_text);
  l_obj : JSON_OBJECT_T (l_response_text);
  dbms_output.put_line (l_obj.get_string ('id'));

fin create_package;
/

Après l'exécution de la procédure, attendez-vous à voir l'ID paquet imprimé dans votre console comme l'image ci-dessous:9-18-1

Sur la base de ce code, vous pouvez analyser les charges utiles JSON à partir d'autres appels API en fonction de vos propres cas d'utilisation et du flux de travail. Consultez ce tutoriel pour plus d'informations concernant le support JSON dans PL/SQL. 

Manipulation d'erreurs

En ce qui concerne la gestion des erreurs, nous aborderons deux aspects : comment recevoir le message d'erreur de OneSpan Sign lorsque votre appel API a échoué et comment introduire généralement le mécanisme de piégeage des erreurs dans PL/SQL pour aider à isoler la cause du problème lors du dépannage.

Nous allons commencer par la façon de recevoir le message d'erreur OneSpan Sign. Voici le code que nous avons utilisé pour récupérer la charge utile de réponse à partir d'une API:

  l_http_response : utl_http.get_response (l_http_request);
  dbms_output.put_line ('Code de statut de réponse': ' l_http_response.status_code);
  dbms_output.put_line ('Réponse' Reason Phrase: ' 'l_http_response.reason_phrase);
  dbms_output.put_line('Réponse' HTTP Version: ' 'l_http_response.http_version);
 
  pour i en 1 .. boucle utl_http.get_header_count(l_http_response)
    utl_http.get_header (l_http_response, i, l_response_header_name, l_response_header_value);
    dbms_output.put_line('Réponse' ' l_response_header_name ': ' || l_response_header_value);
  boucle d'extrémité;
 
  utl_http.read_text (l_http_response, l_response_body, 32767);
  dbms_output.put_line ('Corps de réponse');
  dbms_output.put_line(l_response_body);

Dans PL/SQL, quel que soit le code de réponse, l'instance UTL_HTTP renvoie toujours la réponse HTTP, de sorte que vous n'avez pas besoin de faire la gestion de flux d'erreurs supplémentaires. 

Avec ce code, si vous avez fait l'appel API avec succès, vous verrez l'état "200" avec une charge utile de réponse appropriée dans le corps du message:9-18-2

Le message d'erreur s'affiche également. Combiné à la première section de la manipulation JSON, vous pouvez stocker directement la chaîne JSON ou extraire le message d'erreur de la charge utile et le stocker dans les journaux.9-18-3

La structure de bloc de base dans PL/SQL est commencer - fin - exception, et chaque bloc peut être niché dans un autre bloc. Cela vous permet de gérer les exceptions séparément et d'organiser la logique métier en fonction du résultat courant de chaque bloc. Par exemple, vous devez fermer la connexion HTTP et d'autres ressources pour éviter de les garder ouvertes.

Commencer
  l_http_request : utl_http,begin_request(
                      url oss_api_url '/paquets',
                      méthode 'POST',
                      http_version 'HTTP/1.1'
                    );
    ......
Exception
  quand d'autres alors
    si l_http_request.private_hndl n'est pas nul, alors
      utl_http.end_request (l_http_request);
    fin si;
 
    si l_http_response.private_hndl n'est pas nul alors
      utl_http.end_response (l_http_response);
    fin si;
    augmenter;
fin

Problèmes de dépannage

Si vous rencontrez des problèmes, en fonction du message d'erreur, n'oubliez pas de vérifier votre connexion avec OneSpan Sign. Ensuite, réduire la cause du problème avec le piégeage des erreurs. Si elle est due à une défaillance de l'API, vous serez en mesure d'attraper et d'enregistrer le message d'erreur comme démontré ci-dessus. Si vous ne trouvez toujours pas la cause, vous êtes toujours les bienvenus pour faire un post sur notre Communauté De développeurs ou pour créer un ticket de support!

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