- maib MIA QR API docs: https://docs.maibmerchants.md/mia-qr-api
- maib Request to Pay (RTP) API docs: https://docs.maibmerchants.md/request-to-pay
- GitHub project https://github.com/alexminza/maib-mia-sdk-node
- NPM package https://www.npmjs.com/package/maib-mia-sdk
To easily install or upgrade to the latest release, use npm:
npm install maib-mia-sdkImport SDK:
const {
MaibMiaSdk,
MaibMiaApiRequest
} = require('maib-mia-sdk');Add project configuration:
const MAIB_MIA_CLIENT_ID = process.env.MAIB_MIA_CLIENT_ID;
const MAIB_MIA_CLIENT_SECRET = process.env.MAIB_MIA_CLIENT_SECRET;
const MAIB_MIA_SIGNATURE_KEY = process.env.MAIB_MIA_SIGNATURE_KEY;const maibMiaApiRequest = MaibMiaApiRequest.create(MaibMiaSdk.SANDBOX_BASE_URL);
const maibMiaAuth = await maibMiaApiRequest.generateToken(MAIB_MIA_CLIENT_ID, MAIB_MIA_CLIENT_SECRET);
const maibMiaToken = maibMiaAuth.accessToken;const maibMiaExpiresAt = new Date(Date.now() + 24 * 60 * 60 * 1000).toISOString();
const maibMiaQrData = {
'type': 'Dynamic',
'expiresAt': maibMiaExpiresAt,
'amountType': 'Fixed',
'amount': 50.00,
'currency': 'MDL',
'orderId': '123',
'description': 'Order #123',
'callbackUrl': 'https://example.com/callback',
'redirectUrl': 'https://example.com/success'
};
const maibMiaQrCreateResponse = await maibMiaApiRequest.qrCreate(maibMiaQrData, maibMiaToken);const maibMiaRtpData = {
'alias': '3736xxxxxxx',
'amount': 150.00,
'expiresAt': maibMiaExpiresAt,
'currency': 'MDL',
'description': 'Invoice #123',
'orderId': '123',
'terminalId': 'P011111',
'callbackUrl': 'https://example.com/callback',
'redirectUrl': 'https://example.com/success'
};
const maibMiaRtpCreateResponse = await maibMiaApiRequest.rtpCreate(maibMiaRtpData, maibMiaToken);const callbackData = {
'result': {
'qrId': 'c3108b2f-6c2e-43a2-bdea-123456789012',
'extensionId': '3fe7f013-23a6-4d09-a4a4-123456789012',
'qrStatus': 'Paid',
'payId': 'eb361f48-bb39-45e2-950b-123456789012',
'referenceId': 'MIA0001234567',
'orderId': '123',
'amount': 50.00,
'commission': 0.1,
'currency': 'MDL',
'payerName': 'TEST QR PAYMENT',
'payerIban': 'MD88AG000000011621810140',
'executedAt': '2025-04-18T14:04:11.81145+00:00',
'terminalId': null
},
'signature': 'fHM+l4L1ycFWZDRTh/Vr8oybq1Q1xySdjyvmFQCmZ4s='
};
const validateCallbackResult = MaibMiaSdk.validateCallbackSignature(callbackData, MAIB_MIA_SIGNATURE_KEY);const qrId = maibMiaQrCreateResponse.qrId;
const maibMiaQrDetailsResponse = await maibMiaApiRequest.qrDetails(qrId, maibMiaToken);const maibTestPayData = {
'qrId': qrId,
'amount': maibMiaQrData.amount,
'iban': 'MD88AG000000011621810140',
'currency': maibMiaQrData.currency,
'payerName': 'TEST QR PAYMENT'
};
const maibMiaTestPayResponse = await maibMiaApiRequest.testPay(maibTestPayData, maibMiaToken);const payId = maibMiaTestPayResponse.payId;
const maibMiaPaymentDetailsResponse = await maibMiaApiRequest.paymentDetails(payId, maibMiaToken);const maibMiaPaymentRefundData = {
'reason': 'Test refund reason',
// 'amount': 25.00, // Optional: for partial refund
// 'callbackUrl': 'https://example.com/refund' // Optional
};
const maibMiaPaymentRefundResponse = await maibMiaApiRequest.paymentRefund(payId, maibMiaPaymentRefundData, maibMiaToken);