Quick Start

Good to know: A quick start guide can be good to help folks get up and running with your API in a few steps. Some people prefer diving in with the basics rather than meticulously reading every page of documentation!

Get your API keys

Your API requests are authenticated using API keys. Any request that doesn't include an API key will return an error.

You can contact HUSKY to generate an API key.

Request Headers

Each API request must include these headers

x-appid

App ID

x-signature

Signature of the request body

Signature

We use "pbkdf2"

1) Prepare payload by sort keys of the payload object by alphabet and serial to JSON string,

function sortKeysFor(obj) {
    return Object.keys(obj).sort().reduce(function(map, key) {
        map[key] = obj[key]
      return map
    }, {})
}
const payloadText =  <App ID> + ':' + JSON.stringify(<Sorted Payload Object>)

2) Generate signature

import Crypto from 'crypto'

public generateSignature(payload, AppID, AppSecret) {
    const serialzePayload =  `${AppID}:${JSON.stringify(sortKeysFor(payload))}`
    return Crypto.pbkdf2Sync(serialzePayload, <App Secret>, 1000, 64, 'sha512').toString('hex')
}

3) Send a request

async function sendHuskyPayAPI(payload, action, method = 'POST') {
    const serializePayload = JSON.stringify(sortKeysFor(payload))
    const signedText = await generateSign(jsonPayload)

    const axiosConfig: AxiosRequestConfig = {
      method,
      url: Env.get('HUSKYPAY_ENDPOINT') + '/' + action,
      headers: {
        'x-appid':  <AppID>,
        'x-signature': signedText,
        'Content-Type': 'application/json'
      },
      data : serializePayload
    };

    const { data: apiResult } = await axios(axiosConfig)
    return apiResult
}

4) Mixed together

import Crypto from 'crypto'
import moment from 'moment-timezone'
import axios, { AxiosRequestConfig } from 'axios';

export default class HuskyPay {

  public static action: Object = {
    TOPUP: 'payment/deposit',
    WITHDRAW: 'payment/withdraw',
    TRANSACTIONS: 'payment/report/transactions',
    AGENTINFO: 'agent/info',
    AGENT_UPDATE_CALLBACK: 'agent/callback',
  }

  public static status = {
    PROCESSING: 0,
    SUCCESS: 1,
    FAILED: 2,
    CANCELLED: 3
  }

  public static bankCodeMap: Object = {
    "014" : "SCB",
    "002" : "BBL",
    "004" : "KBANK",
    "006" : "KTB",
    "034" : "BAAC",
    "011" : "TTB",
    "070" : "ICBC",
    "071" : "TCRB",
    "017" : "CITI",
    "020" : "SCBN",
    "022" : "CIMB",
    "024" : "UOBT",
    "025" : "BAY",
    "030" : "GSB",
    "031" : "HSBC",
    "039" : "MHCB",
    "033" : "GHB",
    "073" : "LHBANK",
    "065" : "TTB",
    "067" : "TISCO",
    "069" : "KKP",
    "066" : "IBANK",
    "TMW" : "Truemoney"
  }

  public static appID() {
    return process.env.HUSKYPAY_APPID
  }

  private static _appSecret() {
    return process.env.HUSKYPAY_SECRET
  }

  private static _sortKeysFor(obj) {
    return Object.keys(obj).sort().reduce(function(map, key) {
        map[key] = obj[key]
      return map
    }, {})
  }

  public static generateSignature(_payload) {
    const rawPayloadText = HuskyPay.appID() + ':' + _payload
    return Crypto.pbkdf2Sync(rawPayloadText, HuskyPay._appSecret(), 1000, 64, 'sha512').toString('hex')
  }
  
  public static verifySignature(receivedSignature, receivedPayload) {
    const jsonPayload = JSON.stringify(HuskyPay._sortKeysFor(receivedPayload))
    const signedText = await HuskyPay.generateSignature(jsonPayload)
    return receivedSignature === signedText
  }

  public static async sendHuskyPayAPI(action, payload, method = 'post') {
    const jsonPayload = JSON.stringify(HuskyPay._sortKeysFor(payload))
    const signatureText = await HuskyPay.generateSignature(jsonPayload)

    const axiosConfig: AxiosRequestConfig = {
      method: method,
      url: process.env.HUSKYPAY_ENDPOINT + '/' + action,
      headers: {
        'x-appid':  HuskyPay.appID(),
        'x-signature': signatureText,
        'Content-Type': 'application/json'
      },
      data : jsonPayload
    };

    const { data: apiResult } = await axios(axiosConfig)
    return apiResult
  }
}

Bank Code

No
Bank Name
Bank Code

1

KBANK

ธนาคารกสิกรไทย

2

SCB

ธนาคารไทยพาณิชย์

3

BBL

ธนาคารกรุงเทพ

4

BAY

ธนาคารกรุงศรีอยุธยา

5

KTB

ธนาคารกรุงไทย

6

TTB

ธนาคารทหารไทยธนชาต

7

GSB

ธนาคารออมสิน

8

BAAC

ธนาคารเพื่อการเกษตรและสหกรณ์การเกษตร

9

CIMB

ธนาคารซีไอเอ็มบีไทย

10

UOB

ธนาคารยูโอบี

11

KKP

ธนาคารเกียรตินาคินภัทร

12

TISCO

ธนาคารทิสโก้

13

CITI

ธนาคารซิตี้แบงก์

14

GHB

ธนาคารอาคารสงเคราะห์

15

SCBT

ธนาคารสแตนดาร์ดชาร์เตอร์ด ประเทศไทย

16

BOC

Bank of China

17

LHBANK

ธนาคารแลนด์ แอนด์ เฮ้าส์ จำกัด (มหาชน)

18

ICBC

ธนาคารพาณิชย์อุตสาหกรรมแห่งประเทศจีน

19

IBANK

ธนาคารอิสลามแห่งประเทศไทย

Limitation

Deposit

Min 10

Max 200,000

Withdraw

Min 100

Max 200,000

Last updated