Module: Bayarcash::ChecksumGenerator

Included in:
Client
Defined in:
lib/bayarcash/checksum_generator.rb

Overview

Checksum generation (HMAC-SHA256), byte-compatible with the gateway.

The recipe is always the same: sort the payload hash by KEY ascending, join the VALUES with "|", then HMAC-SHA256 with the merchant secret key and return the lowercase hex digest.

Instance Method Summary collapse

Instance Method Details

#create_checksum_value(secret_key, payload) ⇒ String

Generic checksum primitive: ksort by key, implode values with "|", HMAC-SHA256.

Parameters:

  • secret_key (String)
  • payload (Hash)

Returns:

  • (String)

    lowercase hex HMAC-SHA256 digest



15
16
17
# File 'lib/bayarcash/checksum_generator.rb', line 15

def create_checksum_value(secret_key, payload)
  hmac_from_payload(secret_key, payload)
end

#create_fpx_direct_debit_enrolment_checksum_value(secret_key, data) ⇒ String

Checksum for an FPX Direct Debit enrolment request.

Parameters:

  • secret_key (String)
  • data (Hash)

Returns:

  • (String)


55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
# File 'lib/bayarcash/checksum_generator.rb', line 55

def create_fpx_direct_debit_enrolment_checksum_value(secret_key, data)
  payload = {
    "order_number"           => fetch_field(data, "order_number"),
    "amount"                 => fetch_field(data, "amount"),
    "payer_name"             => fetch_field(data, "payer_name"),
    "payer_email"            => fetch_field(data, "payer_email"),
    "payer_telephone_number" => fetch_field(data, "payer_telephone_number"),
    "payer_id_type"          => fetch_field(data, "payer_id_type"),
    "payer_id"               => fetch_field(data, "payer_id"),
    "application_reason"     => fetch_field(data, "application_reason"),
    "frequency_mode"         => fetch_field(data, "frequency_mode")
  }

  hmac_from_payload(secret_key, payload)
end

#create_fpx_direct_debit_maintenance_checksum_value(secret_key, data) ⇒ String

Checksum for an FPX Direct Debit maintenance request.

Parameters:

  • secret_key (String)
  • data (Hash)

Returns:

  • (String)


76
77
78
79
80
81
82
83
84
85
86
# File 'lib/bayarcash/checksum_generator.rb', line 76

def create_fpx_direct_debit_maintenance_checksum_value(secret_key, data)
  payload = {
    "amount"                 => fetch_field(data, "amount"),
    "payer_email"            => fetch_field(data, "payer_email"),
    "payer_telephone_number" => fetch_field(data, "payer_telephone_number"),
    "application_reason"     => fetch_field(data, "application_reason"),
    "frequency_mode"         => fetch_field(data, "frequency_mode")
  }

  hmac_from_payload(secret_key, payload)
end

#create_payment_inten_checksum_value(secret_key, data) ⇒ Object

Old typo version, kept for backward compatibility.



46
47
48
# File 'lib/bayarcash/checksum_generator.rb', line 46

def create_payment_inten_checksum_value(secret_key, data)
  create_payment_intent_checksum_value(secret_key, data)
end

#create_payment_intent_checksum_value(secret_key, data) ⇒ String

Checksum for a payment intent request.

Signs payment_channel (comma-joined when an array/multiple, empty when none), order_number, amount, payer_name and payer_email.

Parameters:

  • secret_key (String)
  • data (Hash)

Returns:

  • (String)


27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/bayarcash/checksum_generator.rb', line 27

def create_payment_intent_checksum_value(secret_key, data)
  payment_channel = fetch_field(data, "payment_channel", [])
  payment_channel = [payment_channel] unless payment_channel.is_a?(Array)
  payment_channel = payment_channel.join(",")

  payload = {
    "payment_channel" => payment_channel,
    "order_number"    => fetch_field(data, "order_number"),
    "amount"          => fetch_field(data, "amount"),
    "payer_name"      => fetch_field(data, "payer_name"),
    "payer_email"     => fetch_field(data, "payer_email")
  }

  hmac_from_payload(secret_key, payload)
end