Class: ActiveMerchant::Billing::SagePayGateway

Inherits:
Gateway
  • Object
show all
Defined in:
lib/active_merchant/billing/gateways/sage_pay.rb

Constant Summary collapse

TEST_URL =
'https://test.sagepay.com/gateway/service'
LIVE_URL =
'https://live.sagepay.com/gateway/service'
SIMULATOR_URL =
'https://test.sagepay.com/Simulator'
APPROVED =
'OK'
REGISTERED =
'REGISTERED'
TRANSACTIONS =
{
  :purchase => 'PAYMENT',
  :credit => 'REFUND',
  :authorization => 'DEFERRED',
  :capture => 'RELEASE',
  :void => 'VOID',
  :abort => 'ABORT',
  :repeat => 'REPEAT',
  :authenticate => 'AUTHENTICATE',
  :authorise => 'AUTHORISE'
}
CREDIT_CARDS =
{
  :visa => "VISA",
  :master => "MC",
  :delta => "DELTA",
  :solo => "SOLO",
  :switch => "MAESTRO",
  :maestro => "MAESTRO",
  :american_express => "AMEX",
  :electron => "UKE",
  :diners_club => "DC",
  :jcb => "JCB"
}
ELECTRON =
/^(424519|42496[23]|450875|48440[6-8]|4844[1-5][1-5]|4917[3-5][0-9]|491880)\d{10}(\d{3})?$/
AVS_CVV_CODE =
{
  "NOTPROVIDED" => nil, 
  "NOTCHECKED" => 'X',
  "MATCHED" => 'Y',
  "NOTMATCHED" => 'N'
}

Constants inherited from Gateway

Gateway::DEBIT_CARDS

Instance Attribute Summary

Attributes inherited from Gateway

#options

Instance Method Summary collapse

Methods inherited from Gateway

#card_brand, card_brand, inherited, supports?

Methods included from Utils

generate_unique_id

Methods included from CreditCardFormatting

#format

Methods included from RequiresParameters

#requires!

Methods included from PostsData

included, #ssl_get, #ssl_post

Constructor Details

#initialize(options = {}) ⇒ SagePayGateway

Returns a new instance of SagePayGateway.



56
57
58
59
60
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 56

def initialize(options = {})
  requires!(options, :login)
  @options = options
  super
end

Instance Method Details

#authenticate(money, credit_card, options = {}) ⇒ Object



98
99
100
101
102
103
104
105
106
107
108
109
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 98

def authenticate(money, credit_card, options = {})          
  requires!(options, :order_id)
  post = {}
  
  add_credit_card(post, credit_card)
  add_address(post, options)
  add_customer_data(post, options)
  add_invoice(post, options)
  add_amount(post, money, options)
  
  commit(:authenticate, post)
end

#authorize(money, credit_card, options = {}) ⇒ Object



84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 84

def authorize(money, credit_card, options = {})
  requires!(options, :order_id)
  post = {}
  
  add_amount(post, money, options)
  add_invoice(post, options)
  add_credit_card(post, credit_card)
  add_address(post, options)
  add_customer_data(post, options)
  add_three_d_secure_flag(post, options)
  
  commit(:authorization, post)
end

#capture(money, identification, options = {}) ⇒ Object

You can only capture a transaction once, even if you didn’t capture the full amount the first time.



131
132
133
134
135
136
137
138
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 131

def capture(money, identification, options = {})
  post = {}
  
  add_reference(post, identification)
  add_release_amount(post, money, options)
  
  commit(:capture, post)
end

#credit(money, identification, options = {}) ⇒ Object

Crediting requires a new order_id to passed in, as well as a description



150
151
152
153
154
155
156
157
158
159
160
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 150

def credit(money, identification, options = {})
  requires!(options, :order_id, :description)
  
  post = {}
  
  add_credit_reference(post, identification)
  add_amount(post, money, options)
  add_invoice(post, options)
  
  commit(:credit, post)
end

#purchase(money, credit_card, options = {}) ⇒ Object



70
71
72
73
74
75
76
77
78
79
80
81
82
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 70

def purchase(money, credit_card, options = {})
  requires!(options, :order_id)
  post = {}
  
  add_amount(post, money, options)
  add_invoice(post, options)
  add_credit_card(post, credit_card)
  add_address(post, options)
  add_customer_data(post, options)
  add_three_d_secure_flag(post, options)
  
  commit(:purchase, post)
end

#repeat(money, identification, options = {}) ⇒ Object

Identification is authorization for original payment or authorization. Supply an :order_id option that is a unique id for this repeat payment (don’t just supply the original order id).



113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 113

def repeat(money, identification, options = {})
  requires!(options, :order_id)
  post = {}
  
  add_invoice(post, options)
  add_related_reference(post, identification)
  add_amount(post, money, options)
  
  # If we're making the first payment, we AUTHORISE, otherwise we're REPEATING
  # a PAYMENT or an existing AUTHORISE
  if identification.split(';').last == 'authenticate'
    commit(:authorise, post)
  else
    commit(:repeat, post)
  end
end

#test?Boolean

Returns:

  • (Boolean)


62
63
64
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 62

def test?
  @options[:test] || super
end

#three_d_complete(pa_res, md) ⇒ Object

Completes a 3D Secure transaction



163
164
165
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 163

def three_d_complete(pa_res, md)
  commit(:three_d_complete, 'PARes' => pa_res, 'MD' => md)
end

#three_d_secure_enabled?Boolean

Returns:

  • (Boolean)


66
67
68
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 66

def three_d_secure_enabled?
  @options[:enable_3d_secure]
end

#void(identification, options = {}) ⇒ Object



140
141
142
143
144
145
146
147
# File 'lib/active_merchant/billing/gateways/sage_pay.rb', line 140

def void(identification, options = {})
  post = {}
  
  add_reference(post, identification)
  action = abort_or_void_from(identification)

  commit(action, post)
end