UNPKG

dry-node

Version:

Initialiseur de structure Node Express typée et modulaire

122 lines (105 loc) 3.79 kB
require('dotenv').config(); const axios = require('axios'); const DryGenerateCharacterFunction = require("./dry-generate-character.function"); const MOMO_BASE_URL = process.env.MOMO_BASE_URL; const MOMO_API_KEY = process.env.MOMO_API_KEY; const X_REFERENCE_ID = process.env.X_REFERENCE_ID; const CALLBACK_URL = process.env.CALLBACK_URL; const MOMO_SUBSCRIPTION_KEY = "16c784e9b34c42dcaead6e5f8a650a63"; const MOMO_CURRENCY = "XAF"; // Franc CFA async function DryPaymentMomo1(phone, amount, currency){ try { const transactionId = DryGenerateCharacterFunction(12, 'ABCDEF0123456789'); // ID transaction personnalisé const success = await makePayment(phone, amount, transactionId); if (success) { console.log("Paiement initié, en attente de confirmation..."); } } catch (error) { console.error("Échec du paiement:", error); } } /** * Get Token * @returns {Promise<any>} */ async function getAccessToken() { console.log(MOMO_BASE_URL); console.log("MOMO_API_KEY",MOMO_API_KEY); try { const response = await axios.post(`${MOMO_BASE_URL}/collection/token/`, {}, { headers: { Authorization: `Basic ${Buffer.from( `${MOMO_API_KEY}:${MOMO_SUBSCRIPTION_KEY}` ).toString("base64")}`, }, }); return response.data.access_token; } catch (error) { console.error("Erreur d'authentification:", error.response?.data || error.message); throw error; } } /** * Make a payment * @param phoneNumber * @param amount * @param externalId * @returns {Promise<boolean>} */ async function makePayment(phoneNumber, amount, externalId) { const accessToken = await getAccessToken(); const payload = { amount: amount.toString(), currency: MOMO_CURRENCY, externalId: externalId, payer: { partyIdType: "MSISDN", partyId: phoneNumber }, payerMessage: "Paiement pour service", payeeNote: "Merci pour votre achat" }; try { const response = await axios.post(`${MOMO_BASE_URL}/collection/v1_0/requesttopay`, payload, { headers: { 'Authorization': `Bearer ${accessToken}`, 'X-Reference-Id': X_REFERENCE_ID, 'X-Target-Environment': 'sandbox', 'Ocp-Apim-Subscription-Key': MOMO_API_KEY, 'Content-Type': 'application/json', 'X-Callback-Url': CALLBACK_URL } }); console.log("Paiement en attente de confirmation:", response.status); return response.status === 202; // 202 = Requête acceptée } catch (error) { console.error("Erreur de paiement:", error.response?.data || error.message); throw error; } } /** * Check payment status * @param referenceId * @returns {Promise<any>} */ async function checkPaymentStatus(referenceId) { const accessToken = await getAccessToken(); try { const response = await axios.get(`${MOMO_BASE_URL}/collection/v1_0/requesttopay/${referenceId}`, { headers: { 'Authorization': `Bearer ${accessToken}`, 'X-Target-Environment': 'sandbox', 'Ocp-Apim-Subscription-Key': MOMO_API_KEY, 'Content-Type': 'application/json' } }); return response.data; } catch (error) { console.error("Erreur lors de la vérification:", error.response?.data || error.message); throw error; } } module.exports = { DryPaymentMomo1, checkPaymentStatus }