UNPKG

@spreeloop/mtn_momo

Version:
122 lines 6.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initializeMtnMomoPayment = void 0; const constants_1 = require("../../utils/constants"); const https_1 = require("../../utils/https"); const constants_2 = require("../utils/constants"); /** * Initializes an MTN MOMO payment transaction by validating the provided parameters * and invoking the internal payment initialization function. * * @param {Object} params - The parameters for initializing the payment. * @param {InitializeMtnMomoPaymentRequest} params.mobileInitParams - The request details for the payment. * @param {MtnMomoPaymentParams} params.paymentConfig - Configuration parameters for the payment. * @param {string} params.endPoint - The API endpoint for the payment request. * @param {string} params.accessToken - The access token for authorization. * @returns {Promise<InitializeMtnMomoResponse>} - The response from the payment initialization process. * * Logs a warning and returns an error response if any required parameter is missing. */ async function initializeMtnMomoPayment({ mobileInitParams, paymentConfig, endPoint, accessToken, }) { const logger = paymentConfig.logger; const ocpApimSubscription = paymentConfig.ocpApimSubscriptionKey; const amount = mobileInitParams.amount; const xReferenceId = mobileInitParams.xReferenceId; const userNumber = mobileInitParams.userPhoneNumber; const xTargetEnvironment = paymentConfig.xTargetEnvironment; const currency = mobileInitParams.currency; const apiKey = paymentConfig.apiKey; const apiUser = paymentConfig.apiUserKey; const externalId = mobileInitParams.externalId; if (!(ocpApimSubscription && amount && xReferenceId && userNumber && xTargetEnvironment && currency && apiKey && apiUser && externalId)) { logger.warn("[MTN MOMO] Initialization failed with error: Invalid data provided. ", JSON.stringify(mobileInitParams)); return { error: constants_2.ApiErrorType.invalidData, raw: mobileInitParams, }; } const paymentParams = { mobileInitParams: mobileInitParams, paymentConfig: paymentConfig, endPoint: endPoint, accessToken: accessToken, }; return initializeMtnMomoPaymentInternal(paymentParams); } exports.initializeMtnMomoPayment = initializeMtnMomoPayment; /** * Initializes an MTN MOMO payment transaction. * * @param params - The parameters required to initiate the payment, including: * - mobileInitParams: The request details for the payment initialization. * - paymentConfig: Configuration parameters for the payment process. * - endPoint: The API endpoint for the payment request. * - accessToken: The access token for authorization. * * @returns A promise that resolves to an InitializeMtnMomoResponse object, * indicating the result of the payment initialization. * * Logs the initiation process and handles errors by returning appropriate * error types if the payment initiation fails. */ const initializeMtnMomoPaymentInternal = async (params) => { var _a, _b; const headers = { [constants_2.RequestKey.keyAuthorization]: `${constants_1.ConstantRequestField.bearer} ${params.accessToken}`, [constants_2.RequestKey.keySubscriptionKey]: params.paymentConfig.ocpApimSubscriptionKey, [constants_2.RequestKey.keyXReferenceId]: params.mobileInitParams.xReferenceId, [constants_2.RequestKey.keyEnvironmentTarget]: params.paymentConfig.xTargetEnvironment, [constants_2.RequestKey.keyContentType]: constants_1.ConstantRequestField.typeJson, }; if (params.mobileInitParams.xCallbackUrl) { headers[constants_2.RequestKey.keyXCallbackUrl] = params.mobileInitParams.xCallbackUrl; } const paymentBody = { [constants_2.RequestKey.keyPayerMessage]: (_a = params.mobileInitParams.payerMessage) !== null && _a !== void 0 ? _a : "", [constants_2.RequestKey.keyPayeeNote]: (_b = params.mobileInitParams.payeeNote) !== null && _b !== void 0 ? _b : "", [constants_2.RequestKey.keyExternalId]: params.mobileInitParams.externalId, [constants_2.RequestKey.keyAmount]: params.mobileInitParams.amount, [constants_2.RequestKey.keyCurrency]: params.mobileInitParams.currency, [constants_2.RequestKey.keyPayer]: { [constants_2.RequestKey.keyPartyIdType]: "MSISDN", [constants_2.RequestKey.keyPartyId]: params.mobileInitParams.userPhoneNumber, }, }; params.paymentConfig.logger.info(`Initiate the Mtn MOMO Payment with data: ${JSON.stringify(paymentBody)}\nroute: ${params.endPoint}`); const response = await (0, https_1.postRequest)({ logger: params.paymentConfig.logger, headers: headers, data: paymentBody, route: params.endPoint, }); const responseData = response === null || response === void 0 ? void 0 : response.response; if (!responseData) { params.paymentConfig.logger.warn(`Failed to initiate the MTN MOMO payment from payer number ${params.mobileInitParams.userPhoneNumber}. Request Body: ${JSON.stringify(paymentBody)}`); return { raw: response.error, error: constants_2.ApiErrorType.failedToInitiateThePayment, }; } if (!(0, https_1.isSuccessfulCodeResponse)(responseData.status)) { params.paymentConfig.logger.warn(`Failed to initiate the MTN MOMO payment from payer number ${params.mobileInitParams.userPhoneNumber}. Request status ${responseData === null || responseData === void 0 ? void 0 : responseData.status} and data: ${responseData === null || responseData === void 0 ? void 0 : responseData.data}`); return { raw: responseData, error: response.error, }; } return { data: { status: 202, }, raw: responseData, }; }; //# sourceMappingURL=initialize_om_payment.js.map