yetanothernguyen-activemerchant 1.16.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +711 -0
- data/CONTRIBUTORS +245 -0
- data/MIT-LICENSE +20 -0
- data/gem-public_cert.pem +20 -0
- data/lib/active_merchant.rb +52 -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 +672 -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 +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 +303 -0
- data/lib/active_merchant/billing/gateways/braintree_orange.rb +17 -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/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 +293 -0
- data/lib/active_merchant/billing/gateways/quantum.rb +282 -0
- data/lib/active_merchant/billing/gateways/quickpay.rb +223 -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 +70 -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/migs.rb +22 -0
- data/lib/active_merchant/billing/integrations/migs/helper.rb +64 -0
- data/lib/active_merchant/billing/integrations/migs/return.rb +54 -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/railtie.rb +9 -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 +281 -0
@@ -0,0 +1,22 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module Migs
|
5
|
+
|
6
|
+
autoload :Return, 'active_merchant/billing/integrations/migs/return.rb'
|
7
|
+
autoload :Helper, 'active_merchant/billing/integrations/migs/helper.rb'
|
8
|
+
|
9
|
+
mattr_accessor :service_url
|
10
|
+
self.service_url = 'https://migs.mastercard.com.au/vpcpay'
|
11
|
+
|
12
|
+
def self.notification(post)
|
13
|
+
Notification.new(post)
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.return(post, options = {})
|
17
|
+
Return.new(post, options)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module Migs
|
5
|
+
class Helper < ActiveMerchant::Billing::Integrations::Helper
|
6
|
+
# Replace with the real mapping
|
7
|
+
mapping :account, 'email'
|
8
|
+
mapping :access_code, 'vpc_AccessCode'
|
9
|
+
mapping :amount, 'vpc_Amount'
|
10
|
+
mapping :command, 'vpc_Command'
|
11
|
+
mapping :locale, 'vpc_Locale'
|
12
|
+
mapping :reference_id, 'vpc_MerchTxnRef'
|
13
|
+
mapping :merchant, 'vpc_Merchant'
|
14
|
+
mapping :order, 'vpc_OrderInfo'
|
15
|
+
mapping :return_url, 'vpc_ReturnURL'
|
16
|
+
mapping :version, 'vpc_Version'
|
17
|
+
mapping :secure_hash, 'vpc_SecureHash'
|
18
|
+
|
19
|
+
VERSION = '1'
|
20
|
+
COMMAND = 'pay'
|
21
|
+
LOCALE = 'en'
|
22
|
+
|
23
|
+
def initialize(order, account, options = {})
|
24
|
+
super
|
25
|
+
|
26
|
+
add_field mappings[:version], VERSION
|
27
|
+
add_field mappings[:command], COMMAND
|
28
|
+
add_field mappings[:locale], LOCALE
|
29
|
+
|
30
|
+
@secret_code = options[:credential2]
|
31
|
+
add_field mappings[:merchant], options[:credential3]
|
32
|
+
add_field mappings[:access_code], options[:credential4]
|
33
|
+
end
|
34
|
+
|
35
|
+
# Convert to cents
|
36
|
+
def amount=(money)
|
37
|
+
amount = money.to_f
|
38
|
+
if amount <= 0
|
39
|
+
raise ArgumentError, 'amount must be positive'
|
40
|
+
end
|
41
|
+
|
42
|
+
amount = (amount * 100).to_i
|
43
|
+
add_field mappings[:amount], amount
|
44
|
+
end
|
45
|
+
|
46
|
+
def form_fields
|
47
|
+
@fields.merge(mappings[:secure_hash] => signature)
|
48
|
+
end
|
49
|
+
|
50
|
+
def signature
|
51
|
+
self.class.sign(@secret_code, @fields)
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.sign(prefix, params)
|
55
|
+
hash_input = prefix
|
56
|
+
params.reject { |k,v| k == mappings[:secure_hash] }.sort.each { |p| hash_input += p.last }
|
57
|
+
|
58
|
+
return Digest::MD5.hexdigest(hash_input).upcase
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module Migs
|
5
|
+
class Return < ActiveMerchant::Billing::Integrations::Return
|
6
|
+
def success?
|
7
|
+
acknowledge && params['vpc_TxnResponseCode'] == '0'
|
8
|
+
end
|
9
|
+
|
10
|
+
def item_id
|
11
|
+
params['vpc_MerchTxnRef']
|
12
|
+
end
|
13
|
+
|
14
|
+
def transaction_no
|
15
|
+
params['vpc_TransactionNo']
|
16
|
+
end
|
17
|
+
|
18
|
+
def authorize_id
|
19
|
+
params['vpc_AuthorizeId']
|
20
|
+
end
|
21
|
+
|
22
|
+
def receipt_no
|
23
|
+
params['vpc_ReceiptNo']
|
24
|
+
end
|
25
|
+
|
26
|
+
def payer_card
|
27
|
+
params['vpc_Card']
|
28
|
+
end
|
29
|
+
|
30
|
+
def order
|
31
|
+
params['vpc_OrderInfo']
|
32
|
+
end
|
33
|
+
|
34
|
+
def message
|
35
|
+
params['vpc_Message']
|
36
|
+
end
|
37
|
+
|
38
|
+
def response_code
|
39
|
+
params['vpc_TxnResponseCode']
|
40
|
+
end
|
41
|
+
|
42
|
+
def acknowledge
|
43
|
+
signature == params['vpc_SecureHash']
|
44
|
+
end
|
45
|
+
|
46
|
+
def signature
|
47
|
+
unescape_params = params.map
|
48
|
+
Helper::sign(@options[:credential2], params)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
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
|
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
module ActiveMerchant #:nodoc:
|
3
|
+
module Billing #:nodoc:
|
4
|
+
module Integrations #:nodoc:
|
5
|
+
# To start with Nochex, follow the instructions for installing
|
6
|
+
# ActiveMerchant as a plugin, as described on
|
7
|
+
# http://www.activemerchant.org/.
|
8
|
+
#
|
9
|
+
# The plugin will automatically add the ActionView helper for
|
10
|
+
# ActiveMerchant, which will allow you to make the Nochex payments.
|
11
|
+
# The idea behind the helper is that it generates an invisible
|
12
|
+
# forwarding screen that will automatically redirect the user.
|
13
|
+
# So you would collect all the information about the order and then
|
14
|
+
# simply render the hidden form, which redirects the user to Nochex.
|
15
|
+
#
|
16
|
+
# The syntax of the helper is as follows:
|
17
|
+
#
|
18
|
+
# <% payment_service_for 'order id', 'nochex_user_id',
|
19
|
+
# :amount => 50.00,
|
20
|
+
# :service => :nochex,
|
21
|
+
# :html => { :id => 'nochex-form' } do |service| %>
|
22
|
+
#
|
23
|
+
# <% service.customer :first_name => 'Cody',
|
24
|
+
# :last_name => 'Fauser',
|
25
|
+
# :phone => '(555)555-5555',
|
26
|
+
# :email => 'cody@example.com' %>
|
27
|
+
#
|
28
|
+
# <% service.billing_address :city => 'Ottawa',
|
29
|
+
# :address1 => '21 Snowy Brook Lane',
|
30
|
+
# :address2 => 'Apt. 36',
|
31
|
+
# :state => 'ON',
|
32
|
+
# :country => 'CA',
|
33
|
+
# :zip => 'K1J1E5' %>
|
34
|
+
#
|
35
|
+
# <% service.invoice '#1000' %>
|
36
|
+
# <% service.shipping '0.00' %>
|
37
|
+
# <% service.tax '0.00' %>
|
38
|
+
#
|
39
|
+
# <% service.notify_url url_for(:action => 'notify', :only_path => false) %>
|
40
|
+
# <% service.return_url url_for(:action => 'done', :only_path => false) %>
|
41
|
+
# <% service.cancel_return_url 'http://mystore.com' %>
|
42
|
+
# <% end %>
|
43
|
+
#
|
44
|
+
# The notify_url is the URL that the Nochex IPN will be sent. You can
|
45
|
+
# handle the notification in your controller action as follows:
|
46
|
+
#
|
47
|
+
# class NotificationController < ApplicationController
|
48
|
+
# include ActiveMerchant::Billing::Integrations
|
49
|
+
#
|
50
|
+
# def notify
|
51
|
+
# notification = Nochex::Notification.new(request.raw_post)
|
52
|
+
#
|
53
|
+
# begin
|
54
|
+
# # Acknowledge notification with Nochex
|
55
|
+
# raise StandardError, 'Illegal Notification' unless notification.acknowledge
|
56
|
+
# # Process the payment
|
57
|
+
# rescue => e
|
58
|
+
# logger.warn("Illegal notification received: #{e.message}")
|
59
|
+
# ensure
|
60
|
+
# head(:ok)
|
61
|
+
# end
|
62
|
+
# end
|
63
|
+
# end
|
64
|
+
module Nochex
|
65
|
+
autoload :Return, File.dirname(__FILE__) + '/nochex/return.rb'
|
66
|
+
autoload :Helper, File.dirname(__FILE__) + '/nochex/helper.rb'
|
67
|
+
autoload :Notification, File.dirname(__FILE__) + '/nochex/notification.rb'
|
68
|
+
|
69
|
+
|
70
|
+
mattr_accessor :service_url
|
71
|
+
self.service_url = 'https://www.nochex.com/nochex.dll/checkout'
|
72
|
+
|
73
|
+
mattr_accessor :notification_confirmation_url
|
74
|
+
self.notification_confirmation_url = 'https://www.nochex.com/nochex.dll/apc/apc'
|
75
|
+
|
76
|
+
# Simply a convenience method that returns a new
|
77
|
+
# ActiveMerchant::Billing::Integrations::Nochex::Notification
|
78
|
+
def self.notification(post, options = {})
|
79
|
+
Notification.new(post)
|
80
|
+
end
|
81
|
+
|
82
|
+
def self.return(query_string, options = {})
|
83
|
+
Return.new(query_string)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|