openpay 0.9.8

Sign up to get free protection for your applications and to get access to all the features.
Files changed (51) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +17 -0
  3. data/.idea/.name +1 -0
  4. data/.idea/.rakeTasks +7 -0
  5. data/.idea/OpenPay.iml +614 -0
  6. data/.idea/dictionaries/ronnie.xml +7 -0
  7. data/.idea/encodings.xml +5 -0
  8. data/.idea/misc.xml +5 -0
  9. data/.idea/modules.xml +9 -0
  10. data/.idea/runConfigurations/Run_spec__bankaccounts_spec___OpenPay.xml +37 -0
  11. data/.idea/runConfigurations/Run_spec__customers_spec___OpenPay.xml +37 -0
  12. data/.idea/runConfigurations/all_specs.xml +41 -0
  13. data/.idea/scopes/scope_settings.xml +5 -0
  14. data/.idea/vcs.xml +7 -0
  15. data/Gemfile +11 -0
  16. data/LICENSE.txt +13 -0
  17. data/OpenPay.gemspec +24 -0
  18. data/README.md +370 -0
  19. data/Rakefile +1 -0
  20. data/lib/OpenPay/Cards.rb +76 -0
  21. data/lib/OpenPay/Charges.rb +79 -0
  22. data/lib/OpenPay/Customers.rb +195 -0
  23. data/lib/OpenPay/Fees.rb +5 -0
  24. data/lib/OpenPay/Payouts.rb +59 -0
  25. data/lib/OpenPay/Plans.rb +28 -0
  26. data/lib/OpenPay/Subscriptions.rb +58 -0
  27. data/lib/OpenPay/Transfers.rb +43 -0
  28. data/lib/OpenPay/bankaccounts.rb +66 -0
  29. data/lib/OpenPay/errors/open_pay_exception.rb +51 -0
  30. data/lib/OpenPay/errors/open_pay_exception_factory.rb +58 -0
  31. data/lib/OpenPay/errors/openpay_connection_exception.rb +3 -0
  32. data/lib/OpenPay/errors/openpay_transaction_exception.rb +5 -0
  33. data/lib/OpenPay/open_pay_resource.rb +242 -0
  34. data/lib/OpenPay/open_pay_resource_factory.rb +10 -0
  35. data/lib/OpenPay/openpay_api.rb +63 -0
  36. data/lib/OpenPay/version.rb +3 -0
  37. data/lib/openpay.rb +34 -0
  38. data/test/Factories.rb +258 -0
  39. data/test/spec/bankaccounts_spec.rb +187 -0
  40. data/test/spec/cards_spec.rb +411 -0
  41. data/test/spec/charges_spec.rb +377 -0
  42. data/test/spec/customers_spec.rb +230 -0
  43. data/test/spec/exceptions_spec.rb +138 -0
  44. data/test/spec/fees_spec.rb +113 -0
  45. data/test/spec/openpayresource_spec.rb +52 -0
  46. data/test/spec/payouts_spec.rb +197 -0
  47. data/test/spec/plans_spec.rb +229 -0
  48. data/test/spec/subscriptions_spec.rb +228 -0
  49. data/test/spec/transfers_spec.rb +221 -0
  50. data/test/spec_helper.rb +16 -0
  51. metadata +135 -0
