UNPKG

@gmisoftware/przelewy24-payments-medusa

Version:

Przelewy24 (P24) payment integration plugin for Medusa e-commerce with BLIK, cards, and general P24 support.

153 lines 10.9 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.P24ApiService = void 0; const crypto_1 = __importDefault(require("crypto")); class P24ApiService { constructor(options) { this.options = options; this.baseURL = options.sandbox ? "https://sandbox.przelewy24.pl/api/v1" : "https://secure.przelewy24.pl/api/v1"; } /** * Register a new transaction with P24 */ async registerTransaction(data) { const requestData = { merchantId: parseInt(this.options.merchant_id), posId: parseInt(this.options.pos_id), sessionId: data.sessionId, amount: data.amount, currency: data.currency, description: data.description, email: data.email, country: data.country, language: data.language, urlReturn: data.urlReturn, urlStatus: data.urlStatus, sign: this.generateSign({ sessionId: data.sessionId, merchantId: parseInt(this.options.merchant_id), amount: data.amount, currency: data.currency, crc: this.options.crc, }), }; return this.makeRequest("/transaction/register", "POST", requestData); } /** * Verify a transaction with P24 */ async verifyTransaction(sessionId, amount, currency, orderId) { const data = { merchantId: parseInt(this.options.merchant_id), posId: parseInt(this.options.pos_id), sessionId, amount, currency, orderId, sign: this.generateVerificationSign({ sessionId, orderId, amount, currency, crc: this.options.crc, }), }; return this.makeRequest("/transaction/verify", "PUT", data); } /** * Get transaction details by session ID */ async getTransactionBySessionId(sessionId) { const endpoint = `/transaction/by/sessionId/${sessionId}`; return this.makeRequest(endpoint, "GET"); } /** * Process a refund */ async processRefund(refundData) { return this.makeRequest("/transaction/refund", "POST", refundData); } /** * Charge payment using BLIK code * This is the main BLIK payment method */ async chargeBlikByCode(data) { const requestData = { token: data.token, blikCode: data.blikCode, }; return this.makeRequest("/paymentMethod/blik/chargeByCode", "POST", requestData); } /** * Make a generic request to P24 API */ async makeRequest(endpoint, method, data) { const url = `${this.baseURL}${endpoint}`; // P24 uses Basic authentication: pos_id as username, api_key as password const credentials = Buffer.from(`${this.options.pos_id}:${this.options.api_key}`).toString("base64"); const response = await fetch(url, { method, headers: { "Content-Type": "application/json", Authorization: `Basic ${credentials}`, }, body: data ? JSON.stringify(data) : undefined, }); if (!response.ok) { throw new Error(`P24 API request failed: ${response.status} ${response.statusText}`); } return response.json(); } /** * Generate signature for transaction registration */ generateSign(data) { const jsonString = JSON.stringify(data, null, 0).replace(/\\\//g, "/"); return crypto_1.default.createHash("sha384").update(jsonString, "utf8").digest("hex"); } /** * Generate signature for transaction verification */ generateVerificationSign(data) { const jsonString = JSON.stringify(data, null, 0).replace(/\\\//g, "/"); return crypto_1.default.createHash("sha384").update(jsonString, "utf8").digest("hex"); } /** * Verify webhook signature */ verifyWebhookSignature(payload, receivedSign) { const signData = { merchantId: parseInt(this.options.merchant_id), posId: parseInt(this.options.pos_id), sessionId: payload.sessionId, amount: payload.amount, originAmount: payload.originAmount, currency: payload.currency, orderId: payload.orderId, methodId: payload.methodId, statement: payload.statement, crc: this.options.crc, }; const jsonString = JSON.stringify(signData, null, 0).replace(/\\\//g, "/"); const expectedSign = crypto_1.default .createHash("sha384") .update(jsonString, "utf8") .digest("hex"); return expectedSign === receivedSign; } /** * Get base redirect URL for P24 */ getBaseRedirectURL() { return this.options.sandbox ? "https://sandbox.przelewy24.pl/trnRequest" : "https://secure.przelewy24.pl/trnRequest"; } } exports.P24ApiService = P24ApiService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicDI0LWFwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9wcm92aWRlcnMvcHJ6ZWxld3kyNC9zZXJ2aWNlcy9wMjQtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLG9EQUE0QjtBQWM1QixNQUFhLGFBQWE7SUFJeEIsWUFBWSxPQUFtQjtRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUN2QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPO1lBQzVCLENBQUMsQ0FBQyxzQ0FBc0M7WUFDeEMsQ0FBQyxDQUFDLHFDQUFxQyxDQUFDO0lBQzVDLENBQUM7SUFFRDs7T0FFRztJQUNILEtBQUssQ0FBQyxtQkFBbUIsQ0FDdkIsSUFBb0I7UUFFcEIsTUFBTSxXQUFXLEdBQUc7WUFDbEIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQztZQUM5QyxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDO1lBQ3BDLFNBQVMsRUFBRSxJQUFJLENBQUMsU0FBUztZQUN6QixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO1lBQ3ZCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztZQUM3QixLQUFLLEVBQUUsSUFBSSxDQUFDLEtBQUs7WUFDakIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFFBQVEsRUFBRSxJQUFJLENBQUMsUUFBUTtZQUN2QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7WUFDekIsU0FBUyxFQUFFLElBQUksQ0FBQyxTQUFTO1lBQ3pCLElBQUksRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDO2dCQUN0QixTQUFTLEVBQUUsSUFBSSxDQUFDLFNBQVM7Z0JBQ3pCLFVBQVUsRUFBRSxRQUFRLENBQUMsSUFBSSxDQUFD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