/[openfoncier]/trunk/services/outgoing/messagesenderSoap.php
ViewVC logotype

Annotation of /trunk/services/outgoing/messagesenderSoap.php

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1320 - (hide annotations)
Wed Mar 6 15:17:45 2013 UTC (11 years, 11 months ago) by nhaye
File size: 5203 byte(s)
Implémentation de l'authentification https pour les ws soap

1 nhaye 1299 <?php
2    
3     /**
4     * Ce fichier permet de créer un consumeur des messages stockées dans la
5     * pile de RabbitMQ réservée au ERP.
6     *
7     * @package openfoncier
8     */
9     ini_set("soap.wsdl_cache_enabled","0");
10    
11     include_once('../../core/om_debug.inc.php');
12     include_once('../../dyn/services.inc.php');
13    
14     (defined("DEBUG") ? "" : define("DEBUG", EXTRA_VERBOSE_MODE));
15    
16     include_once('../../core/om_logger.class.php');
17    
18     // inclusion de la librairie php-amqplib
19     require_once('../php/php-amqplib/vendor/autoload.php');
20     use PhpAmqpLib\Connection\AMQPConnection;
21    
22     // Si le AMQP_DEBUG est defini a true, les messages DEBUG sont envoyes aux
23     // stdout
24     if (DEBUG > PRODUCTION_MODE) {
25     define('AMQP_DEBUG', true);
26     }
27    
28    
29     /** Utilise pour le test de retour de requete curl
30     */
31     define('HTTP_RESULT_OK', '200');
32    
33     /**
34     * Méthode permettant d'envoyer des messages SOAP
35     */
36     function postViaSOAP($msg) {
37     global $ARRETE_WSDL;
38 nhaye 1320 global $ARRETE_LOGIN;
39     global $ARRETE_PASS;
40 nhaye 1299
41     $data = $msg->body;
42 nhaye 1302 $data = json_decode($data);
43 nhaye 1299
44 nhaye 1302 // Verification que l'url du WSDL est définie
45 nhaye 1299 if (empty($ARRETE_WSDL)) {
46     logger::instance()->cleanLog();
47 nhaye 1302 logger::instance()->log("L'URL de fichier WSDL", EXTRA_VERBOSE_MODE);
48 nhaye 1299 logger::instance()->writeLogToFile();
49     return;
50     }
51 nhaye 1302
52     // Instanciation du client SOAP
53 nhaye 1320 $soapClient = new SoapClient($ARRETE_WSDL,array('trace' => AMQP_DEBUG,
54     'exceptions' => true,
55     // Auth credentials for the SOAP request.
56     'login' => $ARRETE_LOGIN,
57     'password' => $ARRETE_PASS,));
58    
59 nhaye 1299
60     $error = 0;
61 nhaye 1302
62     // Tentative d'appel de la méthode ws_Send_Chronos_Arret du serveur SOAP
63 nhaye 1299 try {
64 nhaye 1302 $info = $soapClient->ws_Send_Chronos_Arret($data);
65     // accuse de reception du message
66     $msg->delivery_info['channel']->
67     basic_ack($msg->delivery_info['delivery_tag']);
68 nhaye 1320
69     logger::instance()->cleanLog();
70     logger::instance()->log("Message envoye", EXTRA_VERBOSE_MODE);
71     logger::instance()->writeLogToFile();
72 nhaye 1299 } catch (SoapFault $fault) {
73 nhaye 1302 // Gestion d'erreurs
74 nhaye 1299 $error = 1;
75 nhaye 1302
76 nhaye 1299 logger::instance()->cleanLog();
77     logger::instance()->log("Erreur ".$fault->faultcode." : ".$fault->faultstring, EXTRA_VERBOSE_MODE);
78     logger::instance()->writeLogToFile();
79 nhaye 1302 // le resultat de l'execution de curl indique un erreur
80     // dors un peu avant de refuser le message
81     sleep(2);
82     // refuse le message
83     $msg->delivery_info['channel']->basic_reject(
84     $msg->delivery_info['delivery_tag'], true);
85 nhaye 1299 }
86 nhaye 1302
87     // envoie un message avec la chaine "quit" pour ce consumeur
88     if ($msg->body === 'quit') {
89     $msg->delivery_info['channel']->
90     basic_cancel($msg->delivery_info['consumer_tag']);
91     }
92 nhaye 1299
93 nhaye 1302 // Retour de la méthode ws_Send_Chronos_Arret (à utiliser si besoin)
94     // $info->ws_DA_Out_4D_vError
95     // $info->ws_DA_Out_Chrono_Arret_ADS
96     // $info->ws_DA_Out_N_Doss_ADS
97 nhaye 1299 }
98    
99 nhaye 1320 // pour des besoins de log il faut set $_SERVER["REQUEST_URI"]
100     if (!isset($_SERVER["REQUEST_URI"])) {
101     $_SERVER["REQUEST_URI"] = __FILE__;
102     }
103    
104 nhaye 1299 // si le $argv[1] manque on ne peut pas cree un tag unique pour le
105     // consumeur et dans ce cas-la on termine l'execution
106     $suffix = '';
107     if (!empty($argv) && count($argv) > 1) {
108     $suffix = $argv[1];
109     } else {
110     logger::instance()->log('Missing the command line argument used for tag suffix',
111     EXTRA_VERBOSE_MODE);
112     logger::instance()->writeLogToFile();
113     exit;
114     }
115    
116     // un exchange fait le routage des messages vers les piles
117     $exchange = 'routerSoap';
118    
119     // on va utiliser la pile $ARRETE_QUEUE
120     $queueArrete = $ARRETE_QUEUE;
121     // l'identifiant unique de consumeur ; il est utilise par RabbitMQ
122     $consumer_tag = 'consumerSoap'.$suffix;
123    
124     // etablis une connexion avec RabbitMQ instance
125     $conn = new AMQPConnection($RMQ_CONNECTION_HOST, $RMQ_CONNECTION_PORT,
126     $RMQ_CONNECTION_USER, $RMQ_CONNECTION_PASSWORD,
127     $RMQ_CONNECTION_VHOST);
128    
129     // obtiens un canal de la connexion
130     $ch = $conn->channel();
131     // si le canal n'est pas disponible arretes l'execution
132     if (is_null($ch)) {
133     // probleme avec la connexion, log le fait et arrete l'execution
134     logger::instance()->log('Probleme dans l\'etablisement de la connexion',
135     EXTRA_VERBOSE_MODE);
136     logger::instance()->writeLogToFile();
137     exit;
138     }
139    
140     // declare une pile (la creer s'il faut)
141     $ch->queue_declare($queueArrete, false, true, false, false);
142    
143     // declare un exchange qui va diriger les messages
144     $ch->exchange_declare($exchange, 'direct', false, true, false);
145    
146     // relier la pile d'arrete au exchange
147     $ch->queue_bind($queueArrete, $exchange);
148    
149     // registre le callback pour ce consumer aupres de RabbitMQ
150     $ch->basic_consume($queueArrete, $consumer_tag, false, false, false, false, 'postViaSOAP');
151    
152     // loop as long as the channel has callbacks registered
153     while (count($ch->callbacks)) {
154     $ch->wait();
155     }
156    
157     ?>

[email protected]
ViewVC Help
Powered by ViewVC 1.1.26