@@ -0,0 +1,10 @@
1
+ class OpenPayResourceFactory
2
+ def OpenPayResourceFactory::create(resource,merchant_id,private_key,production)
3
+ begin
4
+ Object.const_get(resource.capitalize).new(merchant_id,private_key,production)
5
+ rescue NameError
6
+ raise OpenpayException.new("Invalid resource name:#{resource}",false)
7
+ end
8
+ end
9
+ end
10
+
@@ -0,0 +1,63 @@
1
+ require 'logger'
2
+ require 'open_pay_resource_factory'
3
+ require 'base64'
4
+ require 'rest-client'
5
+ require 'uri'
6
+ require 'errors/open_pay_exception'
7
+
8
+
9
+ LOG= Logger.new(STDOUT)
10
+
11
+ #change to Logger::DEBUG if need trace information
12
+ #due the nature of the information, we recommend to never use a log file when in debug
13
+ LOG.level=Logger::DEBUG
14
+
15
+
16
+ class OpenpayApi
17
+
18
+
19
+ #API Endpoints
20
+ API_DEV='https://sandbox-api.openpay.mx/v1/'
21
+ API_PROD='https://api.openpay.mx'
22
+
23
+
24
+ #by default the testing environment is used
25
+ def initialize(merchant_id, private_key,production=false)
26
+ @merchant_id=merchant_id
27
+ @private_key=private_key
28
+ @production=production
29
+ end
30
+
31
+
32
+ # @return [nil]
33
+ def create(resource)
34
+ klass=OpenPayResourceFactory::create(resource, @merchant_id,@private_key,@production)
35
+ #attach api hook to be able to refere to same API instance from created resources
36
+ #TODO we may move it to the initialize method
37
+ klass.api_hook=self
38
+ klass
39
+ end
40
+
41
+
42
+ def OpenpayApi::base_url(production)
43
+ if production
44
+ API_PROD
45
+ else
46
+ API_DEV
47
+ end
48
+ end
49
+
50
+
51
+ def env
52
+ if @production
53
+ :production
54
+ else
55
+ :test
56
+ end
57
+ end
58
+
59
+
60
+
61
+
62
+
63
+ end
@@ -0,0 +1,3 @@
1
+ module Openpay
2
+ VERSION = '0.9.8'
3
+ end
data/lib/openpay.rb ADDED
@@ -0,0 +1,34 @@
1
+ #openpay version
2
+ require 'openpay/version'
3
+
4
+ #external dependencies
5
+ require 'rest-client'
6
+ require 'json'
7
+
8
+ module Openpay
9
+
10
+ #api setup / constants
11
+ require 'openpay/openpay_api'
12
+
13
+ #base class
14
+ require 'openpay/open_pay_resource'
15
+
16
+ #resource classes
17
+ require 'openpay/bankaccounts'
18
+ require 'openpay/cards'
19
+ require 'openpay/charges'
20
+ require 'openpay/customers'
21
+ require 'openpay/fees'
22
+ require 'openpay/payouts'
23
+ require 'openpay/plans'
24
+ require 'openpay/subscriptions'
25
+ require 'openpay/transfers'
26
+ require 'openpay/charges'
27
+
28
+ #exceptions
29
+ require 'openpay/errors/open_pay_exception_factory'
30
+ require 'openpay/errors/open_pay_exception'
31
+ require 'openpay/errors/openpay_transaction_exception'
32
+ require 'openpay/errors/openpay_connection_exception'
33
+
34
+ end
data/test/Factories.rb ADDED
@@ -0,0 +1,258 @@
1
+ require 'factory_girl'
2
+
3
+
4
+ FactoryGirl.define do
5
+
6
+ factory :customer, class:Hash do
7
+ name 'Ronnie'
8
+ last_name 'Bermejo'
9
+ email 'ronnie.bermejo.mx@gmail.com'
10
+ phone_number '0180012345'
11
+ address {{
12
+ postal_code: '76190',
13
+ state: 'QRO',
14
+ line1: 'LINE1',
15
+ line2: 'LINE2',
16
+ line3: 'LINE3',
17
+ country_code: 'MX',
18
+ city: 'Queretaro',
19
+ }}
20
+
21
+ initialize_with { attributes }
22
+
23
+ end
24
+
25
+
26
+
27
+ factory :valid_card, class:Hash do
28
+
29
+ bank_name 'visa'
30
+ holder_name 'Vicente Olmos'
31
+ expiration_month '09'
32
+ card_number '4111111111111111'
33
+ expiration_year '14'
34
+ bank_code 'bmx'
35
+ cvv2 '111'
36
+ address {{
37
+ postal_code: '76190',
38
+ state: 'QRO',
39
+ line1: 'LINE1',
40
+ line2: 'LINE2',
41
+ line3: 'LINE3',
42
+ country_code: 'MX',
43
+ city: 'Queretaro',
44
+ }}
45
+
46
+ initialize_with { attributes }
47
+
48
+ end
49
+
50
+
51
+ factory :valid_card2, class:Hash do
52
+
53
+ bank_name 'visa'
54
+ holder_name 'Alma Olmos'
55
+ expiration_month '09'
56
+ card_number '4242424242424242'
57
+ expiration_year '14'
58
+ bank_code 'bmx'
59
+ cvv2 '111'
60
+ address {{
61
+ postal_code: '76190',
62
+ state: 'QRO',
63
+ line1: 'LINE1',
64
+ line2: 'LINE2',
65
+ line3: 'LINE3',
66
+ country_code: 'MX',
67
+ city: 'Queretaro',
68
+ }}
69
+
70
+ initialize_with { attributes }
71
+
72
+ end
73
+
74
+
75
+
76
+ factory :only_deposit, class:Hash do
77
+
78
+ bank_name 'visa'
79
+ holder_name 'Alma Olmos'
80
+ expiration_month '09'
81
+ card_number '4444444444444448'
82
+ expiration_year '14'
83
+ bank_code 'bmx'
84
+ cvv2 '111'
85
+ address {{
86
+ postal_code: '76190',
87
+ state: 'QRO',
88
+ line1: 'LINE1',
89
+ line2: 'LINE2',
90
+ line3: 'LINE3',
91
+ country_code: 'MX',
92
+ city: 'Queretaro',
93
+ }}
94
+
95
+ initialize_with { attributes }
96
+
97
+ end
98
+
99
+
100
+ factory :expired_card, class:Hash do
101
+
102
+ bank_name 'visa'
103
+ holder_name 'Vicente Olmos'
104
+ expiration_month '09'
105
+ card_number '4000000000000069'
106
+ expiration_year '14'
107
+ bank_code 'bmx'
108
+ cvv2 '111'
109
+ address {{
110
+ postal_code: '76190',
111
+ state: 'QRO',
112
+ line1: 'LINE1',
113
+ line2: 'LINE2',
114
+ line3: 'LINE3',
115
+ country_code: 'MX',
116
+ city: 'Queretaro',
117
+ }}
118
+
119
+ initialize_with { attributes }
120
+
121
+ end
122
+
123
+
124
+
125
+ factory :bank_account, class:Hash do
126
+
127
+ holder_name 'Juan Perez'
128
+ self.alias 'Cuenta principal'
129
+ clabe '032180000118359719'
130
+
131
+ initialize_with { attributes }
132
+
133
+ end
134
+
135
+
136
+
137
+ factory :card_charge, class:Hash do
138
+
139
+
140
+ amount "1000"
141
+ description "Cargo inicial a tarjeta"
142
+ source_id "string"
143
+ method "card"
144
+ order_id 'required'
145
+
146
+ initialize_with { attributes }
147
+
148
+
149
+ end
150
+
151
+ factory :bank_charge, class:Hash do
152
+
153
+ amount "10000"
154
+ description "Cargo con banco"
155
+ source_id "string"
156
+ order_id 'required'
157
+ method "bank_account"
158
+
159
+
160
+ initialize_with { attributes }
161
+
162
+
163
+ end
164
+
165
+
166
+
167
+ factory :refund_description, class:Hash do
168
+ description 'A petición del cliente'
169
+ initialize_with { attributes }
170
+
171
+ end
172
+
173
+
174
+ factory :fee, class:Hash do
175
+ customer_id 'dvocf97jd20es3tw5laz'
176
+ amount '12.50'
177
+ description 'Cobro de Comisión'
178
+ initialize_with { attributes }
179
+
180
+ end
181
+
182
+
183
+
184
+ factory :payout_card, class:Hash do
185
+
186
+ method 'card'
187
+ destination_id '4444444444444448'
188
+ amount '2'
189
+ description 'Retiro de saldo semanal'
190
+
191
+ initialize_with { attributes }
192
+
193
+
194
+ end
195
+
196
+
197
+ factory :payout_bank_account, class:Hash do
198
+
199
+ method 'bank_account'
200
+ amount '1000'
201
+ destination_id 'required'
202
+ description 'Retiro de saldo semanal'
203
+
204
+ initialize_with { attributes }
205
+
206
+
207
+ end
208
+
209
+
210
+
211
+
212
+ factory :plan, class:Hash do
213
+
214
+ amount '150.00'
215
+ status_after_retry 'cancelled'
216
+ retry_times 2
217
+ name 'Curso de ingles'
218
+ repeat_unit 'week'
219
+ trial_days 30
220
+ repeat_every 1
221
+ initialize_with { attributes }
222
+
223
+
224
+ end
225
+
226
+
227
+
228
+ factory :transfer, class:Hash do
229
+
230
+ customer_id 'required'
231
+ amount 12.50
232
+ description 'Transferencia entre cuentas'
233
+ initialize_with { attributes }
234
+
235
+
236
+ end
237
+
238
+
239
+ factory :subscription, class:Hash do
240
+
241
+ trial_days 30
242
+ card_id 'required'
243
+ plan_id 'required'
244
+ initialize_with { attributes }
245
+
246
+
247
+
248
+
249
+
250
+
251
+ end
252
+
253
+
254
+
255
+
256
+
257
+
258
+ end
@@ -0,0 +1,187 @@
1
+ require '../spec_helper'
2
+
3
+
4
+ describe Bankaccounts do
5
+
6
+ #bankaccounts for merchant cannot be created using the api
7
+ #the merchant bank account should be created using the Openpay dashboard
8
+ before(:all) do
9
+
10
+ @merchant_id='mywvupjjs9xdnryxtplq'
11
+ @private_key='sk_92b25d3baec149e6b428d81abfe37006'
12
+
13
+ @openpay=OpenpayApi.new(@merchant_id,@private_key)
14
+ @bank_accounts=@openpay.create(:bankaccounts)
15
+ @customers=@openpay.create(:customers)
16
+
17
+ end
18
+
19
+
20
+ after(:all) do
21
+ @customers.delete_all
22
+ @bank_accounts.delete_all
23
+ end
24
+
25
+ describe '.create' do
26
+
27
+ it 'creates a customer bank account' do
28
+ customer_hash= FactoryGirl.build(:customer)
29
+ customer=@customers.create(customer_hash)
30
+
31
+ account_hash=FactoryGirl.build(:bank_account)
32
+ bank=@bank_accounts.create(account_hash,customer['id'])
33
+
34
+ bank_account=@bank_accounts.get(customer['id'],bank['id'])
35
+ expect(bank_account['alias']).to match 'Cuenta principal'
36
+
37
+ @bank_accounts.delete(customer['id'],bank['id'])
38
+
39
+ end
40
+
41
+ end
42
+
43
+
44
+
45
+ describe '.get' do
46
+
47
+ it 'get a given bank account for a given customer' do
48
+
49
+ customer_hash= FactoryGirl.build(:customer)
50
+ customer=@customers.create(customer_hash)
51
+
52
+ account_hash=FactoryGirl.build(:bank_account)
53
+ bank=@bank_accounts.create(account_hash,customer['id'])
54
+
55
+ bank_account=@bank_accounts.get(customer['id'],bank['id'])
56
+ expect(bank_account['alias']).to match 'Cuenta principal'
57
+ @bank_accounts.delete(customer['id'],bank['id'])
58
+
59
+ end
60
+
61
+ end
62
+
63
+
64
+
65
+ describe '.each' do
66
+
67
+
68
+ it 'iterator for all given customer bank accounts' do
69
+
70
+ customer_hash= FactoryGirl.build(:customer)
71
+ customer=@customers.create(customer_hash)
72
+
73
+ account_hash=FactoryGirl.build(:bank_account)
74
+ bank=@bank_accounts.create(account_hash,customer['id'])
75
+
76
+ @bank_accounts.each(customer['id']) do |bank_account|
77
+ expect( bank_account['alias']).to match 'Cuenta principal'
78
+ end
79
+
80
+ @bank_accounts.delete(customer['id'],bank['id'])
81
+ @customers.delete(customer['id'])
82
+
83
+ end
84
+
85
+
86
+ end
87
+
88
+
89
+ describe '.list' do
90
+
91
+ it 'should list the bank accounts using a given filter' do
92
+ pending
93
+ end
94
+ end
95
+
96
+
97
+
98
+ describe '.all' do
99
+
100
+ it 'list all bank accounts for a given customer' do
101
+
102
+ customer_hash= FactoryGirl.build(:customer)
103
+ customer=@customers.create(customer_hash)
104
+ expect(@bank_accounts.all(customer['id']).size).to be 0
105
+
106
+ account_hash=FactoryGirl.build(:bank_account)
107
+ bank=@bank_accounts.create(account_hash,customer['id'])
108
+ expect(@bank_accounts.all(customer['id']).size).to be 1
109
+
110
+ @bank_accounts.delete(customer['id'],bank['id'])
111
+ @customers.delete(customer['id'])
112
+
113
+ end
114
+
115
+ it 'fails to list all bank accounts when a non existing customer is given' do
116
+ expect { @bank_accounts.all('11111') }.to raise_exception(OpenpayTransactionException)
117
+ end
118
+
119
+ end
120
+
121
+
122
+ describe '.delete' do
123
+
124
+ it 'deletes a given bank account' do
125
+
126
+ customer_hash= FactoryGirl.build(:customer)
127
+ customer=@customers.create(customer_hash)
128
+ expect(@bank_accounts.all(customer['id']).size).to be 0
129
+
130
+
131
+ account_hash=FactoryGirl.build(:bank_account)
132
+ bank=@bank_accounts.create(account_hash,customer['id'])
133
+ expect(@bank_accounts.all(customer['id']).size).to be 1
134
+
135
+ @bank_accounts.delete(customer['id'],bank['id'])
136
+ @customers.delete(customer['id'])
137
+
138
+ end
139
+
140
+
141
+ it 'fails to delete a non existing bank accounts' do
142
+ expect { @customers.delete('1111') }.to raise_exception OpenpayTransactionException
143
+ end
144
+
145
+ end
146
+
147
+
148
+ describe '.delete_all' do
149
+
150
+ it 'deletes all bank accounts' do
151
+
152
+ customer_hash= FactoryGirl.build(:customer)
153
+ customer=@customers.create(customer_hash)
154
+
155
+ account_hash=FactoryGirl.build(:bank_account)
156
+
157
+ @bank_accounts.create(account_hash,customer['id'])
158
+ expect(@bank_accounts.all(customer['id']).size).to be 1
159
+
160
+ @bank_accounts.delete_all(customer['id'])
161
+ expect(@bank_accounts.all(customer['id']).size).to be 0
162
+
163
+
164
+ end
165
+
166
+ it 'fails to deletes all bank accounts when used on PROD' do
167
+
168
+ @openpayprod=OpenpayApi.new(@merchant_id, @private_key, true)
169
+ bank_accounts=@openpayprod.create(:bankaccounts)
170
+
171
+ expect { bank_accounts.delete_all('111111') }.to raise_exception OpenpayException
172
+
173
+
174
+ end
175
+
176
+ end
177
+
178
+
179
+
180
+
181
+
182
+
183
+
184
+
185
+
186
+
187
+ end