@spreeloop/mtn_momo
Version:
A mtn momo api integration package
122 lines • 6.03 kB
JavaScript
;
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