Intégration et configuration du SDK - NextINpact/LaPresseLibreSDK GitHub Wiki
IMPORTANT: Pour pouvoir communiquer avec la plateforme La Presse Libre, il est nécessaire de configurer le SDK. À la racine du dossier du SDK de votre choix vous trouverez un fichier nommé « Config(.php,.cs,.js) » : chaque attribut de ce fichier doit être mis à jour avec des valeurs de production.
Pour obtenir ces valeurs de production, veuillez-vous connecter avec un compte gestionnaire à la plateforme de gestion des partenaires à l’adresse suivante : https://partenaire.lapresselibre.fr/ et vous rendre dans la partie « Gestion des informations partenaires ». Vous y trouverez une section pour télécharger les identifiants au format JSON.
Si vous ne disposez pas encore d’un compte gestionnaire, veuillez-vous rapprocher de l’administration La Presse Libre.
À noter qu’à tout moment, vous pouvez faire une demande de modification de ces identifiants (pour des raisons de sécurité) à l’administration La Presse Libre. Une fois les codes régénérés, rendez-vous de nouveaux dans la partie « Gestion des informations partenaires » où ils pourront être télécharger. Il sera laissé au développeur le fait de changer ces codes dans le fichier de configuration.
IMPORTANT: Après avoir sélectionné la version du SDK qui est en adéquation avec le langage de programmation que vous utilisez, certaines modifications sont nécessaires pour rendre le SDK fonctionnel en production.
Rappel : Le SDK PHP est compatible avec PHP >= v5.0.x
Le SDK PHP n'utilise aucun framework web. Il sera laissé au choix du développeur d’utiliser une classe d’autoload ou non pour gérer la dépendance de fichiers.
Vous trouverez dans l'arborescence du projet un dossier "examples", contenant des exemples d'implémentation des différents web-services. À partir de ces exemples, veuillez intégrer les web-services à votre solution pour pouvoir communiquer avec la plateforme La Presse Libre.
/**
* Implémentation basique du web-service de vérification
*/
try {
$service = new VerificationService($_SERVER);
$model = new UserInfoModel();
// Contexte de TEST pour vérifier le bon fonctionnement du web-service
// Le modèle retourné doit contenir des valeurs non pertinentes
if(HeaderUtils::IsTestingContext($_SERVER)) {
$model->CreateDummyModel();
} else {
$verificationModel = $service->getResult();
// Ajoutez ici votre logique de vérification des données en base à partir de l'objet $verificationModel
// Exemple de composition du modèle à partir des données en base
$model->Mail = "[email protected]";
$model->CodeUtilisateur = "e5016836-dfbe-49e1-82d7-b8ac300da6aa";
$model->TypeAbonnement = "Mensuel";
$model->PartenaireID = 2;
$model->DateExpiration = date_format(new DateTime(), "Y-m-d\TH:i:sO");
$model->DateSouscription = date_format(new DateTime(), "Y-m-d\TH:i:sO");
$model->AccountExist = TRUE;
}
echo $service->createResponse($model, 200);
} catch(Exception $e) {
header('HTTP/1.1 401 Unauthorized', true, 401);
echo json_encode(Array('error' => $e->getMessage()));
}
Rappel : Le SDK NodeJS est compatible avec Node >= v4.0.x
Le SDK se base actuellement sur Express.js. Si ce n'est pas votre cas, vous devrez modifier le code du SDK afin qu'il s'intègre au mieux à votre solution existante.
Après avoir vérifier votre infrastructure web, chaque web-service contient une portion de code à modifier. Exemple :
/**
* Web-service de vérification
*/
app.get("/ws/verification", LPLMiddleware.CheckRequestHeaders, function (req, res) {
var model = new UserInfosModel();
var crypt = new AESCrypt();
if(LPLMiddleware.IsTestingContext(req)) {
// Ne pas modifier
model.CreateDummyModel();
} else {
var json = LPLMiddleware.GetJsonFromRequest(crypt, req.query.crd);
var vModel = new VerifModel(json);
// TODO : à modifier
// Ajoutez ici votre logique de verification des donnees en base à partir de l'objet vModel
// Exemple de composition du modele à partir des donnees en base
model.Mail = "[email protected]";
model.CodeUtilisateur = "123123-1231-123-12311";
model.AccountExist = true;
model.PartenaireID = config.values.PARTENAIRE_ID;
model.TypeAbonnement = "Mensuel";
model.DateExpiration = new Date();
model.DateSouscription = new Date();
}
var response = crypt.rijndael256Encrypt(config.values.AES_KEY, config.values.IV, JSON.stringify(model));
LPLMiddleware.AddResponseHeaders(res);
res.status(200).end(response);
});
C'est à ce niveau que vous devez appliquer la logique de vérification des données. Chaque appel à un web-service transporte des informations relatives à un utilisateur. Vous devez donc, en fonction du web-service appelé, valider, sauvegarder ou modifier ces informations.
Rappel : Le SDK ASP.NET utilise MVC5 et C# 6
Pour des raisons pratiques, le SDK ASP.NET est un projet de type partagé, c'est à dire que la configuration du serveur web est inexistante et les librairies tierces ne sont pas inclues. Après avoir inclus dans votre solutions les différents éléments du SDK, assurez-vous de restaurer les packages NuGet pour résoudre les dépendances.
Pour la communication des web-services, le SDK utilise le framework Web API d'ASP.NET. Il sera donc nécessaire d'inclure dans votre fichier de configuration des routes (généralement WebApiConfig.cs) le code suivant :
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "ws/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
Comme pour le SDK NodeJS, il sera nécessaire de modifier certaines portions de code des web-services. Exemple :
VerificationModel obj =
JsonConvert.DeserializeObject<VerificationModel>(Encrypt.DecryptRJ256(crd,
Config.AESKey, Config.IV));
UserInfoModel model = new UserInfoModel {PartenaireID = Config.PartID};
if (Request.Headers.Contains("X-CTX"))
{
// Ne pas modifier
model.CreateDummyModel();
}
else
{
// TODO : à modifier
// Ajoutez ici votre logique de verification des donnees en base a partir de l'objet VerificationModel
// Exemple de composition du modele a partir des donnees en base
model.AccountExist = true;
model.Mail = obj.Mail;
model.CodeUtilisateur = obj.CodeUtilisateur;
}
string json = Encrypt.EncryptRJ256(JsonConvert.SerializeObject(model), Config.AESKey, Config.IV);
IMPORTANT: Pour accepter les requêtes venant de la plateforme La Presse Libre, il sera nécessaire de vous connecter avec un compte gestionnaire à la plateforme de gestion des partenaires à l’adresse suivante : https://partenaire.lapresselibre.fr/ et vous rendre dans la partie « Gestion des informations partenaires » afin d'y configurer les points de terminaisons de vos trois web-services.
Pour pouvoir tester le bon fonctionnement de vos web-services, rendez-vous sur l’environnement de test à l’adresse suivante : http://sandboxlpl.azurewebsites.net/
Cette fonctionnalité a pour but de faciliter l’inscription de vos utilisateurs historiques à la plateforme La Presse Libre depuis votre plateforme. Son fonctionnement est basique : à partir des informations de compte de l’utilisateur (son email, son nom d'utilisateur et son identifiant utilisateur La Presse Libre), une Url est générée sous la forme suivante :
https://lapresselibre.fr/inscription-partenaire?user=<infos>&partId=<partId>
la valeur contenue dans user
(infos) est composé d'un objet JSON décrit ci-dessous :
{
"Email": "[email protected]",
"Pseudo": "john.doe",
"Guid" : "<guid_lpl>"
}
L’URL sera donc composée de deux paramètres, le premier « user » contiendra les informations relatives à l’utilisateur, le second « partId » permettra d’identifier la plateforme partenaire de provenance. Pour des raisons de sécurité des informations utilisateurs, les données seront chiffrées à l’aide d’AES128 puis encodés en base64.
Voici un descriptif du processus d'inscription La Presse Libre depuis une plateforme partenaire :
- On génère une url unique pour chaque utilisateur comme décrit ci-dessus
- Lorsqu'il accède à cette url il y a deux possibilités :
- L'identifiant La Presse Libre de l'utilisateur est transmis dans l'url ce qui signifie qu'il possède déjà un compte. Il est alors redirigé vers la modal de connexion La Presse Libre.
- L'identifiant La Presse Libre de l'utilisateur n'est pas présent dans l'url (null) ce qui signifie qu'il n'a pas de compte. Le système va alors rechercher un compte LPL à partir de l'adresse mail transmise : * Si un compte est trouvé avec l'adresse mail, l'utilisateur est redirigé vers la modal de connexion. Dans ce cas, un appel au web service de vérification est fait pour vérifier la présence d'un abonnement et pour transmettre l'identifiant utilisateur La Presse Libre que le partenaire doit stocker en base de données. * Si aucune correspondance de compte est trouvé avec l'utilisateur est redirigé vers la page d'inscription partenaire.
- Lorsque l'utilisateur s'inscrit via cette procédure, son compte partenaire de provenance est automatiquement lié à son compte La Presse Libre. Pour cela, un appel au web service de vérification est fait pour vérifier la présence d'un abonnement et pour transmettre l'identifiant utilisateur La Presse Libre que le partenaire doit stocker en base de données.
Remarque : Le fait de s'appuyer sur l'identifiant utilisateur permet d'identifier un utilisateur de manière unique à tout moment même dans le cas où il aurait changé d'adresse mail ou autre.