gonow-activemerchant 1.15.0
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 +690 -0
- data/CONTRIBUTORS +237 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +165 -0
- data/gem-public_cert.pem +20 -0
- data/lib/active_merchant.rb +47 -0
- data/lib/active_merchant/billing.rb +9 -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 +178 -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 +170 -0
- data/lib/active_merchant/billing/gateways.rb +18 -0
- data/lib/active_merchant/billing/gateways/authorize_net.rb +664 -0
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +858 -0
- data/lib/active_merchant/billing/gateways/barclays_epdq.rb +308 -0
- data/lib/active_merchant/billing/gateways/beanstream.rb +139 -0
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +282 -0
- data/lib/active_merchant/billing/gateways/beanstream_interac.rb +54 -0
- data/lib/active_merchant/billing/gateways/blue_pay.rb +11 -0
- data/lib/active_merchant/billing/gateways/bogus.rb +132 -0
- data/lib/active_merchant/billing/gateways/braintree.rb +17 -0
- data/lib/active_merchant/billing/gateways/braintree/braintree_common.rb +9 -0
- data/lib/active_merchant/billing/gateways/braintree_blue.rb +293 -0
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +17 -0
- data/lib/active_merchant/billing/gateways/braspag.rb +188 -0
- data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
- data/lib/active_merchant/billing/gateways/cyber_source.rb +430 -0
- data/lib/active_merchant/billing/gateways/data_cash.rb +597 -0
- data/lib/active_merchant/billing/gateways/efsnet.rb +235 -0
- data/lib/active_merchant/billing/gateways/elavon.rb +134 -0
- data/lib/active_merchant/billing/gateways/epay.rb +268 -0
- data/lib/active_merchant/billing/gateways/eway.rb +277 -0
- data/lib/active_merchant/billing/gateways/eway_managed.rb +231 -0
- data/lib/active_merchant/billing/gateways/exact.rb +222 -0
- data/lib/active_merchant/billing/gateways/federated_canada.rb +168 -0
- data/lib/active_merchant/billing/gateways/first_pay.rb +177 -0
- data/lib/active_merchant/billing/gateways/garanti.rb +262 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_base.rb +250 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_rabobank.pem +13 -0
- data/lib/active_merchant/billing/gateways/ideal/ideal_response.rb +29 -0
- data/lib/active_merchant/billing/gateways/ideal_rabobank.rb +55 -0
- data/lib/active_merchant/billing/gateways/inspire.rb +221 -0
- data/lib/active_merchant/billing/gateways/instapay.rb +164 -0
- data/lib/active_merchant/billing/gateways/iridium.rb +258 -0
- data/lib/active_merchant/billing/gateways/jetpay.rb +276 -0
- data/lib/active_merchant/billing/gateways/linkpoint.rb +454 -0
- data/lib/active_merchant/billing/gateways/merchant_e_solutions.rb +156 -0
- data/lib/active_merchant/billing/gateways/merchant_ware.rb +289 -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 +209 -0
- data/lib/active_merchant/billing/gateways/net_registry.rb +189 -0
- data/lib/active_merchant/billing/gateways/netaxept.rb +239 -0
- data/lib/active_merchant/billing/gateways/netbilling.rb +168 -0
- data/lib/active_merchant/billing/gateways/nmi.rb +13 -0
- data/lib/active_merchant/billing/gateways/ogone.rb +292 -0
- data/lib/active_merchant/billing/gateways/orbital.rb +321 -0
- data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +46 -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/paybox_direct.rb +207 -0
- data/lib/active_merchant/billing/gateways/payflow.rb +253 -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_express.rb +222 -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 +235 -0
- data/lib/active_merchant/billing/gateways/paypal.rb +121 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb +351 -0
- data/lib/active_merchant/billing/gateways/paypal/paypal_express_response.rb +49 -0
- data/lib/active_merchant/billing/gateways/paypal_ca.rb +13 -0
- data/lib/active_merchant/billing/gateways/paypal_express.rb +177 -0
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +25 -0
- data/lib/active_merchant/billing/gateways/plugnpay.rb +298 -0
- data/lib/active_merchant/billing/gateways/psigate.rb +219 -0
- data/lib/active_merchant/billing/gateways/psl_card.rb +304 -0
- data/lib/active_merchant/billing/gateways/qbms.rb +295 -0
- data/lib/active_merchant/billing/gateways/quantum.rb +282 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +218 -0
- data/lib/active_merchant/billing/gateways/realex.rb +311 -0
- data/lib/active_merchant/billing/gateways/sage.rb +146 -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_pay.rb +320 -0
- data/lib/active_merchant/billing/gateways/sallie_mae.rb +144 -0
- data/lib/active_merchant/billing/gateways/secure_net.rb +330 -0
- data/lib/active_merchant/billing/gateways/secure_pay.rb +31 -0
- data/lib/active_merchant/billing/gateways/secure_pay_au.rb +193 -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 +271 -0
- data/lib/active_merchant/billing/gateways/stripe.rb +212 -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 +423 -0
- data/lib/active_merchant/billing/gateways/usa_epay.rb +194 -0
- data/lib/active_merchant/billing/gateways/verifi.rb +233 -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/worldpay.rb +280 -0
- data/lib/active_merchant/billing/integrations.rb +17 -0
- data/lib/active_merchant/billing/integrations/action_view_helper.rb +68 -0
- data/lib/active_merchant/billing/integrations/bogus.rb +23 -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/chronopay.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/direc_pay.rb +41 -0
- data/lib/active_merchant/billing/integrations/direc_pay/helper.rb +200 -0
- data/lib/active_merchant/billing/integrations/direc_pay/notification.rb +76 -0
- data/lib/active_merchant/billing/integrations/direc_pay/return.rb +32 -0
- data/lib/active_merchant/billing/integrations/direc_pay/status.rb +37 -0
- data/lib/active_merchant/billing/integrations/directebanking.rb +47 -0
- data/lib/active_merchant/billing/integrations/directebanking/helper.rb +90 -0
- data/lib/active_merchant/billing/integrations/directebanking/notification.rb +120 -0
- data/lib/active_merchant/billing/integrations/directebanking/return.rb +11 -0
- data/lib/active_merchant/billing/integrations/e_payment_plans.rb +48 -0
- data/lib/active_merchant/billing/integrations/e_payment_plans/helper.rb +34 -0
- data/lib/active_merchant/billing/integrations/e_payment_plans/notification.rb +84 -0
- data/lib/active_merchant/billing/integrations/gestpay.rb +25 -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/helper.rb +96 -0
- data/lib/active_merchant/billing/integrations/hi_trust.rb +27 -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/moneybookers.rb +26 -0
- data/lib/active_merchant/billing/integrations/moneybookers/helper.rb +59 -0
- data/lib/active_merchant/billing/integrations/moneybookers/notification.rb +129 -0
- data/lib/active_merchant/billing/integrations/nochex.rb +88 -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/notification.rb +62 -0
- data/lib/active_merchant/billing/integrations/paypal.rb +39 -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/quickpay.rb +21 -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/return.rb +42 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form.rb +37 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form/encryption.rb +33 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form/helper.rb +111 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form/notification.rb +210 -0
- data/lib/active_merchant/billing/integrations/sage_pay_form/return.rb +31 -0
- data/lib/active_merchant/billing/integrations/two_checkout.rb +23 -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/valitor.rb +33 -0
- data/lib/active_merchant/billing/integrations/valitor/helper.rb +86 -0
- data/lib/active_merchant/billing/integrations/valitor/notification.rb +13 -0
- data/lib/active_merchant/billing/integrations/valitor/response_fields.rb +97 -0
- data/lib/active_merchant/billing/integrations/valitor/return.rb +13 -0
- data/lib/active_merchant/billing/integrations/world_pay.rb +27 -0
- data/lib/active_merchant/billing/integrations/world_pay/helper.rb +100 -0
- data/lib/active_merchant/billing/integrations/world_pay/notification.rb +160 -0
- data/lib/active_merchant/billing/response.rb +32 -0
- data/lib/active_merchant/common.rb +14 -0
- data/lib/active_merchant/common/connection.rb +177 -0
- data/lib/active_merchant/common/country.rb +328 -0
- data/lib/active_merchant/common/error.rb +26 -0
- data/lib/active_merchant/common/post_data.rb +24 -0
- data/lib/active_merchant/common/posts_data.rb +63 -0
- data/lib/active_merchant/common/requires_parameters.rb +16 -0
- data/lib/active_merchant/common/utils.rb +22 -0
- data/lib/active_merchant/common/validateable.rb +81 -0
- data/lib/active_merchant/version.rb +3 -0
- data/lib/activemerchant.rb +1 -0
- data/lib/certs/cacert.pem +7815 -0
- data/lib/support/gateway_support.rb +58 -0
- data/lib/support/outbound_hosts.rb +25 -0
- metadata +276 -0
@@ -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,96 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
class Helper #:nodoc:
|
5
|
+
attr_reader :fields
|
6
|
+
class_attribute :service_url
|
7
|
+
class_attribute :mappings
|
8
|
+
class_attribute :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_attribute :application_id
|
14
|
+
self.application_id = 'ActiveMerchant'
|
15
|
+
|
16
|
+
def initialize(order, account, options = {})
|
17
|
+
options.assert_valid_keys([:amount, :currency, :test, :credential2, :credential3, :credential4, :country, :account_name])
|
18
|
+
@fields = {}
|
19
|
+
self.order = order
|
20
|
+
self.account = account
|
21
|
+
self.amount = options[:amount]
|
22
|
+
self.currency = options[:currency]
|
23
|
+
self.credential2 = options[:credential2]
|
24
|
+
self.credential3 = options[:credential3]
|
25
|
+
self.credential4 = options[:credential4]
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.mapping(attribute, options = {})
|
29
|
+
self.mappings ||= {}
|
30
|
+
self.mappings[attribute] = options
|
31
|
+
end
|
32
|
+
|
33
|
+
def add_field(name, value)
|
34
|
+
return if name.blank? || value.blank?
|
35
|
+
@fields[name.to_s] = value.to_s
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_fields(subkey, params = {})
|
39
|
+
params.each do |k, v|
|
40
|
+
field = mappings[subkey][k]
|
41
|
+
add_field(field, v) unless field.blank?
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def billing_address(params = {})
|
46
|
+
add_address(:billing_address, params)
|
47
|
+
end
|
48
|
+
|
49
|
+
def shipping_address(params = {})
|
50
|
+
add_address(:shipping_address, params)
|
51
|
+
end
|
52
|
+
|
53
|
+
def form_fields
|
54
|
+
@fields
|
55
|
+
end
|
56
|
+
|
57
|
+
private
|
58
|
+
|
59
|
+
def add_address(key, params)
|
60
|
+
return if mappings[key].nil?
|
61
|
+
|
62
|
+
code = lookup_country_code(params.delete(:country))
|
63
|
+
add_field(mappings[key][:country], code)
|
64
|
+
add_fields(key, params)
|
65
|
+
end
|
66
|
+
|
67
|
+
def lookup_country_code(name_or_code, format = country_format)
|
68
|
+
country = Country.find(name_or_code)
|
69
|
+
country.code(format).to_s
|
70
|
+
rescue InvalidCountryCodeError
|
71
|
+
name_or_code
|
72
|
+
end
|
73
|
+
|
74
|
+
def method_missing(method_id, *args)
|
75
|
+
method_id = method_id.to_s.gsub(/=$/, '').to_sym
|
76
|
+
# Return and do nothing if the mapping was not found. This allows
|
77
|
+
# For easy substitution of the different integrations
|
78
|
+
return if mappings[method_id].nil?
|
79
|
+
|
80
|
+
mapping = mappings[method_id]
|
81
|
+
|
82
|
+
case mapping
|
83
|
+
when Array
|
84
|
+
mapping.each{ |field| add_field(field, args.last) }
|
85
|
+
when Hash
|
86
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
87
|
+
|
88
|
+
mapping.each{ |key, field| add_field(field, options[key]) }
|
89
|
+
else
|
90
|
+
add_field(mapping, args.last)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
|
2
|
+
module ActiveMerchant #:nodoc:
|
3
|
+
module Billing #:nodoc:
|
4
|
+
module Integrations #:nodoc:
|
5
|
+
module HiTrust
|
6
|
+
autoload :Helper, File.dirname(__FILE__) + '/hi_trust/helper.rb'
|
7
|
+
autoload :Return, File.dirname(__FILE__) + '/hi_trust/return.rb'
|
8
|
+
autoload :Notification, File.dirname(__FILE__) + '/hi_trust/notification.rb'
|
9
|
+
|
10
|
+
TEST_URL = 'https://testtrustlink.hitrust.com.tw/TrustLink/TrxReq'
|
11
|
+
LIVE_URL = 'https://trustlink.hitrust.com.tw/TrustLink/TrxReq'
|
12
|
+
|
13
|
+
def self.service_url
|
14
|
+
ActiveMerchant::Billing::Base.integration_mode == :test ? TEST_URL : LIVE_URL
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.notification(post, options = {})
|
18
|
+
Notification.new(post)
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.return(query_string, options = {})
|
22
|
+
Return.new(query_string)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
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
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module HiTrust
|
5
|
+
class Return < ActiveMerchant::Billing::Integrations::Return
|
6
|
+
SUCCESS = "00"
|
7
|
+
CODES = { "00" => "Operation completed successfully",
|
8
|
+
"-1" => "Unable to initialize winsock dll.",
|
9
|
+
"-2" => "Can't create stream socket.",
|
10
|
+
"-3" => "No Request Message.",
|
11
|
+
"-4" => "Can't connect to server.",
|
12
|
+
"-5" => "Send socket error.",
|
13
|
+
"-6" => "Couldn't receive data.",
|
14
|
+
"-7" => "Receive Broken message.",
|
15
|
+
"-8" => "Unable to initialize Envirnment.",
|
16
|
+
"-9" => "Can't Read Server RSA File.",
|
17
|
+
"-10" => "Can't Read Client RSA File.",
|
18
|
+
"-11" => "Web Server error.",
|
19
|
+
"-12" => "Receive Message type error.",
|
20
|
+
"-13" => "No Request Message.",
|
21
|
+
"-14" => "No Response Content.",
|
22
|
+
"-18" => "Merchant Update URL not found.",
|
23
|
+
"-19" => "Server URL not find Domain or IP.",
|
24
|
+
"-20" => "Server URL only can fill http or https.",
|
25
|
+
"-21" => "Server Config File open error.",
|
26
|
+
"-22" => "Server RSA Key File open error.",
|
27
|
+
"-23" => "Server RSA Key File read error.",
|
28
|
+
"-24" => "Server Config File have some errors, Please to check it.",
|
29
|
+
"-25" => "Merchant Config File open error.",
|
30
|
+
"-26" => "Merchant RSA Key File open error.",
|
31
|
+
"-27" => "Merchant RSA Key File read error.",
|
32
|
+
"-28" => "Merchant Config File has some errors, Please to check it.",
|
33
|
+
"-29" => "Server Type is unknown.",
|
34
|
+
"-30" => "Comm Type is unknown.",
|
35
|
+
"-31" => "Input Parameter [ORDERNO] is null or empty.",
|
36
|
+
"-32" => "Input Parameter [STOREID] is null or empty.",
|
37
|
+
"-33" => "Input Parameter [ORDERDESC] is null or empty.",
|
38
|
+
"-34" => "Input Parameter [CURRENCY] is null or empty.",
|
39
|
+
"-35" => "Input Parameter [AMOUNT] is null or empty.",
|
40
|
+
"-36" => "Input Parameter [ORDERURL] is null or empty.",
|
41
|
+
"-37" => "Input Parameter [RETURNURL] is null or empty.",
|
42
|
+
"-38" => "Input Parameter [DEPOSIT] is null or empty.",
|
43
|
+
"-39" => "Input Parameter [QUERYFLAG] is null or empty.",
|
44
|
+
"-40" => "Input Parameter [UPDATEURL] is null or empty.",
|
45
|
+
"-41" => "Input Parameter [MERUPDATEURL] is null or empty.",
|
46
|
+
"-42" => "Input Parameter [KEY] is null or empty.",
|
47
|
+
"-43" => "Input Parameter [MAC] is null or empty.",
|
48
|
+
"-44" => "Input Parameter [CIPHER] is null or empty.",
|
49
|
+
"-45" => "Input Parameter [TrxType] is wrong.",
|
50
|
+
"-100" => "TrustLink Server is closed. Or Merchant Server IP is not consistent with TrustLink Server setting.",
|
51
|
+
"-101" => "TrustLink Server receives NULL.",
|
52
|
+
"-308" => "Order Number already exists.",
|
53
|
+
"positive" => "Response from Bank. Please contact with Acquirer Bank Service or HiTRUST Call Center."
|
54
|
+
}
|
55
|
+
|
56
|
+
def success?
|
57
|
+
params['retcode'] == SUCCESS
|
58
|
+
end
|
59
|
+
|
60
|
+
def message
|
61
|
+
CODES[ params['retcode'] ]
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|