Signature

Dans un besoin d'étendre la sécurité, les méthodes de l'API nécessitent toute la génération d'une signature à l'aide des arguments de vos requêtes.

Cette signature est également renvoyée lors des réponses de l'API et vous pouvez dès lors en vérifier la correspondance.

La signature est composée de tous les champs de votre requête, triés dans l'ordre alphabétique, concaténés entre eux avec le séparateur "$".

A cette chaîne s'ajoute votre clé d'API.

La chaine rendue doit être ensuite hashée via l'algorithme SHA-1 afin de donner la signature de sécurité.


Voici un exemple de génération de la signature :


Imaginons que vous souhaitiez faire un paiement direct, voici votre tableau de paramètres :

						// Pseudo code
						[
							"Amount": 1234,
							"Uid": "Abc123",
							"Email": "john@doe.com",
							"CardNumber": "1234567897654321",
							"CardMonth": "09",
							"CardYear": "2016",
							"CardCVV": "123",
							"ClientIp": "89.184.22.134"
						]
					

Vous devez trier les noms d'arguments par ordre alphabétique :

						// Pseudo code
						[
							"Amount": 1234,
							"CardCVV": "123",
							"CardMonth": "09",
							"CardNumber": "1234567897654321",
							"CardYear": "2016",
							"ClientIp": "89.184.22.134"
							"Email": "john@doe.com",
							"Uid": "Abc123",
						]
					

Vous constituez une nouvelle chaine de caractères composée des valeurs des arguments triés, séparées par des $ :

						1234$123$09$1234567897654321$2016$89.184.22.134$john@doe.com$Abc123
					

Vous finissez la chaîne en y ajoutant le caractère $ suivi de votre clé d'API :

						1234$123$09$1234567897654321$2016$89.184.22.134$john@doe.com$Abc123$mettezicivotreclédapi
					

Pour finir, appliquez l'algorithme SHA-1 sur l'ensemble de la chaîne pour obtenir une signature de la forme suivante :

						56041a82332797199817f4dcbcb9506c64bd0dc5
					

Vous pouvez désormais fournir la clé dans votre requête et appeler le service :

						// Pseudo code
						[
							"Amount": 1234,
							"CardCVV": "123",
							"CardMonth": "09",
							"CardNumber": "1234567897654321",
							"CardYear": "2016",
							"ClientIp": "89.184.22.134"
							"Email": "john@doe.com",
							"Uid": "Abc123",
							"Signature": "56041a82332797199817f4dcbcb9506c64bd0dc5"
						]
					

Vous pouvez utiliser les fonctions PHP suivantes. Il vous faut appeler getSignature() à laquelle vous passez les paramètres à envoyer à l'API ainsi que votre clé d'API secrète :

						<?php
						function getSignature($params, $apiKey)
						{
							if (isset($params['Signature']))
								unset($params['Signature']);
	
							$chain = is_array($params) ? implode('$', formatSignature($params)) : $params;
							return sha1($chain.'$'.$apiKey);
						}
	
						function formatSignature($params)
						{
							ksort($params);
							foreach ($params as $key => $value)
							{
								if (is_array($value))
								{
									ksort($value);
									$params[$key] = implode('$', formatSignature($value));
								}
							}
	
							return $params;
						}
						?>