Integrasi PayKu

by Simple Gateway

15
Raw
//Code untuk penggunaan/pengujian menggunakan eval code

// Channel WhatsApp
/*
- https://whatsapp.com/channel/0029VbBAUUd4dTnQIJYRlX3T
*/

const createTransactionComplete = async (transactionData) => {
  const crypto = require('crypto');
  const axios = require('axios');
  const apiKey = "PAYKU_1234567890";
  const secretKey = "11111aaaaa22222bbbbbb333333cccccccc";
  const baseURL = "https://payku.my.id";
  const timestamp = Date.now().toString();
  const payload = { ...transactionData, timestamp };
  const sortedKeys = Object.keys(payload).sort();
  const stringToSign = sortedKeys.map(k => `${k}=${payload[k]}`).join('&');
  const signature = crypto.createHmac('sha256', secretKey).update(stringToSign).digest('hex');

  try {
    const response = await axios.post(`${baseURL}/api/create-transaction`, transactionData, {
      headers: {
        'x-api-key': apiKey,
        'x-signature': signature,
        'x-timestamp': timestamp,
        'Content-Type': 'application/json'
      }
    });
    
    if (response.data && response.data.success) {
      return {
        success: true,
        data: response.data.data,
        message: response.data.message || 'Transaction created successfully'
      };
    } else {
      throw new Error(response.data?.message || 'Unknown error from API');
    }
    
  } catch (error) {
    if (error.response) {
      const errorMsg = error.response.data?.message || error.response.statusText || 'API Error';
      throw new Error(`API Error [${error.response.status}]: ${errorMsg}`);
    } else if (error.request) {
      throw new Error('Network Error: Unable to connect to payment gateway');
    } else {
      throw new Error(`Transaction failed: ${error.message}`);
    }
  }
};

(async () => {
  try {
    const timestamp = Date.now().toString();
    const result = await createTransactionComplete({
      external_id: "EVAL" + timestamp,
      amount: 1000, // Ganti nominal test (Bebas)
      description: "Test Payku",
      customer_name: "Demo",
      customer_email: "demo@gmail.com",
      customer_phone: "08123456789",
      webhook_url: "https://payku.my.id/webhook"
    });

    if (result.success && result.data) {
      console.log('Transaction ID:', result.data.transaction_id);
      console.log('Payment URL:', result.data.payment_url);
      console.log('QRIS URL:', result.data.qris_url);
    }
    
  } catch (error) {
    console.error('❌ Transaction Error:', error.message);
  }
})();