johnreitano-activemerchant 1.5.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CHANGELOG +508 -0
- data/CONTRIBUTORS +134 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +136 -0
- data/gem-public_cert.pem +20 -0
- data/lib/active_merchant/billing/avs_result.rb +98 -0
- data/lib/active_merchant/billing/base.rb +57 -0
- data/lib/active_merchant/billing/check.rb +68 -0
- data/lib/active_merchant/billing/credit_card.rb +159 -0
- data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
- data/lib/active_merchant/billing/credit_card_methods.rb +125 -0
- data/lib/active_merchant/billing/cvv_result.rb +38 -0
- data/lib/active_merchant/billing/expiry_date.rb +34 -0
- data/lib/active_merchant/billing/gateway.rb +163 -0
- data/lib/active_merchant/billing/gateways/authorize_net.rb +654 -0
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +736 -0
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +244 -0
- data/lib/active_merchant/billing/gateways/beanstream.rb +102 -0
- data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
- data/lib/active_merchant/billing/gateways/bogus.rb +98 -0
- data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
- data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +594 -0
- data/lib/active_merchant/billing/gateways/data_cash.rb +593 -0
- data/lib/active_merchant/billing/gateways/efsnet.rb +229 -0
- data/lib/active_merchant/billing/gateways/elavon.rb +134 -0
- data/lib/active_merchant/billing/gateways/eway.rb +277 -0
- data/lib/active_merchant/billing/gateways/exact.rb +222 -0
- data/lib/active_merchant/billing/gateways/first_pay.rb +172 -0
- data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
- data/lib/active_merchant/billing/gateways/jetpay.rb +270 -0
- data/lib/active_merchant/billing/gateways/linkpoint.rb +449 -0
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +154 -0
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +283 -0
- data/lib/active_merchant/billing/gateways/modern_payments.rb +36 -0
- data/lib/active_merchant/billing/gateways/modern_payments_cim.rb +220 -0
- data/lib/active_merchant/billing/gateways/moneris.rb +205 -0
- data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
- data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
- data/lib/active_merchant/billing/gateways/ogone.rb +279 -0
- data/lib/active_merchant/billing/gateways/pay_junction.rb +392 -0
- data/lib/active_merchant/billing/gateways/pay_secure.rb +120 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +207 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_express_response.rb +39 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_response.rb +13 -0
- data/lib/active_merchant/billing/gateways/payflow.rb +236 -0
- data/lib/active_merchant/billing/gateways/payflow_express.rb +138 -0
- data/lib/active_merchant/billing/gateways/payflow_express_uk.rb +15 -0
- data/lib/active_merchant/billing/gateways/payflow_uk.rb +21 -0
- data/lib/active_merchant/billing/gateways/payment_express.rb +230 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +326 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +38 -0
- data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
- data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
- data/lib/active_merchant/billing/gateways/paypal_express.rb +130 -0
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +20 -0
- data/lib/active_merchant/billing/gateways/plugnpay.rb +292 -0
- data/lib/active_merchant/billing/gateways/psigate.rb +214 -0
- data/lib/active_merchant/billing/gateways/psl_card.rb +304 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +213 -0
- data/lib/active_merchant/billing/gateways/realex.rb +200 -0
- data/lib/active_merchant/billing/gateways/sage/sage_bankcard.rb +88 -0
- data/lib/active_merchant/billing/gateways/sage/sage_core.rb +116 -0
- data/lib/active_merchant/billing/gateways/sage/sage_virtual_check.rb +97 -0
- data/lib/active_merchant/billing/gateways/sage.rb +146 -0
- data/lib/active_merchant/billing/gateways/sage_pay.rb +309 -0
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +144 -0
- data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +157 -0
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
- data/lib/active_merchant/billing/gateways/skip_jack.rb +453 -0
- data/lib/active_merchant/billing/gateways/smart_ps.rb +265 -0
- data/lib/active_merchant/billing/gateways/trans_first.rb +127 -0
- data/lib/active_merchant/billing/gateways/transax.rb +25 -0
- data/lib/active_merchant/billing/gateways/trust_commerce.rb +418 -0
- data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
- data/lib/active_merchant/billing/gateways/verifi.rb +228 -0
- data/lib/active_merchant/billing/gateways/viaklix.rb +189 -0
- data/lib/active_merchant/billing/gateways/wirecard.rb +318 -0
- data/lib/active_merchant/billing/gateways.rb +18 -0
- data/lib/active_merchant/billing/integrations/action_view_helper.rb +79 -0
- data/lib/active_merchant/billing/integrations/bogus/helper.rb +17 -0
- data/lib/active_merchant/billing/integrations/bogus/notification.rb +11 -0
- data/lib/active_merchant/billing/integrations/bogus/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/bogus.rb +23 -0
- data/lib/active_merchant/billing/integrations/chronopay/helper.rb +120 -0
- data/lib/active_merchant/billing/integrations/chronopay/notification.rb +158 -0
- data/lib/active_merchant/billing/integrations/chronopay/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/chronopay.rb +23 -0
- data/lib/active_merchant/billing/integrations/gestpay/common.rb +42 -0
- data/lib/active_merchant/billing/integrations/gestpay/helper.rb +70 -0
- data/lib/active_merchant/billing/integrations/gestpay/notification.rb +85 -0
- data/lib/active_merchant/billing/integrations/gestpay/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/gestpay.rb +25 -0
- data/lib/active_merchant/billing/integrations/helper.rb +93 -0
- data/lib/active_merchant/billing/integrations/hi_trust/helper.rb +58 -0
- data/lib/active_merchant/billing/integrations/hi_trust/notification.rb +59 -0
- data/lib/active_merchant/billing/integrations/hi_trust/return.rb +67 -0
- data/lib/active_merchant/billing/integrations/hi_trust.rb +27 -0
- data/lib/active_merchant/billing/integrations/nochex/helper.rb +68 -0
- data/lib/active_merchant/billing/integrations/nochex/notification.rb +94 -0
- data/lib/active_merchant/billing/integrations/nochex/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/nochex.rb +88 -0
- data/lib/active_merchant/billing/integrations/notification.rb +62 -0
- data/lib/active_merchant/billing/integrations/paypal/helper.rb +119 -0
- data/lib/active_merchant/billing/integrations/paypal/notification.rb +154 -0
- data/lib/active_merchant/billing/integrations/paypal/return.rb +10 -0
- data/lib/active_merchant/billing/integrations/paypal.rb +39 -0
- data/lib/active_merchant/billing/integrations/quickpay/helper.rb +72 -0
- data/lib/active_merchant/billing/integrations/quickpay/notification.rb +74 -0
- data/lib/active_merchant/billing/integrations/quickpay.rb +17 -0
- data/lib/active_merchant/billing/integrations/return.rb +35 -0
- data/lib/active_merchant/billing/integrations/two_checkout/helper.rb +59 -0
- data/lib/active_merchant/billing/integrations/two_checkout/notification.rb +114 -0
- data/lib/active_merchant/billing/integrations/two_checkout/return.rb +17 -0
- data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -0
- data/lib/active_merchant/billing/integrations.rb +29 -0
- data/lib/active_merchant/billing/response.rb +32 -0
- data/lib/active_merchant/billing.rb +9 -0
- data/lib/active_merchant/lib/connection.rb +170 -0
- data/lib/active_merchant/lib/country.rb +319 -0
- data/lib/active_merchant/lib/error.rb +4 -0
- data/lib/active_merchant/lib/post_data.rb +22 -0
- data/lib/active_merchant/lib/posts_data.rb +47 -0
- data/lib/active_merchant/lib/requires_parameters.rb +16 -0
- data/lib/active_merchant/lib/utils.rb +18 -0
- data/lib/active_merchant/lib/validateable.rb +76 -0
- data/lib/active_merchant.rb +46 -0
- data/lib/certs/cacert.pem +7815 -0
- data/lib/support/gateway_support.rb +58 -0
- metadata +218 -0
@@ -0,0 +1,158 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module Chronopay
|
5
|
+
class Notification < ActiveMerchant::Billing::Integrations::Notification
|
6
|
+
def complete?
|
7
|
+
status == 'Completed'
|
8
|
+
end
|
9
|
+
|
10
|
+
# Status of transaction. List of possible values:
|
11
|
+
# <tt>onetime – one time payment has been made, no repayment required;</tt>::
|
12
|
+
# <tt>initial – first payment has been made, repayment required in corresponding period;</tt>::
|
13
|
+
# <tt>decline – charge request has been rejected;</tt>::
|
14
|
+
# <tt>rebill – repayment has been made together with initial transaction;</ttt>::
|
15
|
+
# <tt>cancel – repayments has been disabled;</tt>::
|
16
|
+
# <tt>expire – customer’s access to restricted zone membership has been expired;</tt>::
|
17
|
+
# <tt>refund – request to refund has been received;</tt>::
|
18
|
+
# <tt>chargeback – request to chargeback has been received.</tt>::
|
19
|
+
#
|
20
|
+
# This implementation of Chronopay does not support subscriptions.
|
21
|
+
# The status codes used are matched to the status codes that Paypal
|
22
|
+
# sends. See Paypal::Notification#status for more details
|
23
|
+
def status
|
24
|
+
case params['transaction_type']
|
25
|
+
when 'onetime'
|
26
|
+
'Completed'
|
27
|
+
when 'refund'
|
28
|
+
'Refunded'
|
29
|
+
when 'chargeback'
|
30
|
+
'Reversed'
|
31
|
+
else
|
32
|
+
'Failed'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
# Unique ID of transaction
|
37
|
+
def transaction_id
|
38
|
+
params['transaction_id']
|
39
|
+
end
|
40
|
+
|
41
|
+
# Unique ID of customer
|
42
|
+
def customer_id
|
43
|
+
params['customer_id']
|
44
|
+
end
|
45
|
+
|
46
|
+
# Unique ID of Merchant’s web-site
|
47
|
+
def site_id
|
48
|
+
params['site_id']
|
49
|
+
end
|
50
|
+
|
51
|
+
# ID of a product that was purchased
|
52
|
+
def product_id
|
53
|
+
params['product_id']
|
54
|
+
end
|
55
|
+
|
56
|
+
# Language
|
57
|
+
def language
|
58
|
+
params['language']
|
59
|
+
end
|
60
|
+
|
61
|
+
def received_at
|
62
|
+
# Date should be formatted "dd-mm-yy" to be parsed by 1.8 and 1.9 the same way
|
63
|
+
formatted_date = Date.strptime(date, "%m/%d/%Y").strftime("%d-%m-%Y")
|
64
|
+
Time.parse("#{formatted_date} #{time}") unless date.blank? || time.blank?
|
65
|
+
end
|
66
|
+
|
67
|
+
# Date of transaction in MM/DD/YYYY format
|
68
|
+
def date
|
69
|
+
params['date']
|
70
|
+
end
|
71
|
+
|
72
|
+
# Time of transaction in HH:MM:SS format
|
73
|
+
def time
|
74
|
+
params['time']
|
75
|
+
end
|
76
|
+
|
77
|
+
# The customer's full name
|
78
|
+
def name
|
79
|
+
params['name']
|
80
|
+
end
|
81
|
+
|
82
|
+
# The customer's email address
|
83
|
+
def email
|
84
|
+
params['email']
|
85
|
+
end
|
86
|
+
|
87
|
+
# The customer's street address
|
88
|
+
def street
|
89
|
+
params['street']
|
90
|
+
end
|
91
|
+
|
92
|
+
# The customer's country - 3 digit country code
|
93
|
+
def country
|
94
|
+
params['country']
|
95
|
+
end
|
96
|
+
|
97
|
+
# The customer's city
|
98
|
+
def city
|
99
|
+
params['city']
|
100
|
+
end
|
101
|
+
|
102
|
+
# The customer's zip
|
103
|
+
def zip
|
104
|
+
params['zip']
|
105
|
+
end
|
106
|
+
|
107
|
+
# The customer's state. Only useful for US Customers
|
108
|
+
def state
|
109
|
+
params['state']
|
110
|
+
end
|
111
|
+
|
112
|
+
# Customer’s login for restricted access zone of Merchant’s Web-site
|
113
|
+
def username
|
114
|
+
params['username']
|
115
|
+
end
|
116
|
+
|
117
|
+
# Customer's password for restricted access zone of Merchant’s Web-site, as chosen
|
118
|
+
def password
|
119
|
+
params['password']
|
120
|
+
end
|
121
|
+
|
122
|
+
# The item id passed in the first custom parameter
|
123
|
+
def item_id
|
124
|
+
params['cs1']
|
125
|
+
end
|
126
|
+
|
127
|
+
# Additional parameter
|
128
|
+
def custom2
|
129
|
+
params['cs2']
|
130
|
+
end
|
131
|
+
|
132
|
+
# Additional parameter
|
133
|
+
def custom3
|
134
|
+
params['cs3']
|
135
|
+
end
|
136
|
+
|
137
|
+
# The currency the purchase was made in
|
138
|
+
def currency
|
139
|
+
params['currency']
|
140
|
+
end
|
141
|
+
|
142
|
+
# the money amount we received in X.2 decimal.
|
143
|
+
def gross
|
144
|
+
params['total']
|
145
|
+
end
|
146
|
+
|
147
|
+
def test?
|
148
|
+
date.blank? && time.blank? && transaction_id.blank?
|
149
|
+
end
|
150
|
+
|
151
|
+
def acknowledge
|
152
|
+
true
|
153
|
+
end
|
154
|
+
end
|
155
|
+
end
|
156
|
+
end
|
157
|
+
end
|
158
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
module ActiveMerchant #:nodoc:
|
3
|
+
module Billing #:nodoc:
|
4
|
+
module Integrations #:nodoc:
|
5
|
+
module Chronopay
|
6
|
+
autoload :Return, 'active_merchant/billing/integrations/chronopay/return.rb'
|
7
|
+
autoload :Helper, 'active_merchant/billing/integrations/chronopay/helper.rb'
|
8
|
+
autoload :Notification, 'active_merchant/billing/integrations/chronopay/notification.rb'
|
9
|
+
|
10
|
+
mattr_accessor :service_url
|
11
|
+
self.service_url = 'https://secure.chronopay.com/index_shop.cgi'
|
12
|
+
|
13
|
+
def self.notification(post)
|
14
|
+
Notification.new(post)
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.return(query_string)
|
18
|
+
Return.new(query_string)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module Gestpay
|
5
|
+
module Common
|
6
|
+
VERSION = "2.0"
|
7
|
+
ENCRYPTION_PATH = "/CryptHTTPS/Encrypt.asp"
|
8
|
+
DECRYPTION_PATH = "/CryptHTTPS/Decrypt.asp"
|
9
|
+
DELIMITER = '*P1*'
|
10
|
+
|
11
|
+
CURRENCY_MAPPING = {
|
12
|
+
'EUR' => '242',
|
13
|
+
'ITL' => '18',
|
14
|
+
'BRL' => '234',
|
15
|
+
'USD' => '1',
|
16
|
+
'JPY' => '71',
|
17
|
+
'HKD' => '103'
|
18
|
+
}
|
19
|
+
|
20
|
+
def parse_response(response)
|
21
|
+
case response
|
22
|
+
when /#cryptstring#(.*)#\/cryptstring#/, /#decryptstring#(.*)#\/decryptstring#/
|
23
|
+
$1
|
24
|
+
when /#error#(.*)#\/error#/
|
25
|
+
raise StandardError, "An error occurred retrieving the encrypted string from GestPay: #{$1}"
|
26
|
+
else
|
27
|
+
raise StandardError, "No response was received by GestPay"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def ssl_get(url, path)
|
32
|
+
uri = URI.parse(url)
|
33
|
+
site = Net::HTTP.new(uri.host, uri.port)
|
34
|
+
site.use_ssl = true
|
35
|
+
site.verify_mode = OpenSSL::SSL::VERIFY_NONE
|
36
|
+
site.get(path).body
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module Gestpay
|
5
|
+
class Helper < ActiveMerchant::Billing::Integrations::Helper
|
6
|
+
include Common
|
7
|
+
# Valid language codes
|
8
|
+
# Italian => 1
|
9
|
+
# English => 2
|
10
|
+
# Spanish => 3
|
11
|
+
# French => 4
|
12
|
+
# Tedesco => 5
|
13
|
+
def initialize(order, account, options = {})
|
14
|
+
super
|
15
|
+
add_field('PAY1_IDLANGUAGE', 2)
|
16
|
+
end
|
17
|
+
|
18
|
+
mapping :account, 'ShopLogin'
|
19
|
+
|
20
|
+
mapping :amount, 'PAY1_AMOUNT'
|
21
|
+
mapping :currency, 'PAY1_UICCODE'
|
22
|
+
|
23
|
+
mapping :order, 'PAY1_SHOPTRANSACTIONID'
|
24
|
+
|
25
|
+
# Buyer name PAY1_CHNAME
|
26
|
+
mapping :customer, :email => 'PAY1_CHEMAIL'
|
27
|
+
|
28
|
+
mapping :credit_card, :number => 'PAY1_CARDNUMBER',
|
29
|
+
:expiry_month => 'PAY1_EXPMONTH',
|
30
|
+
:expiry_year => 'PAY1_EXPYEAR',
|
31
|
+
:verification_value => 'PAY1_CVV'
|
32
|
+
|
33
|
+
def customer(params = {})
|
34
|
+
add_field(mappings[:customer][:email], params[:email])
|
35
|
+
add_field('PAY1_CHNAME', "#{params[:first_name]} #{params[:last_name]}")
|
36
|
+
end
|
37
|
+
|
38
|
+
def currency=(currency_code)
|
39
|
+
code = CURRENCY_MAPPING[currency_code]
|
40
|
+
raise StandardError, "Invalid currency code #{currency_code} specified" if code.nil?
|
41
|
+
|
42
|
+
add_field(mappings[:currency], code)
|
43
|
+
end
|
44
|
+
|
45
|
+
def form_fields
|
46
|
+
@encrypted_data ||= get_encrypted_string
|
47
|
+
|
48
|
+
{
|
49
|
+
'a' => @fields['ShopLogin'],
|
50
|
+
'b' => @encrypted_data
|
51
|
+
}
|
52
|
+
end
|
53
|
+
|
54
|
+
def get_encrypted_string
|
55
|
+
response = ssl_get(Gestpay.service_url, encryption_query_string)
|
56
|
+
parse_response(response)
|
57
|
+
end
|
58
|
+
|
59
|
+
def encryption_query_string
|
60
|
+
fields = ['PAY1_AMOUNT', 'PAY1_SHOPTRANSACTIONID', 'PAY1_UICCODE']
|
61
|
+
|
62
|
+
encoded_params = fields.collect{ |field| "#{field}=#{CGI.escape(@fields[field])}" }.join(DELIMITER)
|
63
|
+
|
64
|
+
"#{ENCRYPTION_PATH}?a=" + CGI.escape(@fields['ShopLogin']) + "&b=" + encoded_params + "&c=" + CGI.escape(VERSION)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module ActiveMerchant #:nodoc:
|
4
|
+
module Billing #:nodoc:
|
5
|
+
module Integrations #:nodoc:
|
6
|
+
module Gestpay
|
7
|
+
class Notification < ActiveMerchant::Billing::Integrations::Notification
|
8
|
+
include Common
|
9
|
+
|
10
|
+
def complete?
|
11
|
+
status == 'Completed'
|
12
|
+
end
|
13
|
+
|
14
|
+
# The important param
|
15
|
+
def item_id
|
16
|
+
params['PAY1_SHOPTRANSACTIONID']
|
17
|
+
end
|
18
|
+
|
19
|
+
def transaction_id
|
20
|
+
params['PAY1_BANKTRANSACTIONID']
|
21
|
+
end
|
22
|
+
|
23
|
+
# the money amount we received in X.2 decimal.
|
24
|
+
def gross
|
25
|
+
params['PAY1_AMOUNT']
|
26
|
+
end
|
27
|
+
|
28
|
+
def currency
|
29
|
+
# Ruby 1.9 compat
|
30
|
+
method = CURRENCY_MAPPING.respond_to?(:key) ? :key : :index
|
31
|
+
CURRENCY_MAPPING.send(method, params['PAY1_UICCODE'])
|
32
|
+
end
|
33
|
+
|
34
|
+
def test?
|
35
|
+
false
|
36
|
+
end
|
37
|
+
|
38
|
+
def status
|
39
|
+
case params['PAY1_TRANSACTIONRESULT']
|
40
|
+
when 'OK'
|
41
|
+
'Completed'
|
42
|
+
else
|
43
|
+
'Failed'
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def acknowledge
|
48
|
+
true
|
49
|
+
end
|
50
|
+
|
51
|
+
private
|
52
|
+
# Take the posted data and move the relevant data into a hash
|
53
|
+
def parse(query_string)
|
54
|
+
@raw = query_string
|
55
|
+
|
56
|
+
return if query_string.blank?
|
57
|
+
encrypted_params = parse_delimited_string(query_string)
|
58
|
+
|
59
|
+
return if encrypted_params['a'].blank? || encrypted_params['b'].blank?
|
60
|
+
@params = decrypt_data(encrypted_params['a'], encrypted_params['b'])
|
61
|
+
end
|
62
|
+
|
63
|
+
def parse_delimited_string(string, delimiter = '&', unencode_cgi = false)
|
64
|
+
result = {}
|
65
|
+
for line in string.split(delimiter)
|
66
|
+
key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten
|
67
|
+
result[key] = unencode_cgi ? CGI.unescape(value) : value
|
68
|
+
end
|
69
|
+
result
|
70
|
+
end
|
71
|
+
|
72
|
+
def decrypt_data(shop_login, encrypted_string)
|
73
|
+
response = ssl_get(Gestpay.service_url, decryption_query_string(shop_login, encrypted_string))
|
74
|
+
encoded_response = parse_response(response)
|
75
|
+
parse_delimited_string(encoded_response, DELIMITER, true)
|
76
|
+
end
|
77
|
+
|
78
|
+
def decryption_query_string(shop_login, encrypted_string)
|
79
|
+
"#{DECRYPTION_PATH}?a=" + CGI.escape(shop_login) + "&b=" + encrypted_string + "&c=" + CGI.escape(VERSION)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# With help from Giovanni Intini and his code for RGestPay - http://medlar.it/it/progetti/rgestpay
|
2
|
+
|
3
|
+
module ActiveMerchant #:nodoc:
|
4
|
+
module Billing #:nodoc:
|
5
|
+
module Integrations #:nodoc:
|
6
|
+
module Gestpay
|
7
|
+
autoload :Return, File.dirname(__FILE__) + '/gestpay/return.rb'
|
8
|
+
autoload :Common, File.dirname(__FILE__) + '/gestpay/common.rb'
|
9
|
+
autoload :Helper, File.dirname(__FILE__) + '/gestpay/helper.rb'
|
10
|
+
autoload :Notification, File.dirname(__FILE__) + '/gestpay/notification.rb'
|
11
|
+
|
12
|
+
mattr_accessor :service_url
|
13
|
+
self.service_url = 'https://ecomm.sella.it/gestpay/pagam.asp'
|
14
|
+
|
15
|
+
def self.notification(post)
|
16
|
+
Notification.new(post)
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.return(query_string)
|
20
|
+
Return.new(query_string)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
class Helper #:nodoc:
|
5
|
+
attr_reader :fields
|
6
|
+
class_inheritable_accessor :service_url
|
7
|
+
class_inheritable_hash :mappings
|
8
|
+
class_inheritable_accessor :country_format
|
9
|
+
self.country_format = :alpha2
|
10
|
+
|
11
|
+
# The application making the calls to the gateway
|
12
|
+
# Useful for things like the PayPal build notation (BN) id fields
|
13
|
+
class_inheritable_accessor :application_id
|
14
|
+
self.application_id = 'ActiveMerchant'
|
15
|
+
|
16
|
+
def initialize(order, account, options = {})
|
17
|
+
options.assert_valid_keys([:amount, :currency, :test])
|
18
|
+
@fields = {}
|
19
|
+
self.order = order
|
20
|
+
self.account = account
|
21
|
+
self.amount = options[:amount]
|
22
|
+
self.currency = options[:currency]
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.mapping(attribute, options = {})
|
26
|
+
self.mappings ||= {}
|
27
|
+
self.mappings[attribute] = options
|
28
|
+
end
|
29
|
+
|
30
|
+
def add_field(name, value)
|
31
|
+
return if name.blank? || value.blank?
|
32
|
+
@fields[name.to_s] = value.to_s
|
33
|
+
end
|
34
|
+
|
35
|
+
def add_fields(subkey, params = {})
|
36
|
+
params.each do |k, v|
|
37
|
+
field = mappings[subkey][k]
|
38
|
+
add_field(field, v) unless field.blank?
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def billing_address(params = {})
|
43
|
+
add_address(:billing_address, params)
|
44
|
+
end
|
45
|
+
|
46
|
+
def shipping_address(params = {})
|
47
|
+
add_address(:shipping_address, params)
|
48
|
+
end
|
49
|
+
|
50
|
+
def form_fields
|
51
|
+
@fields
|
52
|
+
end
|
53
|
+
|
54
|
+
private
|
55
|
+
|
56
|
+
def add_address(key, params)
|
57
|
+
return if mappings[key].nil?
|
58
|
+
|
59
|
+
code = lookup_country_code(params.delete(:country))
|
60
|
+
add_field(mappings[key][:country], code)
|
61
|
+
add_fields(key, params)
|
62
|
+
end
|
63
|
+
|
64
|
+
def lookup_country_code(name_or_code)
|
65
|
+
country = Country.find(name_or_code)
|
66
|
+
country.code(country_format).to_s
|
67
|
+
rescue InvalidCountryCodeError
|
68
|
+
name_or_code
|
69
|
+
end
|
70
|
+
|
71
|
+
def method_missing(method_id, *args)
|
72
|
+
method_id = method_id.to_s.gsub(/=$/, '').to_sym
|
73
|
+
# Return and do nothing if the mapping was not found. This allows
|
74
|
+
# For easy substitution of the different integrations
|
75
|
+
return if mappings[method_id].nil?
|
76
|
+
|
77
|
+
mapping = mappings[method_id]
|
78
|
+
|
79
|
+
case mapping
|
80
|
+
when Array
|
81
|
+
mapping.each{ |field| add_field(field, args.last) }
|
82
|
+
when Hash
|
83
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
84
|
+
|
85
|
+
mapping.each{ |key, field| add_field(field, options[key]) }
|
86
|
+
else
|
87
|
+
add_field(mapping, args.last)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module HiTrust
|
5
|
+
class Helper < ActiveMerchant::Billing::Integrations::Helper
|
6
|
+
|
7
|
+
# Transaction types
|
8
|
+
# * Auth
|
9
|
+
# * AuthRe
|
10
|
+
# * Capture
|
11
|
+
# * CaptureRe
|
12
|
+
# * Refund
|
13
|
+
# * RefundRe
|
14
|
+
# * Query
|
15
|
+
def initialize(order, account, options = {})
|
16
|
+
super
|
17
|
+
# Perform an authorization by default
|
18
|
+
add_field('Type', 'Auth')
|
19
|
+
|
20
|
+
# Capture the payment right away
|
21
|
+
add_field('depositflag', '1')
|
22
|
+
|
23
|
+
# Disable auto query - who knows what it does?
|
24
|
+
add_field('queryflag', '1')
|
25
|
+
|
26
|
+
add_field('orderdesc', 'Store purchase')
|
27
|
+
end
|
28
|
+
|
29
|
+
mapping :account, 'storeid'
|
30
|
+
mapping :amount, 'amount'
|
31
|
+
|
32
|
+
def amount=(money)
|
33
|
+
cents = money.respond_to?(:cents) ? money.cents : money
|
34
|
+
|
35
|
+
if money.is_a?(String) or cents.to_i < 0
|
36
|
+
raise ArgumentError, 'money amount must be either a Money object or a positive integer in cents.'
|
37
|
+
end
|
38
|
+
|
39
|
+
add_field(mappings[:amount], cents)
|
40
|
+
end
|
41
|
+
# Supported currencies include:
|
42
|
+
# * CNY:Chinese Yuan (Renminbi)
|
43
|
+
# * TWD:New Taiwan Dollar
|
44
|
+
# * HKD:Hong Kong Dollar
|
45
|
+
# * USD:US Dollar
|
46
|
+
# * AUD:Austrian Dollar
|
47
|
+
mapping :currency, 'currency'
|
48
|
+
|
49
|
+
mapping :order, 'ordernumber'
|
50
|
+
mapping :description, 'orderdesc'
|
51
|
+
|
52
|
+
mapping :notify_url, 'merUpdateURL'
|
53
|
+
mapping :return_url, 'returnURL'
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
|
3
|
+
module ActiveMerchant #:nodoc:
|
4
|
+
module Billing #:nodoc:
|
5
|
+
module Integrations #:nodoc:
|
6
|
+
module HiTrust
|
7
|
+
class Notification < ActiveMerchant::Billing::Integrations::Notification
|
8
|
+
SUCCESS = '00'
|
9
|
+
|
10
|
+
self.production_ips = [ '203.75.242.8' ]
|
11
|
+
|
12
|
+
def complete?
|
13
|
+
status == 'Completed'
|
14
|
+
end
|
15
|
+
|
16
|
+
def transaction_id
|
17
|
+
params['authRRN']
|
18
|
+
end
|
19
|
+
|
20
|
+
def item_id
|
21
|
+
params['ordernumber']
|
22
|
+
end
|
23
|
+
|
24
|
+
def received_at
|
25
|
+
Time.parse(params['orderdate']) rescue nil
|
26
|
+
end
|
27
|
+
|
28
|
+
def currency
|
29
|
+
params['currency']
|
30
|
+
end
|
31
|
+
|
32
|
+
def gross
|
33
|
+
sprintf("%.2f", gross_cents.to_f / 100)
|
34
|
+
end
|
35
|
+
|
36
|
+
def gross_cents
|
37
|
+
params['approveamount'].to_i
|
38
|
+
end
|
39
|
+
|
40
|
+
def account
|
41
|
+
params['storeid']
|
42
|
+
end
|
43
|
+
|
44
|
+
def status
|
45
|
+
params['retcode'] == SUCCESS ? 'Completed' : 'Failed'
|
46
|
+
end
|
47
|
+
|
48
|
+
def test?
|
49
|
+
ActiveMerchant::Billing::Base.integration_mode == :test
|
50
|
+
end
|
51
|
+
|
52
|
+
def acknowledge
|
53
|
+
true
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|