SMS & Whatsapp Gateway

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.
Layanan Gabungan Parameter
Send SMS dan
Send WhatsApp
sender_id + rq_uuid + message_type + phone_number + signature_key

Komponen Signature

Komponen Keterangan
sender_id
Sender id yang diberikan oleh tim Espay.
rq_uuid
Request identifier. ID unik yang digunakan untuk mengidentifikasi pesan.
message_type
Jenis pesan.

Format:
  • Send SMS: SMS
  • Send WhatsApp: WA
phone_number
Nomor handphone tujuan.
signature_key
Signature key yang diberikan oleh tim Espay.

Langkah Pembuatan Signature

Proses pembuatan Signature untuk Send SMS dan Send WhatsApp mengikuti langkah yang sama, dengan satu-satunya perbedaan terletak pada nilai message_type. Berikut ini langkah-langkah lengkapnya:
  • sender_id       : SGOPLUS
  • rq_uuid         : smspr-test-011
  • message_type    : SMS
  • phone_number    : 6281218816222
  • signatureKey    : sgoplus201711aa
  1. Gabungkan setiap komponen signature menggunakan tanda pagar (#) sebagai pemisah.
Pada langkah awal, gabungkan sender_id, rq_uuid, message_type, dan phone_number sebagai format awal. signature_key akan ditambahkan di langkah berikutnya.
#sender_id#rq_uuid#message_type#phone_number#
Format awal kombinasi komponen:
#SGOPLUS#smspr-test-011#SMS#6281218816222#
  1. Ubah hasil kombinasi dari langkah 1 menjadi huruf kapital (UPPERCASE).
Format awal kombinasi komponen:
#SGOPLUS#smspr-test-011#SMS#6281218816222#
Format kombinasi komponen setelah uppercase:
#SGOPLUS#SMSPR-TEST-011#SMS#6281218816222#
  1. Tambahkan parameter signature_key pada format komponen yang sudah diuppercase pada langkah 2.
Format kombinasi komponen setelah uppercase:
#SGOPLUS#SMSPR-TEST-011#SMS#6281218816222#
Format kombinasi komponen setelah uppercase + signature_key:
#SGOPLUS#SMSPR-TEST-011#SMS#6281218816222#sgoplus201711aa#
  1. Ubah format gabungan tersebut menjadi hash menggunakan algoritma SHA-256.
Format kombinasi komponen setelah uppercase + signature_key:
#SGOPLUS#SMSPR-TEST-011#SMS#6281218816222#sgoplus201711aa#
Format kombinasi komponen setelah dihash SHA-256:
3ac657060474d31095e27eb49699098c81b317ca9d34e39489c9f77ba80ab758



Generate Signature untuk Send SMS

// Input parameter
$sender_id     = "SGOPLUS";
$rq_uuid       = "smspr-test-011";
$message_type  = "SMS";
$phone_number  = "6281218816222";
$signatureKey  = "sgoplus201711aa";

// 1. Gabungkan dengan '#' sebagai pemisah
$combined = "#" . $sender_id . "#" . $rq_uuid . "#" . $message_type . "#" . $phone_number . "#";

// 2. Ubah ke UPPERCASE
$combined_upper = strtoupper($combined);

// 3. Tambahkan signatureKey di akhir
$combined_with_key = $combined_upper . $signatureKey . "#";

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

// Output signature
echo "Format awal:\n " . $combined;
echo "\n\nFormat setelah uppercase:\n " . $combined_upper;
echo "\n\nFormat setelah penambahan Signature Key:\n " . $combined_with_key;
echo "\n\nSignature key:\n " . $signature;
                
            

Generate Signature untuk Send Whatsapp

// Input parameter
$sender_id     = "SGOPLUS";
$rq_uuid       = "wapr-test-011";
$message_type  = "WA";
$phone_number  = "6281218816222";
$signatureKey  = "sgoplus201711aa";

// 1. Gabungkan dengan '#' sebagai pemisah
$combined = "#" . $sender_id . "#" . $rq_uuid . "#" . $message_type . "#" . $phone_number . "#";

// 2. Ubah ke UPPERCASE
$combined_upper = strtoupper($combined);

// 3. Tambahkan signatureKey di akhir
$combined_with_key = $combined_upper . $signatureKey . "#";

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

// Output signature
echo "Format awal:\n " . $combined;
echo "\n\nFormat setelah uppercase:\n " . $combined_upper;
echo "\n\nFormat setelah penambahan Signature Key:\n " . $combined_with_key;
echo "\n\nSignature key:\n " . $signature;
                
              



Generate Signature untuk Send SMS

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

public class SmsSignatureGenerator {

    public static void main(String[] args) {
        // Input parameter
        String senderId     = "SGOPLUS";
        String rqUuid       = "smspr-test-011";
        String messageType  = "SMS";
        String phoneNumber  = "6281218816222";
        String signatureKey = "sgoplus201711aa";

        // 1. Gabungkan dengan '#' sebagai pemisah
        String combined = "#" + senderId + "#" + rqUuid + "#" + messageType + "#" + phoneNumber + "#";

        // 2. Ubah ke UPPERCASE
        String combinedUpper = combined.toUpperCase();

        // 3. Tambahkan signatureKey di akhir
        String combinedWithKey = combinedUpper + signatureKey + "#";

        // 4. Hash dengan SHA-256
        String signature = sha256(combinedWithKey);

        // Output
        System.out.println("Format awal:\n" + combined);
        System.out.println("\nFormat setelah uppercase:\n" + combinedUpper);
        System.out.println("\nFormat setelah penambahan Signature Key:\n" + combinedWithKey);
        System.out.println("\nSignature key:\n" + signature);
    }

    // Method untuk hashing SHA-256
    public static String sha256(String base) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(base.getBytes(StandardCharsets.UTF_8));
            StringBuilder hexString = new StringBuilder();

            for (byte b : hash) {
                String hex = Integer.toHexString(0xff & b);
                if(hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }

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

Generate Signature untuk Send Whatsapp

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

public class SmsSignatureGenerator {

    public static void main(String[] args) {
        // Input parameter
        String senderId     = "SGOPLUS";
        String rqUuid       = "wapr-test-011";
        String messageType  = "WA";
        String phoneNumber  = "6281218816222";
        String signatureKey = "sgoplus201711aa";

        // 1. Gabungkan dengan '#' sebagai pemisah
        String combined = "#" + senderId + "#" + rqUuid + "#" + messageType + "#" + phoneNumber + "#";

        // 2. Ubah ke UPPERCASE
        String combinedUpper = combined.toUpperCase();

        // 3. Tambahkan signatureKey di akhir
        String combinedWithKey = combinedUpper + signatureKey + "#";

        // 4. Hash dengan SHA-256
        String signature = sha256(combinedWithKey);

        // Output
        System.out.println("Format awal:\n" + combined);
        System.out.println("\nFormat setelah uppercase:\n" + combinedUpper);
        System.out.println("\nFormat setelah penambahan Signature Key:\n" + combinedWithKey);
        System.out.println("\nSignature key:\n" + signature);
    }

    // Method untuk hashing SHA-256
    public static String sha256(String base) {
        try {
            MessageDigest digest = MessageDigest.getInstance("SHA-256");
            byte[] hash = digest.digest(base.getBytes(StandardCharsets.UTF_8));
            StringBuilder hexString = new StringBuilder();

            for (byte b : hash) {
                String hex = Integer.toHexString(0xff & b);
                if(hex.length() == 1) hexString.append('0');
                hexString.append(hex);
            }

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



Generate Signature untuk Send SMS

const crypto = require('crypto');

// Input parameter
const sender_id     = "SGOPLUS";
const rq_uuid       = "smspr-test-011";
const message_type  = "SMS";
const phone_number  = "6281218816222";
const signatureKey  = "sgoplus201711aa";

// 1. Gabungkan dengan '#' sebagai pemisah
let combined = `#${sender_id}#${rq_uuid}#${message_type}#${phone_number}#`;
console.log("Format awal:\n", combined);

// 2. Ubah ke UPPERCASE
let combined_upper = combined.toUpperCase();
console.log("\nFormat setelah uppercase:\n", combined_upper);

// 3. Tambahkan signatureKey di akhir
let combined_with_key = combined_upper + signatureKey + "#";
console.log("\nFormat setelah penambahan Signature Key:\n", combined_with_key);

// 4. Hash dengan SHA-256
let signature = crypto.createHash('sha256').update(combined_with_key).digest('hex');
console.log("\nSignature key:\n", signature);
                
            

Generate Signature untuk Send Whatsapp

const crypto = require('crypto');

// Input parameter
const sender_id     = "SGOPLUS";
const rq_uuid       = "wapr-test-011";
const message_type  = "WA";
const phone_number  = "6281218816222";
const signatureKey  = "sgoplus201711aa";

// 1. Gabungkan dengan '#' sebagai pemisah
let combined = `#${sender_id}#${rq_uuid}#${message_type}#${phone_number}#`;
console.log("Format awal:\n", combined);

// 2. Ubah ke UPPERCASE
let combined_upper = combined.toUpperCase();
console.log("\nFormat setelah uppercase:\n", combined_upper);

// 3. Tambahkan signatureKey di akhir
let combined_with_key = combined_upper + signatureKey + "#";
console.log("\nFormat setelah penambahan Signature Key:\n", combined_with_key);

// 4. Hash dengan SHA-256
let signature = crypto.createHash('sha256').update(combined_with_key).digest('hex');
console.log("\nSignature key:\n", signature);
                
            
Scroll to Top