Module: Bayarcash::CallbackVerifications

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

Overview

Callback verification, one verifier per callback type.

Each verifier reconstructs the exact payload the gateway signs, computes the HMAC-SHA256 checksum and compares it against the supplied checksum using a constant-time comparison (see SecurityUtils.secure_compare).

Instance Method Summary collapse

Instance Method Details

#verify_direct_debit_authorization_callback_data(callback_data, secret_key) ⇒ Boolean

Verify a direct-debit authorization callback.

NOTE: this payload MUST include application_type (the gateway signs it); omitting it causes every genuine authorization callback to fail verification.

Parameters:

  • callback_data (Hash)
  • secret_key (String)

Returns:

  • (Boolean)


40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/bayarcash/callback_verifications.rb', line 40

def verify_direct_debit_authorization_callback_data(callback_data, secret_key)
  payload = {
    "record_type"               => cb(callback_data, "record_type"),
    "transaction_id"            => cb(callback_data, "transaction_id"),
    "mandate_id"                => cb(callback_data, "mandate_id"),
    "application_type"          => cb(callback_data, "application_type"),
    "exchange_reference_number" => cb(callback_data, "exchange_reference_number"),
    "exchange_transaction_id"   => cb(callback_data, "exchange_transaction_id"),
    "order_number"              => cb(callback_data, "order_number"),
    "currency"                  => cb(callback_data, "currency"),
    "amount"                    => cb(callback_data, "amount"),
    "payer_name"                => cb(callback_data, "payer_name"),
    "payer_email"               => cb(callback_data, "payer_email"),
    "payer_bank_name"           => cb(callback_data, "payer_bank_name"),
    "status"                    => cb(callback_data, "status"),
    "status_description"        => cb(callback_data, "status_description"),
    "datetime"                  => cb(callback_data, "datetime")
  }

  verify_callback(callback_data, payload, secret_key)
end

#verify_direct_debit_bank_approval_callback_data(callback_data, secret_key) ⇒ Boolean

Verify a direct-debit bank-approval callback.

Parameters:

  • callback_data (Hash)
  • secret_key (String)

Returns:

  • (Boolean)


15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/bayarcash/callback_verifications.rb', line 15

def verify_direct_debit_bank_approval_callback_data(callback_data, secret_key)
  payload = {
    "record_type"              => cb(callback_data, "record_type"),
    "approval_date"            => cb(callback_data, "approval_date"),
    "approval_status"          => cb(callback_data, "approval_status"),
    "mandate_id"               => cb(callback_data, "mandate_id"),
    "mandate_reference_number" => cb(callback_data, "mandate_reference_number"),
    "order_number"             => cb(callback_data, "order_number"),
    "payer_bank_code_hashed"   => cb(callback_data, "payer_bank_code_hashed"),
    "payer_bank_code"          => cb(callback_data, "payer_bank_code"),
    "payer_bank_account_no"    => cb(callback_data, "payer_bank_account_no"),
    "application_type"         => cb(callback_data, "application_type")
  }

  verify_callback(callback_data, payload, secret_key)
end

#verify_direct_debit_transaction_callback_data(callback_data, secret_key) ⇒ Boolean

Verify a direct-debit transaction callback.

Parameters:

  • callback_data (Hash)
  • secret_key (String)

Returns:

  • (Boolean)


67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/bayarcash/callback_verifications.rb', line 67

def verify_direct_debit_transaction_callback_data(callback_data, secret_key)
  payload = {
    "record_type"              => cb(callback_data, "record_type"),
    "batch_number"             => cb(callback_data, "batch_number"),
    "mandate_id"               => cb(callback_data, "mandate_id"),
    "mandate_reference_number" => cb(callback_data, "mandate_reference_number"),
    "transaction_id"           => cb(callback_data, "transaction_id"),
    "datetime"                 => cb(callback_data, "datetime"),
    "reference_number"         => cb(callback_data, "reference_number"),
    "amount"                   => cb(callback_data, "amount"),
    "status"                   => cb(callback_data, "status"),
    "status_description"       => cb(callback_data, "status_description"),
    "cycle"                    => cb(callback_data, "cycle")
  }

  verify_callback(callback_data, payload, secret_key)
end

#verify_pre_transaction_callback_data(callback_data, secret_key) ⇒ Boolean

Verify a pre-transaction callback (sent before the transaction record).

Parameters:

  • callback_data (Hash)
  • secret_key (String)

Returns:

  • (Boolean)


136
137
138
139
140
141
142
143
144
# File 'lib/bayarcash/callback_verifications.rb', line 136

def verify_pre_transaction_callback_data(callback_data, secret_key)
  payload = {
    "record_type"               => cb(callback_data, "record_type"),
    "exchange_reference_number" => cb(callback_data, "exchange_reference_number"),
    "order_number"              => cb(callback_data, "order_number")
  }

  verify_callback(callback_data, payload, secret_key)
end

#verify_return_url_callback_data(callback_data, secret_key) ⇒ Boolean

Verify a return-url callback (payer redirect).

Parameters:

  • callback_data (Hash)
  • secret_key (String)

Returns:

  • (Boolean)


115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
# File 'lib/bayarcash/callback_verifications.rb', line 115

def verify_return_url_callback_data(callback_data, secret_key)
  payload = {
    "transaction_id"            => cb(callback_data, "transaction_id"),
    "exchange_reference_number" => cb(callback_data, "exchange_reference_number"),
    "exchange_transaction_id"   => cb(callback_data, "exchange_transaction_id"),
    "order_number"              => cb(callback_data, "order_number"),
    "currency"                  => cb(callback_data, "currency"),
    "amount"                    => cb(callback_data, "amount"),
    "payer_bank_name"           => cb(callback_data, "payer_bank_name"),
    "status"                    => cb(callback_data, "status"),
    "status_description"        => cb(callback_data, "status_description")
  }

  verify_callback(callback_data, payload, secret_key)
end

#verify_transaction_callback_data(callback_data, secret_key) ⇒ Boolean

Verify a transaction callback (sent to your callback_url).

Parameters:

  • callback_data (Hash)
  • secret_key (String)

Returns:

  • (Boolean)


90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
# File 'lib/bayarcash/callback_verifications.rb', line 90

def verify_transaction_callback_data(callback_data, secret_key)
  payload = {
    "record_type"               => cb(callback_data, "record_type"),
    "transaction_id"            => cb(callback_data, "transaction_id"),
    "exchange_reference_number" => cb(callback_data, "exchange_reference_number"),
    "exchange_transaction_id"   => cb(callback_data, "exchange_transaction_id"),
    "order_number"              => cb(callback_data, "order_number"),
    "currency"                  => cb(callback_data, "currency"),
    "amount"                    => cb(callback_data, "amount"),
    "payer_name"                => cb(callback_data, "payer_name"),
    "payer_email"               => cb(callback_data, "payer_email"),
    "payer_bank_name"           => cb(callback_data, "payer_bank_name"),
    "status"                    => cb(callback_data, "status"),
    "status_description"        => cb(callback_data, "status_description"),
    "datetime"                  => cb(callback_data, "datetime")
  }

  verify_callback(callback_data, payload, secret_key)
end