flowcommerce-activemerchant 0.0.6 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/active_merchant/billing/gateways/flow.rb +49 -53
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a5a5d4dbb7606be2ac9f63c228fd94ed0423f0c
|
4
|
+
data.tar.gz: eb6da18efdf964e1ee6bdf5dbc37851515bc8013
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 52f6e5e19df430125645ebab00069d664e4d296302ed068b5ba250c55b59764f80767c761e41842737ded97ba0ce0f66913fe5c7948ab31316ec5043b734bca5
|
7
|
+
data.tar.gz: 3336fde40352290d319c85c31663343cd87b242ea3666e6a5164cbe84b6078fc15d0216a2dbe6d223cc08621cfa4beed8fe31655d5bfc6a8b09340501e26bcc6
|
@@ -6,7 +6,7 @@ require 'flow-reference'
|
|
6
6
|
module ActiveMerchant
|
7
7
|
module Billing
|
8
8
|
class FlowGateway < Gateway
|
9
|
-
VERSION = '0.0.
|
9
|
+
VERSION = '0.0.7' unless defined?(::ActiveMerchant::Billing::FlowGateway::VERSION)
|
10
10
|
|
11
11
|
self.display_name = 'Flow.io Pay'
|
12
12
|
self.homepage_url = 'https://www.flow.io/'
|
@@ -14,7 +14,7 @@ module ActiveMerchant
|
|
14
14
|
self.supported_countries = Flow::Reference::Countries::ISO_3166_2
|
15
15
|
self.supported_cardtypes = Flow::Reference::PaymentMethods::SUPPORTED_CREDIT_CARDS
|
16
16
|
|
17
|
-
def initialize
|
17
|
+
def initialize options = {}
|
18
18
|
@flow_api_key = options[:api_key] || ENV['FLOW_API_KEY']
|
19
19
|
@flow_organization = options[:organization] || ENV['FLOW_ORGANIZATION']
|
20
20
|
|
@@ -25,13 +25,13 @@ module ActiveMerchant
|
|
25
25
|
end
|
26
26
|
|
27
27
|
# https://docs.flow.io/module/payment/resource/authorizations#post-organization-authorizations
|
28
|
-
def authorize
|
29
|
-
amount = assert_currency
|
28
|
+
def authorize amount, payment_method, options={}
|
29
|
+
amount = assert_currency options[:currency], amount
|
30
30
|
|
31
|
-
get_flow_cc_token payment_method
|
31
|
+
response = get_flow_cc_token payment_method
|
32
32
|
|
33
33
|
data = {
|
34
|
-
token:
|
34
|
+
token: response.token,
|
35
35
|
amount: amount,
|
36
36
|
currency: options[:currency],
|
37
37
|
cvv: payment_method.verification_value,
|
@@ -47,59 +47,59 @@ module ActiveMerchant
|
|
47
47
|
authorization_form = if options[:order_id]
|
48
48
|
# order_number allready present at flow
|
49
49
|
data[:order_number] = options[:order_id]
|
50
|
-
::Io::Flow::V0::Models::MerchantOfRecordAuthorizationForm.new
|
50
|
+
::Io::Flow::V0::Models::MerchantOfRecordAuthorizationForm.new data
|
51
51
|
else
|
52
|
-
::Io::Flow::V0::Models::DirectAuthorizationForm.new
|
52
|
+
::Io::Flow::V0::Models::DirectAuthorizationForm.new data
|
53
53
|
end
|
54
|
-
response = flow_instance.authorizations.post
|
54
|
+
response = flow_instance.authorizations.post @flow_organization, authorization_form
|
55
55
|
rescue => exception
|
56
|
-
return Response.new
|
56
|
+
return Response.new false, exception.message, { exception: exception }
|
57
57
|
end
|
58
58
|
|
59
59
|
options = { response: response }
|
60
60
|
|
61
61
|
if response.result.status.value == 'authorized'
|
62
|
-
store = {
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
62
|
+
store = { key: response.key,
|
63
|
+
amount: response.amount,
|
64
|
+
currency: response.currency,
|
65
|
+
authorization_id: response.id
|
66
|
+
}
|
67
67
|
|
68
|
-
Response.new
|
68
|
+
Response.new true, 'Flow authorize - Success', options, { authorization: store }
|
69
69
|
else
|
70
|
-
Response.new
|
70
|
+
Response.new false, 'Flow authorize - Error', options
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
74
|
# https://docs.flow.io/module/payment/resource/captures#post-organization-captures
|
75
|
-
def capture
|
75
|
+
def capture _money, authorization, options={}
|
76
76
|
raise ArgumentError, 'No Authorization authorization, please authorize first' unless authorization
|
77
77
|
|
78
78
|
begin
|
79
|
-
capture_form = ::Io::Flow::V0::Models::CaptureForm.new
|
80
|
-
response = flow_instance.captures.post
|
79
|
+
capture_form = ::Io::Flow::V0::Models::CaptureForm.new authorization
|
80
|
+
response = flow_instance.captures.post @flow_organization, capture_form
|
81
81
|
rescue => exception
|
82
|
-
error_response
|
82
|
+
error_response exception
|
83
83
|
end
|
84
84
|
|
85
85
|
options = { response: response }
|
86
86
|
|
87
87
|
if response.id
|
88
|
-
Response.new
|
88
|
+
Response.new true, 'Flow capture - Success', options
|
89
89
|
else
|
90
|
-
Response.new
|
90
|
+
Response.new false, 'Flow capture - Error', options
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
94
|
-
def purchase
|
94
|
+
def purchase money, credit_card, options={}
|
95
95
|
response = authorize money, credit_card, options
|
96
96
|
capture money, response.authorization
|
97
97
|
end
|
98
98
|
|
99
99
|
# https://docs.flow.io/module/payment/resource/authorizations#delete-organization-authorizations-key
|
100
|
-
def void
|
101
|
-
response = flow_instance.authorizations.delete_by_key
|
102
|
-
Response.new
|
100
|
+
def void money, authorization_key, options={}
|
101
|
+
response = flow_instance.authorizations.delete_by_key @flow_organization, authorization_key
|
102
|
+
Response.new true, 'void success', { response: response }
|
103
103
|
rescue Io::Flow::V0::HttpClient::ServerError => exception
|
104
104
|
error_response(exception)
|
105
105
|
end
|
@@ -112,7 +112,7 @@ module ActiveMerchant
|
|
112
112
|
# amount - The amount to refund, in the currency of the associated capture. Defaults to the value of the capture minus any prior refunds.
|
113
113
|
# currency - The ISO 4217-3 code for the currency. Required if amount is specified. Case insensitive. Note you will get an error if the currency does not match the related authrization's currency. See https://api.flow.io/reference/currencies
|
114
114
|
# rma_key - The RMA key, if available. If specified, this will udpate the RMA status as refunded.
|
115
|
-
def refund
|
115
|
+
def refund amount, capture_id, options={}
|
116
116
|
refund_form = {}
|
117
117
|
refund_form[:amount] = amount if amount
|
118
118
|
refund_form[:capture_id] = capture_id if capture_id
|
@@ -123,44 +123,40 @@ module ActiveMerchant
|
|
123
123
|
|
124
124
|
if refund_form[:amount]
|
125
125
|
raise ArgumentError, 'Currency is required if amount is provided' unless refund_form[:currency]
|
126
|
-
refund_form[:amount] = assert_currency
|
126
|
+
refund_form[:amount] = assert_currency refund_form[:currency], refund_form[:amount]
|
127
127
|
end
|
128
128
|
|
129
|
-
refund_form = ::Io::Flow::V0::Models::RefundForm.new
|
130
|
-
flow_instance.refunds.post
|
129
|
+
refund_form = ::Io::Flow::V0::Models::RefundForm.new refund_form
|
130
|
+
flow_instance.refunds.post @flow_organization, refund_form
|
131
131
|
end
|
132
132
|
|
133
133
|
# store credit card with flow and get reference token
|
134
|
-
def store
|
135
|
-
|
136
|
-
Response.new
|
134
|
+
def store credit_card, options={}
|
135
|
+
response = get_flow_cc_token credit_card
|
136
|
+
Response.new true, 'Credit card stored', { response: response, token: response.token }
|
137
137
|
rescue Io::Flow::V0::HttpClient::ServerError => exception
|
138
|
-
error_response
|
138
|
+
error_response exception
|
139
139
|
end
|
140
140
|
|
141
141
|
private
|
142
142
|
|
143
143
|
def flow_instance
|
144
|
-
FlowCommerce.instance
|
144
|
+
FlowCommerce.instance token: @flow_api_key
|
145
145
|
end
|
146
146
|
|
147
|
-
def get_flow_cc_token
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
data[:expiration_year] = credit_card.year.to_i
|
155
|
-
data[:expiration_month] = credit_card.month.to_i
|
156
|
-
|
157
|
-
card_form = ::Io::Flow::V0::Models::CardForm.new(data)
|
158
|
-
result = flow_instance.cards.post(@flow_organization, card_form)
|
147
|
+
def get_flow_cc_token credit_card
|
148
|
+
data = { number: credit_card.number,
|
149
|
+
name: '%s %s' % [credit_card.first_name, credit_card.last_name],
|
150
|
+
cvv: credit_card.verification_value,
|
151
|
+
expiration_year: credit_card.year.to_i,
|
152
|
+
expiration_month: credit_card.month.to_i
|
153
|
+
}
|
159
154
|
|
160
|
-
|
155
|
+
card_form = ::Io::Flow::V0::Models::CardForm.new data
|
156
|
+
flow_instance.cards.post @flow_organization, card_form
|
161
157
|
end
|
162
158
|
|
163
|
-
def error_response
|
159
|
+
def error_response exception_object
|
164
160
|
message = if exception_object.respond_to?(:body) && exception_object.body.length > 0
|
165
161
|
description = JSON.load(exception_object.body)['messages'].to_sentence
|
166
162
|
'%s: %s (%s)' % [exception_object.details, description, exception_object.code]
|
@@ -168,12 +164,12 @@ module ActiveMerchant
|
|
168
164
|
exception_object.message
|
169
165
|
end
|
170
166
|
|
171
|
-
Response.new
|
167
|
+
Response.new false, message, exception: exception_object
|
172
168
|
end
|
173
169
|
|
174
|
-
def assert_currency
|
170
|
+
def assert_currency currency, amount
|
175
171
|
raise ArgumentError, 'currency not provided' unless currency
|
176
|
-
currency_model = Flow::Reference::Currencies.find!
|
172
|
+
currency_model = Flow::Reference::Currencies.find! currency
|
177
173
|
currency_model.to_cents(amount).to_f
|
178
174
|
end
|
179
175
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: flowcommerce-activemerchant
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.7
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dino Reic
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-04
|
11
|
+
date: 2017-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemerchant
|