tlconnor-activemerchant 1.20.4
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 +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,31 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
module Integrations #:nodoc:
|
|
4
|
+
module Dwolla
|
|
5
|
+
class Helper < ActiveMerchant::Billing::Integrations::Helper
|
|
6
|
+
|
|
7
|
+
def initialize(order, account, options = {})
|
|
8
|
+
super
|
|
9
|
+
add_field('name', 'Store Purchase')
|
|
10
|
+
|
|
11
|
+
if ActiveMerchant::Billing::Base.integration_mode == :test || options[:test]
|
|
12
|
+
add_field('test', 'true')
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
# Replace with the real mapping
|
|
17
|
+
mapping :account, 'destinationid'
|
|
18
|
+
mapping :credential2, 'key'
|
|
19
|
+
mapping :credential3, 'secret'
|
|
20
|
+
mapping :notify_url, 'callback'
|
|
21
|
+
mapping :return_url, 'redirect'
|
|
22
|
+
mapping :description, 'description'
|
|
23
|
+
mapping :amount, 'amount'
|
|
24
|
+
mapping :tax, 'tax'
|
|
25
|
+
mapping :shipping, 'shipping'
|
|
26
|
+
mapping :order, 'orderid'
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
require 'net/http'
|
|
2
|
+
|
|
3
|
+
module ActiveMerchant #:nodoc:
|
|
4
|
+
module Billing #:nodoc:
|
|
5
|
+
module Integrations #:nodoc:
|
|
6
|
+
module Dwolla
|
|
7
|
+
class Notification < ActiveMerchant::Billing::Integrations::Notification
|
|
8
|
+
def complete?
|
|
9
|
+
status == "Completed"
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def status
|
|
13
|
+
params["Status"]
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def transaction_id
|
|
17
|
+
params['TransactionId']
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def item_id
|
|
21
|
+
params['OrderId']
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def currency
|
|
25
|
+
"USD"
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
def gross
|
|
29
|
+
params['Amount']
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
def error
|
|
33
|
+
params['Message']
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# Was this a test transaction?
|
|
37
|
+
def test?
|
|
38
|
+
params['TestMode']
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def acknowledge
|
|
42
|
+
true
|
|
43
|
+
end
|
|
44
|
+
private
|
|
45
|
+
# Take the posted data and move the relevant data into a hash
|
|
46
|
+
def parse(post)
|
|
47
|
+
@raw = post.to_s
|
|
48
|
+
json_post = JSON.parse(post)
|
|
49
|
+
params.merge!(json_post)
|
|
50
|
+
end
|
|
51
|
+
end
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
module Integrations #:nodoc:
|
|
4
|
+
module Dwolla
|
|
5
|
+
class Return < ActiveMerchant::Billing::Integrations::Return
|
|
6
|
+
|
|
7
|
+
def success?
|
|
8
|
+
self.error.nil? && self.callback_success?
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def error
|
|
12
|
+
params['error']
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def error_description
|
|
16
|
+
params['error_description']
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def checkout_id
|
|
20
|
+
params['checkoutid']
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def transaction
|
|
24
|
+
params['transaction']
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def test?
|
|
28
|
+
params['test']
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def callback_success?
|
|
32
|
+
params['postback'] != "failure"
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
module Integrations #:nodoc:
|
|
4
|
+
module EPaymentPlans
|
|
5
|
+
autoload :Helper, File.dirname(__FILE__) + '/e_payment_plans/helper.rb'
|
|
6
|
+
autoload :Notification, File.dirname(__FILE__) + '/e_payment_plans/notification.rb'
|
|
7
|
+
|
|
8
|
+
mattr_accessor :production_url
|
|
9
|
+
self.production_url = 'https://www.epaymentplans.com'
|
|
10
|
+
|
|
11
|
+
mattr_accessor :test_url
|
|
12
|
+
self.test_url = 'https://test.epaymentplans.com'
|
|
13
|
+
|
|
14
|
+
def self.service_url
|
|
15
|
+
mode = ActiveMerchant::Billing::Base.integration_mode
|
|
16
|
+
case mode
|
|
17
|
+
when :production
|
|
18
|
+
"#{production_url}/order/purchase"
|
|
19
|
+
when :test
|
|
20
|
+
"#{test_url}/order/purchase"
|
|
21
|
+
else
|
|
22
|
+
raise StandardError, "Integration mode set to an invalid value: #{mode}"
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def self.notification_confirmation_url
|
|
27
|
+
mode = ActiveMerchant::Billing::Base.integration_mode
|
|
28
|
+
case mode
|
|
29
|
+
when :production
|
|
30
|
+
"#{production_url}/order/confirmation"
|
|
31
|
+
when :test
|
|
32
|
+
"#{test_url}/order/confirmation"
|
|
33
|
+
else
|
|
34
|
+
raise StandardError, "Integration mode set to an invalid value: #{mode}"
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def self.notification(post, options = {})
|
|
39
|
+
Notification.new(post, options)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def self.return(query_string, options = {})
|
|
43
|
+
Return.new(query_string, options)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
end
|
|
48
|
+
end
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
|
2
|
+
module Billing #:nodoc:
|
|
3
|
+
module Integrations #:nodoc:
|
|
4
|
+
module EPaymentPlans
|
|
5
|
+
class Helper < ActiveMerchant::Billing::Integrations::Helper
|
|
6
|
+
mapping :account, 'order[account]'
|
|
7
|
+
mapping :amount, 'order[amount]'
|
|
8
|
+
|
|
9
|
+
mapping :order, 'order[num]'
|
|
10
|
+
|
|
11
|
+
mapping :customer, :first_name => 'order[first_name]',
|
|
12
|
+
:last_name => 'order[last_name]',
|
|
13
|
+
:email => 'order[email]',
|
|
14
|
+
:phone => 'order[phone]'
|
|
15
|
+
|
|
16
|
+
mapping :billing_address, :city => 'order[city]',
|
|
17
|
+
:address1 => 'order[address1]',
|
|
18
|
+
:address2 => 'order[address2]',
|
|
19
|
+
:company => 'order[company]',
|
|
20
|
+
:state => 'order[state]',
|
|
21
|
+
:zip => 'order[zip]',
|
|
22
|
+
:country => 'order[country]'
|
|
23
|
+
|
|
24
|
+
mapping :notify_url, 'order[notify_url]'
|
|
25
|
+
mapping :return_url, 'order[return_url]'
|
|
26
|
+
mapping :cancel_return_url, 'order[cancel_return_url]'
|
|
27
|
+
mapping :description, 'order[description]'
|
|
28
|
+
mapping :tax, 'order[tax]'
|
|
29
|
+
mapping :shipping, 'order[shipping]'
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
require 'net/http'
|
|
2
|
+
|
|
3
|
+
module ActiveMerchant #:nodoc:
|
|
4
|
+
module Billing #:nodoc:
|
|
5
|
+
module Integrations #:nodoc:
|
|
6
|
+
module EPaymentPlans
|
|
7
|
+
class Notification < ActiveMerchant::Billing::Integrations::Notification
|
|
8
|
+
include ActiveMerchant::PostsData
|
|
9
|
+
def complete?
|
|
10
|
+
status == "Completed"
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def transaction_id
|
|
14
|
+
params['transaction_id']
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def item_id
|
|
18
|
+
params['item_id']
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
# When was this payment received by the client.
|
|
22
|
+
def received_at
|
|
23
|
+
Time.parse(params['received_at'].to_s).utc
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def gross
|
|
27
|
+
params['gross']
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def currency
|
|
31
|
+
params['currency']
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def security_key
|
|
35
|
+
params['security_key']
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
# Was this a test transaction?
|
|
39
|
+
def test?
|
|
40
|
+
params['test'] == 'test'
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
def status
|
|
44
|
+
params['status'].capitalize
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# Acknowledge the transaction to EPaymentPlans. This method has to be called after a new
|
|
48
|
+
# apc arrives. EPaymentPlans will verify that all the information we received are correct
|
|
49
|
+
# and will return ok or a fail.
|
|
50
|
+
#
|
|
51
|
+
# Example:
|
|
52
|
+
#
|
|
53
|
+
# def ipn
|
|
54
|
+
# notify = EPaymentPlans.notification(request.raw_post)
|
|
55
|
+
#
|
|
56
|
+
# if notify.acknowledge
|
|
57
|
+
# ... process order ... if notify.complete?
|
|
58
|
+
# else
|
|
59
|
+
# ... log possible hacking attempt ...
|
|
60
|
+
# end
|
|
61
|
+
def acknowledge
|
|
62
|
+
payload = raw
|
|
63
|
+
|
|
64
|
+
response = ssl_post(EPaymentPlans.notification_confirmation_url, payload)
|
|
65
|
+
|
|
66
|
+
# Replace with the appropriate codes
|
|
67
|
+
raise StandardError.new("Faulty EPaymentPlans result: #{response}") unless ["AUTHORISED", "DECLINED"].include?(response)
|
|
68
|
+
response == "AUTHORISED"
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
private
|
|
72
|
+
# Take the posted data and move the relevant data into a hash
|
|
73
|
+
def parse(post)
|
|
74
|
+
@raw = post
|
|
75
|
+
for line in post.split('&')
|
|
76
|
+
key, value = *line.scan( %r{^(\w+)\=(.*)$} ).flatten
|
|
77
|
+
params[key] = value
|
|
78
|
+
end
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
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, options = {})
|
|
16
|
+
Notification.new(post)
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def self.return(query_string, options = {})
|
|
20
|
+
Return.new(query_string)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
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
|