Tagih.id

Hash-Based Signature

Signature adalah kode unik yang digunakan untuk menjaga keamanan dan keaslian data saat terjadi transaksi. Signature dibuat menggunakan algoritma kriptografi seperti RSA dan SHA-256. Setiap menerima request, Espay akan melakukan validasi terhadap signature yang diterimanya, untuk memastikan data transaksi berasal dari Anda dan tidak diubah saat proses transmissi.

Setiap layanan Espay memiliki format parameter yang berbeda-beda dalam pembuatan signature-nya. Berikut ini format kombinasi parameter beserta layanannya:

Layanan Pesan Kombinasi
Payment Notification
Kunjungi layanan di sini.

Request

Signature Key + rq_datetime + trx_id + collector + total_amount + PAYMENTREPORT
Send Multiple Invoice
Kunjungi layanan di sini.

Request

rq_uuid + rq_datetime + comm_code + signature key + SENDINVOICEMULTI
Komponen Signature
Komponen Keterangan
collector
Identitas kolektor.
comm_code
Kode wilayah member.
rq_datetime
Tanggal dan waktu request transaksi.

Contoh:
2024-01-01 14:39:11
rq_uuid
Request identifier. ID unik yang digunakan untuk mengidentifikasi pesan.
Signature Key
Signature key yang diberikan oleh tim Espay.

Contoh:
s8qndd0ghZdrl04r
total_amount
Total tagihan yang sudah dibayar.

Format:
250000
trx_id
ID transaksi dari Espay.
Langkah Pembuatan Signature

Berikut ini langkah-langkah untuk membuat signature berdasarkan kebutuhan layanan yang digunakan:

  1. Gabungkan kombinasi signature yang sudah ditentukan oleh Espay menggunakan "##".
  • Contoh Layanan Send Multiple Invoice
Format kombinasi
##rq_uuid##rq_datetime##comm_code##signature key##SENDINVOICEMULTI##
##4445a53b-4bac-4159-ac69-f02149f53302##2021-06-2313:29:49##SGWYESSISHOP##zwvqhkqqo4gvfwwk##SENDINVOICEMULTI##
  1. Ubah kombinasi yang sudah disatukan pada langkah 1, menjadi Uppercase.
  • Contoh Layanan Send Multiple Invoice
Format sebelum uppercase
##4445a53b-4bac-4159-ac69-f02149f53302##2021-06-2313:29:49##SGWYESSISHOP##zwvqhkqqo4gvfwwk##SENDINVOICEMULTI##
Format setelah uppercase
##4445A53B-4BAC-4159-AC69-F02149F53302##2021-06-2313:29:49##SGWYESSISHOP##ZWVQHKQQO4GVFWWK##SENDINVOICEMULTI##
  1. Ubah format menggunakan hash dengan algoritma SHA-256.
  • Contoh Layanan Send Multiple Invoice
Format sebelum hash SHA-256
##4445A53B-4BAC-4159-AC69-F02149F53302##2021-06-2313:29:49##SGWYESSISHOP##ZWVQHKQQO4GVFWWK##SENDINVOICEMULTI##
Format setelah hash SHA-256
adceabc20f3d11ba1c0e9ea3c2fd58c59406823a5644222ca5cfabd56194f157




Generate Signature untuk Payment Notification

// Input parameter
$signature_key   = 'zwvqhkqqo4gvfwwk';
$rq_datetime     = '2021-06-2313:29:49';
$trx_id          = 'ESP1624429732I2O3';
$collector       = '[email protected]';
$total_amount    = '4000';
$action          = 'PAYMENTREPORT';

// 1. Gabungkan dengan '##' sebagai pemisah
$rawString = "##$signature_key##$rq_datetime##$trx_id##$collector##$total_amount##$action##";

// 2. Ubah ke UPPERCASE
$upperString = strtoupper($rawString);

// 3. Hash dengan SHA-256
$signature = hash('sha256', $upperString);

// Tampilkan hasil (opsional)
echo "Format awal:\n " . $rawString;
echo "\n\nFormat setelah uppercase:\n " . $upperString;
echo "\n\nSignature key:\n " . $signature;
                
            




Generate Signature untuk Payment Notification

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class SignatureGenerator {
    public static void main(String[] args) {
        // Input parameter
        String signatureKey  = "zwvqhkqqo4gvfwwk";
        String rqDatetime    = "2021-06-2313:29:49";
        String trxId         = "ESP1624429732I2O3";
        String collector     = "[email protected]";
        String totalAmount   = "4000";
        String action        = "PAYMENTREPORT";

        // 1. Gabungkan dengan '##' sebagai pemisah
        String rawString = "##" + signatureKey + "##" + rqDatetime + "##" + trxId + "##" + collector + "##" + totalAmount + "##" + action + "##";

        // 2. Ubah ke UPPERCASE
        String upperString = rawString.toUpperCase();

        // 3. Hash dengan SHA-256
        String signature = sha256(upperString);

        // Tampilkan hasil
        System.out.println("Format awal:\n" + rawString);
        System.out.println("\nFormat setelah uppercase:\n" + upperString);
        System.out.println("\nSignature key:\n" + signature);
    }

    // Fungsi untuk menghasilkan hash SHA-256
    public static String sha256(String input) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(input.getBytes(StandardCharsets.UTF_8));

            // Konversi byte array ke hex string
            StringBuilder hexString = new StringBuilder();
            for (byte b : hash) {
                String hex = String.format("%02x", b);
                hexString.append(hex);
            }
            return hexString.toString();

        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("SHA-256 algorithm not found");
        }
    }
}
                
              




Generate Signature untuk Payment Notification

const crypto = require('crypto');

// Input parameter
const signatureKey = 'zwvqhkqqo4gvfwwk';
const rqDatetime = '2021-06-2313:29:49';
const trxId = 'ESP1624429732I2O3';
const collector = '[email protected]';
const totalAmount = '4000';
const action = 'PAYMENTREPORT';

// 1. Gabungkan dengan '##' sebagai pemisah
const rawString = `##${signatureKey}##${rqDatetime}##${trxId}##${collector}##${totalAmount}##${action}##`;

// 2. Ubah ke UPPERCASE
const upperString = rawString.toUpperCase();

// 3. Hash dengan SHA-256
const hash = crypto.createHash('sha256').update(upperString).digest('hex');

// Tampilkan hasil
console.log('Format awal:\n', rawString);
console.log('\nFormat setelah uppercase:\n', upperString);
console.log('\nSignature key:\n', hash);
                
              
Scroll to Top