flowcommerce-activemerchant 0.0.6 → 0.0.7
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.
- 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
|