Class: OffsitePayments::Integrations::Moneybookers::Notification

Inherits:
Notification
  • Object
show all
Defined in:
lib/offsite_payments/integrations/moneybookers.rb

Constant Summary collapse

FAILED_REASON_CODES =
{
  '1' => "Referred by card issuer",
  '2' => "Invalid Merchant",
  '3' => "Stolen card",
  '4' => "Declined by customer's Card Issuer",
  '5' => "Insufficient funds",
  '8' => "PIN tries exceed - card blocked",
  '9' => "Invalid Transaction",
  '10' => "Transaction frequency limit exceeded",
  '12' => "Invalid credit card or bank account",
  '15' => "Duplicate transaction",
  '19' => "Unknown failure reason. Try again",
  '24' => "Card expired",
  '28' => "Lost/Stolen card",
  '32' => "Card Security Code check failed",
  '37' => "Card restricted by card issuer",
  '38' => "Security violation",
  '42' => "Card blocked by card issuer",
  '44' => "Customer's issuing bank not available",
  '51' => "Processing system error",
  '63' => "Transaction not permitted to cardholder",
  '70' => "Customer failed to complete 3DS",
  '71' => "Customer failed SMS verification",
  '80' => "Fraud engine declined",
  '98' => "Error in communication with provider",
  '99' => "Failure reason not specified"
}.freeze

Instance Attribute Summary

Attributes inherited from Notification

#params, #raw

Instance Method Summary collapse

Methods inherited from Notification

#amount, #empty!, #gross_cents, #initialize, #iso_currency, #valid_sender?

Constructor Details

This class inherits a constructor from OffsitePayments::Notification

Instance Method Details

#acknowledge(authcode = nil) ⇒ Object

Acknowledge the transaction to MoneyBooker. This method has to be called after a new apc arrives. It will verify that all the information we received is correct and will return a ok or a fail. The secret (second credential) has to be provided in the parameter :credential2 when instantiating the Notification object.

Example:

def ipn
  notify = Moneybookers.notification(request.raw_post, :credential2 => 'secret')

  if notify.acknowledge
    ... process order ... if notify.complete?
  else
    ... log possible hacking attempt ...
  end


229
230
231
232
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 229

def acknowledge(authcode = nil)
  fields = [merchant_id, item_id, Digest::MD5.hexdigest(secret.to_s).upcase, merchant_amount, merchant_currency, status_code].join
  md5sig == Digest::MD5.hexdigest(fields).upcase
end

#complete?Boolean

Returns:

  • (Boolean)


116
117
118
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 116

def complete?
  status == 'Completed'
end

#currencyObject

currency of the payment as posted by the merchant on the entry form



186
187
188
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 186

def currency
  params['currency']
end

#failed_reason_codeObject



151
152
153
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 151

def failed_reason_code
  params['failed_reason_code']
end

#grossObject

amount of the payment as posted by the merchant on the entry form (ex. 39.60/39.6/39)



191
192
193
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 191

def gross
  params['amount']
end

#item_idObject



155
156
157
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 155

def item_id
  params['transaction_id']
end

#md5sigObject



176
177
178
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 176

def md5sig
  params['md5sig']
end

#merchant_amountObject

total amount of the payment in Merchants currency (ex 25.46/25.4/25)



201
202
203
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 201

def merchant_amount
  params['mb_amount']
end

#merchant_currencyObject

currency of mb_amount, will always be the same as the currency of the beneficiary’s account at Moneybookers.com



196
197
198
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 196

def merchant_currency
  params['mb_currency']
end

#merchant_idObject

Unique ID from the merchant’s Moneybookers.com account, needed for calculatinon of md5 sig



181
182
183
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 181

def merchant_id
  params['merchant_id']
end

#messageObject



146
147
148
149
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 146

def message
  return unless failed_reason_code
  FAILED_REASON_CODES[failed_reason_code]
end

#payer_emailObject



168
169
170
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 168

def payer_email
  params['pay_from_email']
end

#received_atObject

When was this payment received by the client.



164
165
166
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 164

def received_at
  nil
end

#receiver_emailObject



172
173
174
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 172

def receiver_email
  params['pay_to_email']
end

#secretObject



210
211
212
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 210

def secret
  @options[:credential2]
end

#statusObject

‘2’ Processed – This status is sent when the transaction is processed and the funds have been received on your Moneybookers account. ‘0’ Pending – This status is sent when the customers pays via the pending bank transfer option. Such transactions will auto-process IF the bank transfer is received by Moneybookers. We strongly recommend that you do NOT process the order/transaction in your system upon receipt of a pending status from Moneybookers. ‘-1’ Cancelled – Pending transactions can either be cancelled manually by the sender in their online account history or they will auto-cancel after 14 days if still pending. ‘-2’ Failed – This status is sent when the customer tries to pay via Credit Card or Direct Debit but our provider declines the transaction. If you do not accept Credit Card or Direct Debit payments via Moneybookers (see page 17) then you will never receive the failed status. ‘-3’ Chargeback – This status could be received only if your account is configured to receive chargebacks. If this is the case, whenever a chargeback is received by Moneybookers, a -3 status will be posted on the status_url for the reversed transaction.



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 125

def status
  case status_code
  when '2'
    'Completed'
  when '0'
    'Pending'
  when '-1'
    'Cancelled'
  when '-2'
    'Failed'
  when '-3'
    'Reversed'
  else
    'Error'
  end
end

#status_codeObject



142
143
144
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 142

def status_code
  params['status']
end

#test?Boolean

Was this a test transaction?

Returns:

  • (Boolean)


206
207
208
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 206

def test?
  false
end

#transaction_idObject



159
160
161
# File 'lib/offsite_payments/integrations/moneybookers.rb', line 159

def transaction_id
  params['mb_transaction_id']
end