tlconnor-activemerchant 1.20.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +805 -0
- data/CONTRIBUTORS +274 -0
- data/MIT-LICENSE +20 -0
- data/gem-public_cert.pem +20 -0
- data/lib/active_merchant.rb +63 -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 +264 -0
- data/lib/active_merchant/billing/credit_card_formatting.rb +21 -0
- data/lib/active_merchant/billing/credit_card_methods.rb +129 -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 +694 -0
- data/lib/active_merchant/billing/gateways/authorize_net_cim.rb +944 -0
- data/lib/active_merchant/billing/gateways/barclays_epdq.rb +308 -0
- data/lib/active_merchant/billing/gateways/beanstream.rb +167 -0
- data/lib/active_merchant/billing/gateways/beanstream/beanstream_core.rb +388 -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 +142 -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 +308 -0
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +21 -0
- data/lib/active_merchant/billing/gateways/card_save.rb +23 -0
- data/lib/active_merchant/billing/gateways/card_stream.rb +230 -0
- data/lib/active_merchant/billing/gateways/certo_direct.rb +279 -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 +135 -0
- data/lib/active_merchant/billing/gateways/epay.rb +274 -0
- data/lib/active_merchant/billing/gateways/eway.rb +277 -0
- data/lib/active_merchant/billing/gateways/eway_managed.rb +265 -0
- data/lib/active_merchant/billing/gateways/exact.rb +227 -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 +157 -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 +239 -0
- data/lib/active_merchant/billing/gateways/nab_transact.rb +244 -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 +330 -0
- data/lib/active_merchant/billing/gateways/optimal_payment.rb +277 -0
- data/lib/active_merchant/billing/gateways/orbital.rb +344 -0
- data/lib/active_merchant/billing/gateways/orbital/orbital_soft_descriptors.rb +46 -0
- data/lib/active_merchant/billing/gateways/pay_junction.rb +397 -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 +261 -0
- data/lib/active_merchant/billing/gateways/payflow/payflow_common_api.rb +208 -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 +354 -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 +229 -0
- data/lib/active_merchant/billing/gateways/paypal_express_common.rb +25 -0
- data/lib/active_merchant/billing/gateways/paystation.rb +201 -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 +297 -0
- data/lib/active_merchant/billing/gateways/quantum.rb +282 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +298 -0
- data/lib/active_merchant/billing/gateways/realex.rb +315 -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/samurai.rb +121 -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 +280 -0
- data/lib/active_merchant/billing/gateways/secure_pay_tech.rb +113 -0
- data/lib/active_merchant/billing/gateways/skip_jack.rb +458 -0
- data/lib/active_merchant/billing/gateways/smart_ps.rb +271 -0
- data/lib/active_merchant/billing/gateways/stripe.rb +244 -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 +23 -0
- data/lib/active_merchant/billing/gateways/usa_epay_advanced.rb +1496 -0
- data/lib/active_merchant/billing/gateways/usa_epay_transaction.rb +206 -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 +72 -0
- data/lib/active_merchant/billing/integrations/authorize_net_sim.rb +38 -0
- data/lib/active_merchant/billing/integrations/authorize_net_sim/helper.rb +228 -0
- data/lib/active_merchant/billing/integrations/authorize_net_sim/notification.rb +340 -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/dwolla.rb +30 -0
- data/lib/active_merchant/billing/integrations/dwolla/helper.rb +31 -0
- data/lib/active_merchant/billing/integrations/dwolla/notification.rb +55 -0
- data/lib/active_merchant/billing/integrations/dwolla/return.rb +38 -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 +113 -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/payflow_link.rb +21 -0
- data/lib/active_merchant/billing/integrations/payflow_link/helper.rb +100 -0
- data/lib/active_merchant/billing/integrations/payflow_link/notification.rb +78 -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 +127 -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 +22 -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/version.rb +3 -0
- data/lib/activemerchant.rb +1 -0
- data/lib/support/gateway_support.rb +58 -0
- data/lib/support/outbound_hosts.rb +25 -0
- metadata +411 -0
@@ -0,0 +1,113 @@
|
|
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, :transaction_type])
|
18
|
+
@fields = {}
|
19
|
+
@raw_html_fields = []
|
20
|
+
@test = options[:test]
|
21
|
+
self.order = order
|
22
|
+
self.account = account
|
23
|
+
self.amount = options[:amount]
|
24
|
+
self.currency = options[:currency]
|
25
|
+
self.credential2 = options[:credential2]
|
26
|
+
self.credential3 = options[:credential3]
|
27
|
+
self.credential4 = options[:credential4]
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.mapping(attribute, options = {})
|
31
|
+
self.mappings ||= {}
|
32
|
+
self.mappings[attribute] = options
|
33
|
+
end
|
34
|
+
|
35
|
+
def add_field(name, value)
|
36
|
+
return if name.blank? || value.blank?
|
37
|
+
@fields[name.to_s] = value.to_s
|
38
|
+
end
|
39
|
+
|
40
|
+
def add_fields(subkey, params = {})
|
41
|
+
params.each do |k, v|
|
42
|
+
field = mappings[subkey][k]
|
43
|
+
add_field(field, v) unless field.blank?
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
# Add a field that has characters that CGI::escape would mangle. Allows
|
48
|
+
# for multiple fields with the same name (e.g., to support line items).
|
49
|
+
def add_raw_html_field(name, value)
|
50
|
+
return if name.blank? || value.blank?
|
51
|
+
@raw_html_fields << [name, value]
|
52
|
+
end
|
53
|
+
|
54
|
+
def raw_html_fields
|
55
|
+
@raw_html_fields
|
56
|
+
end
|
57
|
+
|
58
|
+
def billing_address(params = {})
|
59
|
+
add_address(:billing_address, params)
|
60
|
+
end
|
61
|
+
|
62
|
+
def shipping_address(params = {})
|
63
|
+
add_address(:shipping_address, params)
|
64
|
+
end
|
65
|
+
|
66
|
+
def form_fields
|
67
|
+
@fields
|
68
|
+
end
|
69
|
+
|
70
|
+
def test?
|
71
|
+
@test_mode ||= ActiveMerchant::Billing::Base.integration_mode == :test || @test
|
72
|
+
end
|
73
|
+
|
74
|
+
private
|
75
|
+
|
76
|
+
def add_address(key, params)
|
77
|
+
return if mappings[key].nil?
|
78
|
+
|
79
|
+
code = lookup_country_code(params.delete(:country))
|
80
|
+
add_field(mappings[key][:country], code)
|
81
|
+
add_fields(key, params)
|
82
|
+
end
|
83
|
+
|
84
|
+
def lookup_country_code(name_or_code, format = country_format)
|
85
|
+
country = Country.find(name_or_code)
|
86
|
+
country.code(format).to_s
|
87
|
+
rescue InvalidCountryCodeError
|
88
|
+
name_or_code
|
89
|
+
end
|
90
|
+
|
91
|
+
def method_missing(method_id, *args)
|
92
|
+
method_id = method_id.to_s.gsub(/=$/, '').to_sym
|
93
|
+
# Return and do nothing if the mapping was not found. This allows
|
94
|
+
# For easy substitution of the different integrations
|
95
|
+
return if mappings[method_id].nil?
|
96
|
+
|
97
|
+
mapping = mappings[method_id]
|
98
|
+
|
99
|
+
case mapping
|
100
|
+
when Array
|
101
|
+
mapping.each{ |field| add_field(field, args.last) }
|
102
|
+
when Hash
|
103
|
+
options = args.last.is_a?(Hash) ? args.pop : {}
|
104
|
+
|
105
|
+
mapping.each{ |key, field| add_field(field, options[key]) }
|
106
|
+
else
|
107
|
+
add_field(mapping, args.last)
|
108
|
+
end
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end
|
113
|
+
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
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module Moneybookers
|
5
|
+
|
6
|
+
autoload :Notification, File.dirname(__FILE__) + '/moneybookers/notification.rb'
|
7
|
+
autoload :Helper, File.dirname(__FILE__) + '/moneybookers/helper.rb'
|
8
|
+
|
9
|
+
mattr_accessor :production_url
|
10
|
+
self.production_url = 'https://www.moneybookers.com/app/payment.pl'
|
11
|
+
|
12
|
+
def self.service_url
|
13
|
+
self.production_url
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.notification(post, options)
|
17
|
+
Notification.new(post, options)
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.return(post, options = {})
|
21
|
+
Return.new(post, options)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module Moneybookers
|
5
|
+
class Helper < ActiveMerchant::Billing::Integrations::Helper
|
6
|
+
mapping :account, 'pay_to_email'
|
7
|
+
mapping :order, 'transaction_id'
|
8
|
+
mapping :amount, 'amount'
|
9
|
+
mapping :currency, 'currency'
|
10
|
+
|
11
|
+
mapping :customer,
|
12
|
+
:first_name => 'firstname',
|
13
|
+
:last_name => 'lastname',
|
14
|
+
:email => 'pay_from_email',
|
15
|
+
:phone => 'phone_number'
|
16
|
+
|
17
|
+
mapping :billing_address,
|
18
|
+
:city => 'city',
|
19
|
+
:address1 => 'address',
|
20
|
+
:address2 => 'address2',
|
21
|
+
:state => 'state',
|
22
|
+
:zip => 'postal_code',
|
23
|
+
:country => 'country'
|
24
|
+
|
25
|
+
mapping :notify_url, 'status_url'
|
26
|
+
mapping :return_url, 'return_url'
|
27
|
+
mapping :cancel_return_url, 'cancel_url'
|
28
|
+
mapping :description, 'detail1_text'
|
29
|
+
|
30
|
+
def initialize(order, account, options = {})
|
31
|
+
super
|
32
|
+
add_tracking_token
|
33
|
+
add_default_parameters
|
34
|
+
add_seller_details(options)
|
35
|
+
end
|
36
|
+
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def add_tracking_token
|
41
|
+
return if application_id.blank? || application_id == 'ActiveMerchant'
|
42
|
+
|
43
|
+
add_field('merchant_fields', 'platform')
|
44
|
+
add_field('platform', application_id)
|
45
|
+
end
|
46
|
+
|
47
|
+
def add_default_parameters
|
48
|
+
add_field('hide_login', 1)
|
49
|
+
end
|
50
|
+
|
51
|
+
def add_seller_details(options)
|
52
|
+
add_field('recipient_description', options[:account_name]) if options[:account_name]
|
53
|
+
add_field('country', lookup_country_code(options[:country], :alpha3)) if options[:country]
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,129 @@
|
|
1
|
+
require 'net/http'
|
2
|
+
require 'digest/md5'
|
3
|
+
|
4
|
+
module ActiveMerchant #:nodoc:
|
5
|
+
module Billing #:nodoc:
|
6
|
+
module Integrations #:nodoc:
|
7
|
+
module Moneybookers
|
8
|
+
class Notification < ActiveMerchant::Billing::Integrations::Notification
|
9
|
+
|
10
|
+
def initialize(data, options)
|
11
|
+
if options[:credential2].nil?
|
12
|
+
raise ArgumentError, "You need to provide the md5 secret as the option :credential2 to verify that the notification originated from Moneybookers"
|
13
|
+
end
|
14
|
+
super
|
15
|
+
end
|
16
|
+
|
17
|
+
def complete?
|
18
|
+
status == 'Completed'
|
19
|
+
end
|
20
|
+
|
21
|
+
# ‘2’ Processed – This status is sent when the transaction is processed and the funds have been received on your Moneybookers account.
|
22
|
+
# ‘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.
|
23
|
+
# ‘-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.
|
24
|
+
# ‘-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.
|
25
|
+
# ‘-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.
|
26
|
+
def status
|
27
|
+
case status_code
|
28
|
+
when '2'
|
29
|
+
'Completed'
|
30
|
+
when '0'
|
31
|
+
'Pending'
|
32
|
+
when '-1'
|
33
|
+
'Cancelled'
|
34
|
+
when '-2'
|
35
|
+
'Failed'
|
36
|
+
when '-3'
|
37
|
+
'Reversed'
|
38
|
+
else
|
39
|
+
'Error'
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def status_code
|
44
|
+
params['status']
|
45
|
+
end
|
46
|
+
|
47
|
+
def item_id
|
48
|
+
params['transaction_id']
|
49
|
+
end
|
50
|
+
|
51
|
+
def transaction_id
|
52
|
+
params['mb_transaction_id']
|
53
|
+
end
|
54
|
+
|
55
|
+
# When was this payment received by the client.
|
56
|
+
def received_at
|
57
|
+
nil
|
58
|
+
end
|
59
|
+
|
60
|
+
def payer_email
|
61
|
+
params['pay_from_email']
|
62
|
+
end
|
63
|
+
|
64
|
+
def receiver_email
|
65
|
+
params['pay_to_email']
|
66
|
+
end
|
67
|
+
|
68
|
+
def md5sig
|
69
|
+
params['md5sig']
|
70
|
+
end
|
71
|
+
|
72
|
+
#Unique ID from the merchant's Moneybookers.com account, needed for calculatinon of md5 sig
|
73
|
+
def merchant_id
|
74
|
+
params['merchant_id']
|
75
|
+
end
|
76
|
+
|
77
|
+
# currency of the payment as posted by the merchant on the entry form
|
78
|
+
def currency
|
79
|
+
params['currency']
|
80
|
+
end
|
81
|
+
|
82
|
+
# amount of the payment as posted by the merchant on the entry form (ex. 39.60/39.6/39)
|
83
|
+
def gross
|
84
|
+
params['amount']
|
85
|
+
end
|
86
|
+
|
87
|
+
# currency of mb_amount, will always be the same as the currency of the beneficiary's account at Moneybookers.com
|
88
|
+
def merchant_currency
|
89
|
+
params['mb_currency']
|
90
|
+
end
|
91
|
+
|
92
|
+
# total amount of the payment in Merchants currency (ex 25.46/25.4/25)
|
93
|
+
def merchant_amount
|
94
|
+
params['mb_amount']
|
95
|
+
end
|
96
|
+
|
97
|
+
# Was this a test transaction?
|
98
|
+
def test?
|
99
|
+
false
|
100
|
+
end
|
101
|
+
|
102
|
+
def secret
|
103
|
+
@options[:credential2]
|
104
|
+
end
|
105
|
+
|
106
|
+
# Acknowledge the transaction to MoneyBooker. This method has to be called after a new
|
107
|
+
# apc arrives. It will verify that all the information we received is correct and will return a
|
108
|
+
# ok or a fail. The secret (second credential) has to be provided in the parameter :credential2
|
109
|
+
# when instantiating the Notification object.
|
110
|
+
#
|
111
|
+
# Example:
|
112
|
+
#
|
113
|
+
# def ipn
|
114
|
+
# notify = Moneybookers.notification(request.raw_post, :credential2 => 'secret')
|
115
|
+
#
|
116
|
+
# if notify.acknowledge
|
117
|
+
# ... process order ... if notify.complete?
|
118
|
+
# else
|
119
|
+
# ... log possible hacking attempt ...
|
120
|
+
# end
|
121
|
+
def acknowledge
|
122
|
+
fields = [merchant_id, item_id, Digest::MD5.hexdigest(secret).upcase, merchant_amount, merchant_currency, status_code].join
|
123
|
+
md5sig == Digest::MD5.hexdigest(fields).upcase
|
124
|
+
end
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|