Notifier via XMPP en PHP

10 mars 2014 - 459 mots - php

XMPP peut vous paraître un acronyme assez agressif, mais c’est un ensemble de protocoles ouverts pour la messagerie instantanée qui se cache derrière Google Talk/Hangout ou derrière la messagerie instantanée de Facebook. Donc dans cet article, après les notifications HTML5 et par email, nous allons utiliser PHP pour envoyer un petit message de chat sur Google Talk.

Logo XMPP

Installation de la librairie JAXL

Comme d’habitude, nous allons utiliser Composer pour récupérer la librairie JAXL :

1
2
3
4
5
{
  "require": {
     "abhinavsingh/jaxl": "3.x-dev",
  }
}

Lien : Packagist : abhinavsingh/jaxl

Récupération d’un token d’accès OAuth pour parler XMPP avec Google Talk

Pour pouvoir se connecter au serveur de Google Talk, il faut un token d’accès car Google utilise une authentification XMPP nommée « Google Talk X-OAUTH2 ».
Pour récupérer le token d’accès :

  • Aller sur https://developers.google.com/oauthplayground/

  • Première étape : il faut rentrer le « scope » lié à Google Talk : https://www.googleapis.com/auth/googletalk

    Google Talk : OAuth 2 : Etape 1
  • Seconde étape : il faut autoriser Google à envoyer des messages instantanées

    Google Talk : OAuth 2 : Etape 2
  • Troisième étape : on a récupéré un code d’autorisation, mais il nous manque encore les tokens. Pour cela, il faut cliquer sur « Exchange authorization code for tokens »

    Google Talk : OAuth 2 : Etape 3
  • Dernière étape : on récupère le token d’accès pour l’utiliser dans notre prochaine étape

    Google Talk : OAuth 2 : Etape 4

Utilisation de JAXL pour envoyer un message sur Google Talk

Après avoir initialisé Composer, on appelle l’autoload de Composer.

1
include_once 'vendor/autoload.php';

On initialise JAXL avec le token précédemment récupéré :

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$xmppClient = new JAXL(array(
  // Credentials
  'jid' => 'user@gmail.com',
  'pass' => 'TOKEN',
  // AUTH
  'auth_type' => 'X-OAUTH2',
  // SERVER
  'host' => 'talk.google.com',
  'port' => 5222,
  'force_tls' => true,
  // LOG
  'log_level' => JAXL_INFO
));

JAXL fonctionne à base de callbacks c’est-à-dire qu’en fonction de l’évènement, on appellera telle ou telle fonction.
Ainsi, dans notre cas, juste après le succès de la connexion, on envoie notre message.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
// SUCCESS
$xmppClient->add_cb('on_auth_success', function() {
  global $xmppClient;
  _info('AUTH SUCCESS : [jid] : '.$xmppClient->full_jid->to_string());

  $xmppClient->set_status('available!', 'dnd', 10);
  $xmppClient->send(new XMPPMsg(array('to'=>'user@gmail.com'), '['.date('Y-m-d H:i:s').'] Hello world'));
  $xmppClient->send_end_stream();
});

// FAILURE
$xmppClient->add_cb('on_auth_failure', function($reason) {
  global $xmppClient;
  _info('AUTH FAILED : '.$reason);
  $xmppClient->send_end_stream();
});

// LOGOUT
$xmppClient->add_cb('on_disconnect', function() {
  _info('DISCONNECT');
});

Après avoir défini nos callbacks, on utilise la méthode start.

1
$xmppClient->start();

Conclusion

Et voilà, vous pouvez désormais échanger XMPP avec Google Talk. Avec les exemples de JAXL, il y a même moyen de faire un bot qui répondra à vos échanges.
Après Google Talk, il est possible de discuter avec de nombreux services utilisant XMPP comme protocole de messagerie : Facebook Chat ou iChat d’Apple.

Lien : Notifier via XMPP avec Facebook Chat en PHP

Laisser un commentaire

Merci. Votre message a bien été enregistré.