CinetPay X-TOKEN HMAC


Contexte

Dans le processus de vérification des paiements, CinetPay implémente un mécanisme de notifications qui consiste à contacter le partenaire sur un Webhook, afin de lui envoyer les informations d’un paiement dont le statut a évolué. A des fins de sécurité, un token HMAC a été mis en place dans l’entête de cette notification pour permettre une vérification du côté du partenaire.

Le but de ce tutoriel est de décrire le processus de vérification du token HMAC.

Avant de procéder d'aller , vous devez Récupérer votre Secret Key dans votre compte marchand:

  • Rendez-vous sur www.cinetpay.com/login et connectez-vous avec vos accès
  • Cliquer ensuite sur le menu « Intégrations »
  • Vous y trouverez votre Secret Key

Scénario

scenario-hmac

Le serveur exécute une requête de type POST sur votre url de notification contenant :

  • Entête de la requête:

    • x-token : Un token HMAC pour permettre une vérification du côté du partenaire.
  • Corps de la requête:

    • cpm_site_id: la variable site_id que vous avez envoyé à l’initialisation
    • cpm_trans_id: la variable transaction_id que vous avez envoyé à l’initialisation
    • cpm_trans_date: la date et heure de la transacation | ex: 2000-12-21 19:19:00|
    • cpm_amount: le montant
    • cpm_currency : la devise
    • signature: un token. Il est différent du token généré
    • payment_method : la methode de paiement
    • cel_phone_num : le numero qui a servi a faire le paiement
    • cpm_phone_prefixe : le prefixe du pays
    • cpm_language : la langue utisé dans laquelle le paiement a été fait
    • cpm_version : la version utilisé(V4)
    • cpm_payment_config : le type de paiement(Single)
    • cpm_page_action : le type d'action (Payment)
    • cpm_custom : la variable metadata que vous avez envoyé à l’initialisation
    • cpm_designation : la variable designation que vous avez envoyé à l’initialisation
    • cpm_error_message : le statut de la transaction. En cas d'erreur, vous avez la raison de l'échec

Etape de création du token

Etape 1

Le token est constitué par concaténation des informations reçues dans le corps de la requête. Ainsi, il vous faut formuler une chaîne de caractères en respectant le schéma ci-après présenté:

cpm_site_id + cpm_trans_id + cpm_trans_date + cpm_amount + cpm_currency + signature + 
payment_method + cel_phone_num + cpm_phone_prefixe + cpm_language + cpm_version 
+ cpm_payment_config + cpm_page_action + cpm_custom + cpm_designation + cpm_error_message


Exemple en php

$data = $cpm_site_id . $cpm_trans_id . $cpm_trans_date . $cpm_amount . $cpm_currency . 
$signature . $payment_method . $cel_phone_num . $cpm_phone_prefixe . 
$cpm_language . $cpm_version . $cpm_payment_config . $cpm_page_action . $cpm_custom . $cpm_designation . $cpm_error_message; 

Etape 2

Créer le token suivant la technique HMAC en appliquant l'algorithme SHA256 avec la clé secrète (qui vous sera communiquée).


Exemple en php

$token = hash_hmac(‘SHA256’, $data, $secretKey);

Etape 3

L’étape consiste à vérifier que le token reçu dans l’en-tête correspond à celui que vous aurez généré.


Exemple en php

if(hash_equals($received_token, $generated_token)) 
{
      // Valid Token
}