Effectuer un dépôt via l'API REST (Java)
Vous pouvez utiliser nos APIs pour effectuer des dépôts d'argent.
C'est l'objet de ce tutoriel, dans lequel nous allons vous présenter une approche simple pour intégrer les APIs de MOALA dans le but de faire une opération de dépôt d'argent.
Prérequis
Avant de commencer, assurez-vous d'avoir les éléments suivants :
- Un compte sur le portail MOALA avec des permissions nécessaires pour effectuer des dépôts. Vous pouvez obtenir un compte Moala en suivant les étapes précisées ici Obtenir les clés d'accès
- Un environnement de développement avec Java installé
- La bibliothèque
Apache HttpClientpour effectuer des requêtes HTTP
1. Authentification
L'API de MOALA requiert trois headers pour l'authentification et la sécurité des transactions :
- LP-ACCESS-KEY : votre clé d'accès à l'API de MOALA (obtenue sur le portail de MOALA)
- LP-ACCESS-TIMESTAMP : l'horodatage de la requête en secondes
- LP-ACCESS-SIGN : une signature générée en utilisant la clé secrète LP-ACCESS-KEY
La signature LP-ACCESS-SIGN est générée en utilisant l'algorithme HMAC-SHA256 sur une concaténation de la clé, du timestamp et du corps de la requête.
Génération de la signature
Nous allons utiliser le code ci-dessous pour calculer la signature de chaque requête qui sera envoyée vers le serveur.
La fonction generateSignature calcule la signature de la requête à envoyer.
// Génération de la signature de la requête
import org.apache.commons.codec.digest.HmacUtils;
public class Utils {
public static String generateSignature(String secretKey, String timestamp, String method, String endpoint, String payload) throws Exception {
// Construction du message a hasher
String message = timestamp + method + endpoint + payload;
// Calcul de la signature
String signature = HmacUtils.hmacSha256Hex(secretKey, message);
// Renvoi de la signature
return signature;
}
}
2. Vérifier les KYC du client
Avant d'effectuer le dépôt d'argent, il est important d'effectuer une vérification des KYC afin de se rassurer que le dépôt ser fait chez le bon destinataire.
Endpoint de l'opération de check des KYC
Pour effectuer une opération de vérification des KYC, vous devez utiliser l'endpoint ci-dessous, avec le serviceCode correspondant à l'opérateur à utiliser et le number correspondant au numéro du client pour lequel le KYC doit être vérifié.
GET https://api.moala.africa/v1/api/kyc/{serviceCode}/{number}
Les serviceCode autorisés pour cet endpoint sont les suivants :
- CASHIN_MTN_CM: Cashout MTN Cameroun
- CASHIN_ORANGE_CM: Cashout Orange Cameroun
- CASHIN_AIRTEL_GA: Cashout Airtel Gabon
- CASHIN_MOOV_GA: Cashout Airtel Gabon
- PAIEMENTMARCHAND_MTN_CM: Paiement marchand MTN Cameroun
- PAIEMENTMARCHAND_ORANGE_CM: Paiement marchand Orange Cameroun
- PAIEMENTMARCHAND_AIRTEL_GA: Paiement marchand Airtel Gabon
- PAIEMENTMARCHAND_MOOV_GA: Paiement marchand Moov Gabon
Envoi de la requête de vérification des KYC
Le code ci-dessous permet d'effectuer la vérification des KYC du client destinataire du dépôt. Le retour de cet API permet au dépositaire de confirmer que le dépôt sera effectué vers le bon destinataire.
import KYC;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.time.Instant;
public class KYCCheck {
private static final String API_KEY = "votre_api_key";
private static final String SECRET_KEY = "votre_secret_key";
private static final String API_BASE_URL = "https://api.moala.africa";
public static void checkKYC(String serviceCode, String number) {
try (CloseableHttpClient client = HttpClients.createDefault()) {
String endpoint = "/v1/api/kyc/" + serviceCode +"/" + number;
String url = API_BASE_URL + endpoint;
// Récupération du timestamp
long timestamp = Instant.now().getEpochSecond();
String payload = "";
// Construction des entêtes
String method = "GET";
String signature = Utils.generateSignature(SECRET_KEY, String.valueOf(timestamp), method, endpoint, payload);
HttpGet get = new HttpGet(url);
get.setHeader("LP-ACCESS-KEY", API_KEY);
get.setHeader("LP-ACCESS-TIMESTAMP", String.valueOf(timestamp));
get.setHeader("LP-ACCESS-SIGN", signature);
CloseableHttpResponse response = client.execute(get);
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
3. Effectuer le dépôt
Nous allons à présent effectuer une opération de dépôt d'argent en utilisant les APIs REST de MOALA.
Endpoint de l'opération de dépôt
Pour effectuer une opération de dépôt, vous devez utiliser l'endpoint ci-dessous, avec le serviceCode correspondant à l'opérateur à utiliser.
POST https://api.moala.africa/v1/api/transaction/withdrawal
Les serviceCode autorisés pour cet endpoint sont les suivants :
- CASHIN_MTN_CM: Cashout MTN Cameroun
- CASHIN_ORANGE_CM: Cashout Orange Cameroun
- CASHIN_AIRTEL_GA: Cashout Airtel Gabon
- CASHIN_MOOV_GA: Cashout Airtel Gabon
- PAIEMENTMARCHAND_MTN_CM: Paiement marchand MTN Cameroun
- PAIEMENTMARCHAND_ORANGE_CM: Paiement marchand Orange Cameroun
- PAIEMENTMARCHAND_AIRTEL_GA: Paiement marchand Airtel Gabon
- PAIEMENTMARCHAND_MOOV_GA: Paiement marchand Moov Gabon
Envoi de la requête de dépôt
A présent, nous allons construire et envoyer une requête via l'API de dépôt.
import Utils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.google.gson.Gson;
import java.time.Instant;
import java.util.HashMap;
import java.util.Map;
public class Deposit {
private static final String API_KEY = "votre_api_key";
private static final String SECRET_KEY = "votre_secret_key";
private static final String API_BASE_URL = "https://api.moala.africa";
public static void makeDeposit(Float amount, String serviceCode, String phoneNumber, String partnerId) {
try (CloseableHttpClient client = HttpClients.createDefault()) {
String endpoint = "/v1/api/transaction/withdrawal";
String url = API_BASE_URL + endpoint;
// Récupération du timestamp
long timestamp = Instant.now().getEpochSecond();
// Construction du corps de la requête
Map body = new HashMap<>();
body.put("amount", amount);
body.put("transactionType", "deposit");
body.put("serviceCode", serviceCode);
body.put("phoneNumber", phoneNumber);
body.put("partnerId", partnerId);
String payload = new Gson().toJson(body);
// Construction des entêtes
String method = "POST";
String signature = Utils.generateSignature(SECRET_KEY, String.valueOf(timestamp), method, endpoint, payload);
HttpPost req = new HttpPost(API_URL);
req.setHeader("LP-ACCESS-KEY", API_KEY);
req.setHeader("LP-ACCESS-TIMESTAMP", String.valueOf(timestamp));
req.setHeader("LP-ACCESS-SIGN", signature);
req.setHeader("Content-Type", "application/json");
req.setEntity(payload);
CloseableHttpResponse response = client.execute(post);
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Le champ partnerId doit être unique pour chaque transaction, sinon l'envoi de la requête va échouer.
4. Vérifier le statut du dépôt
Une fois que la requête de dépôt a été envoyée, on peut vérifier le succès de l'opération en faisant un nouvel appel d'API.
Endpoint de vérification
L'endpoint ci-dessous permet de vérifier le statut de la transaction de dépôt précédemment réalisée.
GET https://api.moala.africa/v1/api/transaction/check/{partnerId}
Envoi de la requête de vérification du statut
import Utils;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import java.time.Instant;
public class StatusCheck {
private static final String API_KEY = "votre_api_key";
private static final String SECRET_KEY = "votre_secret_key";
private static final String API_BASE_URL = "https://api.moala.africa";
public static void checkStatus(String partnerId) {
try (CloseableHttpClient client = HttpClients.createDefault()) {
String endpoint = "/v1/api/transaction/check/" + partnerId;
String url = API_BASE_URL + endpoint;
// Récupération du timestamp
long timestamp = Instant.now().getEpochSecond();
String payload = "";
// Construction des entêtes
String method = "GET";
String signature = Utils.generateSignature(SECRET_KEY, String.valueOf(timestamp), method, endpoint, payload);
HttpGet get = new HttpGet(url);
get.setHeader("LP-ACCESS-KEY", API_KEY);
get.setHeader("LP-ACCESS-TIMESTAMP", String.valueOf(timestamp));
get.setHeader("LP-ACCESS-SIGN", signature);
CloseableHttpResponse response = client.execute(get);
System.out.println(EntityUtils.toString(response.getEntity()));
} catch (Exception e) {
e.printStackTrace();
}
}
}
5. Exécuter le code
A présent, nous allons exécuter le code présenté ci-dessus.
Pour cela, nous allons tenter de faire un dépôt de 500F depuis un numéro Orange Money.
import Deposit;
import StatusCheck;
import KYC;
public static void main(String args[]) {
// Définition des Variables
String API_KEY = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
String SECRET_KEY = "yyyyyyyyyyyyyyyyyyyyyyyyyy";
String kycServiceCode = "CASHIN_ORANGE_CM";
String depositServiceCode = "CASHIN_ORANGE_CM";
String number = "XXXXXXXXX";
String partnerId = "xxxxxxxx";
String amount = 1000;
// 1. Vérifier les KYC du destinataire
KYCCheck kyc = new KYCCheck();
kyc.API_KEY = API_KEY;
kyc.SECRET_KEY = SECRET_KEY;
kyc.checkKYC(kycServiceCode, number);
// 2. Effectuer le dépôt
Deposit deposit = new Deposit();
deposit.API_KEY = API_KEY;
deposit.SECRET_KEY = SECRET_KEY;
deposit.makeDeposit(500, depositServiceCode, number, partnerId);
// 3. Vérifier le statut de la transaction
StatusCheck statusCheck = new StatusCheck();
statusCheck.API_KEY = API_KEY;
statusCheck.SECRET_KEY = SECRET_KEY;
checkStatus(partnerId);
}
6. Conclusion
Arrivés au terme de ce tutoriel, vous savez maintenant comment intégrer les APIs de MOALA pour réaliser une opération de dépôt d'argent.