exports.dokuPayment = async (req, res) => {
// doku payment gateway
const DOKU_BASE_URL = 'https://api-sandbox.doku.com';
const client_id = "BRN-xxxx-xxxxxxxxxxx"; // Ganti dengan Client-ID Anda
const secret_key = "SK-xxxxxxxxxxxx"; // Ganti dengan Secret-Key Anda
const url = "/checkout/v1/payment";
// Fungsi untuk mendapatkan timestamp terbaru
function getCurrentTimestamp() {
return new Date().toISOString().slice(0, 19) + "Z";
}
// Fungsi untuk menghasilkan Digest
function generateDigest(jsonBody) {
let jsonStringHash256 = crypto
.createHash("sha256")
.update(jsonBody, "utf-8")
.digest();
let bufferFromJsonStringHash256 = Buffer.from(jsonStringHash256);
return bufferFromJsonStringHash256.toString("base64");
}
// Fungsi untuk menghasilkan Signature
function generateSignature(clientId, requestId, requestTarget, digest, secret) {
let requestTimestamp = getCurrentTimestamp();
let componentSignature = `Client-Id:${clientId}\n`;
componentSignature += `Request-Id:${requestId}\n`;
componentSignature += `Request-Timestamp:${requestTimestamp}\n`;
componentSignature += `Request-Target:${requestTarget}`;
if (digest) {
componentSignature += `\nDigest:${digest}`;
}
let hmac256Value = crypto
.createHmac("sha256", secret)
.update(componentSignature.toString())
.digest();
let bufferFromHmac256Value = Buffer.from(hmac256Value);
let signature = bufferFromHmac256Value.toString("base64");
return "HMACSHA256=" + signature;
}
const request_id = '12'; // Generate unique request ID
const requestTimestamp = getCurrentTimestamp();
let jsonBody = JSON.stringify({
order: {
amount: 1000,
// invoice_number: `INV-${requestTimestamp}`,
invoice_number: 'INV-100',
currency: "IDR",
callback_url: "https://xxx.id/", // Ganti dengan URL callback Anda
callback_url_cancel: "https://xxx.id/", // Ganti dengan URL callback Anda
},
payment: {
payment_due_date: 2,
// payment_method_types: ["QRIS"],
},
customer: {
id: "1",
name: "Zolanda",
email: "[email protected]",
phone: "628121212121",
address: "Jl. Imam Bonjol No 14",
country: "ID",
},
});
let digest = generateDigest(jsonBody);
let headerSignature = generateSignature(client_id, request_id, url, digest, secret_key);
const headers = {
"Client-Id": client_id,
"Request-Id": request_id,
"Request-Timestamp": requestTimestamp,
Signature: headerSignature,
"Content-Type": "application/json",
};
try {
const response = await fetch(DOKU_BASE_URL + url, {
method: "POST",
headers: headers,
body: jsonBody,
});
const data = await response.json();
if (response.ok) {
res.json(data);
} else {
res.status(response.status).json(data);
}
} catch (error) {
res.status(500).json({ error: error.message });
}
};
Comments