UNPKG

@foxdev/pg-orkut

Version:

simple payment gateway order kuota with qris

79 lines (65 loc) 2.25 kB
import axios from "axios"; import { getCurrentDateTimeInIndoTime, ConvertCRC16, generateReffId, } from "./utils.js"; export function createPayment(scannedData, amount, timezone = "WIB") { if (!scannedData.includes("010211") || !scannedData.includes("5802ID")) { throw new Error("Format QRIS tidak valid"); } const updatedQris = scannedData.slice(0, -4); const fixedHeader = updatedQris.replace("010211", "010212"); const tag54 = `54${amount .toString() .length.toString() .padStart(2, "0")}${amount}`; const insertAfter = fixedHeader.indexOf("5802ID"); const beforeTag58 = fixedHeader.slice(0, insertAfter); const afterTag58 = fixedHeader.slice(insertAfter); let payload = beforeTag58 + tag54 + afterTag58; const crc = ConvertCRC16(payload); payload += crc; const qr_url = `https://api.qrserver.com/v1/create-qr-code/?size=300x300&margin=10&&data=${encodeURIComponent( payload )}`; const reff_id = generateReffId(); return { qr_url, reff_id, nominal: amount, created_at: getCurrentDateTimeInIndoTime(timezone), }; } export async function cekStatus(merchant, apiorkut, timezone = "WIB") { if (!merchant || !apiorkut) { throw new Error( "Parameter tidak lengkap. Perlu 'merchant' dan 'apiorkut'." ); } try { const url = `https://gateway.okeconnect.com/api/mutasi/qris/${merchant}/${apiorkut}`; const response = await axios.get(url); const statusData = response.data; if (!statusData.data) { return { status: true, message: "no data", data: [], }; } const validateDate = getCurrentDateInIndoTime(timezone); const currentDate = validateDate.split(" ")[0]; const filteredData = statusData.data.filter((transaction) => { const transactionDate = transaction.date.split(" ")[0]; return transactionDate === currentDate && transaction.type === "CR"; }); return { status: true, message: filteredData.length === 0 ? "no data" : "success", data: filteredData, }; } catch (error) { throw new Error("Terjadi kesalahan saat mengambil data dari API eksternal"); } }