killbill-paypal-express 5.0.17 → 6.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 23314a804c43068e902755d06859b55eb6006daf
4
- data.tar.gz: 3d503c8f6b3c951b1b7d9dff42bd6bd15d98c1cd
3
+ metadata.gz: ef211332b6640d41c9bbd87f64705c56ecec9b10
4
+ data.tar.gz: 7d7830ee4c7612520817e43fa36dea798fc0ebbe
5
5
  SHA512:
6
- metadata.gz: 10c7e4aa4501351593a5950b394fe79b56e137b64c9e207915d378634f004ef450083f0b9e7b3ae391e7c0727a43c8442d53a9cb3cf9ab1f446a2f971258aa47
7
- data.tar.gz: 4088bb22ce6efbd3d76eed7e7001c4d6c9ccd41ae88ea128a5b91ad09c3c71588c3590d94a737e3934d9db8dcd834c154e2bea1960c5ec2ecdfe5e7fd1ca3e21
6
+ metadata.gz: 61050da6f063c77bc5f6f092336349ab0fad7a4798d976ed560b8171008409818be031edca47edecc1f73f5d90cae74d13611f96050cea9e8a260418cd2509dd
7
+ data.tar.gz: 30b3d2eddc0043a449d3edb547bded37078279f31aedc46ffe17858ef395c26bac65dcde8325a9fd0ea00013d058c5895622990809b78fd94988deae9768a89d
@@ -195,6 +195,7 @@ module Killbill #:nodoc:
195
195
 
196
196
  kb_account = ::Killbill::Plugin::ActiveMerchant::Utils::LazyEvaluator.new { @kb_apis.account_user_api.get_account_by_id(kb_account_id, jcontext) }
197
197
  amount = (options[:amount] || '0').to_f
198
+ effective_date = options[:effective_date] || Time.now.utc
198
199
  currency = options[:currency] || kb_account.currency
199
200
 
200
201
  response = initiate_express_checkout(kb_account_id, amount, currency, all_properties, context)
@@ -216,7 +217,7 @@ module Killbill #:nodoc:
216
217
  payment_external_key = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(options, :payment_external_key)
217
218
  transaction_external_key = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(options, :transaction_external_key)
218
219
 
219
- kb_payment_method = (@kb_apis.payment_api.get_account_payment_methods(kb_account_id, false, [], jcontext).find { |pm| pm.plugin_name == 'killbill-paypal-express' })
220
+ kb_payment_method = (@kb_apis.payment_api.get_account_payment_methods(kb_account_id, false, false, [], jcontext).find { |pm| pm.plugin_name == 'killbill-paypal-express' })
220
221
 
221
222
  auth_mode = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(options, :auth_mode)
222
223
  # By default, the SALE mode is used.
@@ -227,6 +228,7 @@ module Killbill #:nodoc:
227
228
  nil,
228
229
  amount,
229
230
  currency,
231
+ effective_date,
230
232
  payment_external_key,
231
233
  transaction_external_key,
232
234
  custom_props,
@@ -238,6 +240,7 @@ module Killbill #:nodoc:
238
240
  nil,
239
241
  amount,
240
242
  currency,
243
+ effective_date,
241
244
  payment_external_key,
242
245
  transaction_external_key,
243
246
  custom_props,
@@ -301,59 +304,28 @@ module Killbill #:nodoc:
301
304
  response
302
305
  end
303
306
 
304
- def create_billing_aggrement(token,
305
- kb_account_id,
306
- kb_tenant_id,
307
- payment_processor_account_id,
308
- kb_payment_id = nil,
309
- kb_payment_transaction_id = nil,
310
- transaction_type = nil)
311
- raise 'Could create billing aggrement: the token is missing' if token.blank?
312
-
313
- # Go to Paypal to create the billing aggrement
314
- payment_processor_account_id = payment_processor_account_id || :default
315
- gateway = lookup_gateway(payment_processor_account_id, kb_tenant_id)
316
- gw_response = gateway.store(token)
317
-
318
- response = @response_model.create_response(:store, kb_account_id, kb_payment_id, kb_payment_transaction_id, transaction_type, payment_processor_account_id, kb_tenant_id, gw_response)
319
-
320
- raise response.message unless response.success?
321
- raise "Could not create billing aggrement for token #{token}" if response.billing_agreement_id.blank?
322
-
323
- response
324
- end
325
-
326
- def add_default_options(kb_payment_transaction_id, options)
327
- options[:payment_type] ||= 'Any'
328
- options[:invoice_id] ||= kb_payment_transaction_id
329
- options[:ip] ||= @ip
330
- end
331
-
332
- def add_payment_method_options(kb_account_id, kb_payment_method_id, context, options, properties_hash)
333
- options[:token] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :token) || find_last_token(kb_account_id, context.tenant_id)
334
- options[:reference_id] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :baid)
335
-
307
+ def add_required_options(kb_payment_transaction_id, kb_payment_method_id, context, options)
336
308
  payment_method = @payment_method_model.from_kb_payment_method_id(kb_payment_method_id, context.tenant_id)
337
309
 
338
310
  options[:payer_id] ||= payment_method.paypal_express_payer_id.presence
339
311
  options[:token] ||= payment_method.paypal_express_token.presence
340
312
  options[:reference_id] ||= payment_method.token.presence # baid
313
+
314
+ options[:payment_type] ||= 'Any'
315
+ options[:invoice_id] ||= kb_payment_transaction_id
316
+ options[:ip] ||= @ip
341
317
  end
342
318
 
343
319
  def initiate_express_checkout(kb_account_id, amount, currency, properties, context)
344
320
  properties_hash = properties_to_hash(properties)
345
321
 
322
+ with_baid = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :with_baid)
323
+
346
324
  options = {}
347
325
  options[:return_url] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :return_url)
348
326
  options[:cancel_return_url] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :cancel_return_url)
349
327
  options[:payment_processor_account_id] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :payment_processor_account_id)
350
328
 
351
- with_baid = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :with_baid)
352
- if with_baid
353
- options[:payment_processor_account_id] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :payment_master_processor_account_id)
354
- [:billing_agreement_type, :billing_agreement_description].each { |sym| options[sym] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, sym) }
355
- end
356
-
357
329
  add_optional_parameters options, properties_hash, currency
358
330
 
359
331
  amount_in_cents = amount.nil? ? nil : to_cents(amount, currency)
@@ -372,15 +344,7 @@ module Killbill #:nodoc:
372
344
 
373
345
  def authorize_or_purchase_payment(kb_account_id, kb_payment_id, kb_payment_transaction_id, kb_payment_method_id, amount, currency, properties, context, is_authorize = false)
374
346
  properties_hash = properties_to_hash properties
375
- with_baid = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :with_baid)
376
- logger.info("withBaidFlag=#{with_baid}")
377
-
378
347
  payment_processor_account_id = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :payment_processor_account_id)
379
- logger.info("paymentProcessorAccountId=#{payment_processor_account_id}")
380
-
381
- payment_master_processor_account_id = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :payment_master_processor_account_id)
382
- logger.info("paymentMasterProcessorAccountId=#{payment_master_processor_account_id}")
383
-
384
348
  transaction_type = is_authorize ? :AUTHORIZE : :PURCHASE
385
349
  api_call_type = is_authorize ? :authorize : :purchase
386
350
 
@@ -407,79 +371,14 @@ module Killbill #:nodoc:
407
371
  transaction
408
372
  else
409
373
  options = {}
410
- add_default_options(kb_payment_transaction_id, options)
411
- add_payment_method_options(kb_account_id, kb_payment_method_id, context, options, properties_hash)
374
+ add_required_options(kb_payment_transaction_id, kb_payment_method_id, context, options)
412
375
  options[:token] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :token) || find_last_token(kb_account_id, context.tenant_id)
413
376
  # Find the payment_processor_id if not provided
414
377
  payment_processor_account_id ||= find_payment_processor_id_from_initial_call(kb_account_id, context.tenant_id, options[:token])
415
378
  options[:payment_processor_account_id] = payment_processor_account_id
416
- options[:payer_id] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :payer_id)
417
-
418
- if with_baid
419
- baid_payment_processor_account_id = payment_master_processor_account_id
420
- else
421
- baid_payment_processor_account_id = payment_processor_account_id
422
- end
423
-
424
- if with_baid
425
- if options.has_key?(:token) && options[:reference_id].nil?
426
- # Retrieve payer_id and payer_email
427
- begin
428
-
429
- payer_info = get_payer_info(options[:token],
430
- kb_account_id,
431
- context.tenant_id,
432
- baid_payment_processor_account_id,
433
- kb_payment_id,
434
- kb_payment_transaction_id,
435
- transaction_type)
436
- rescue => e
437
- # Maybe invalid token?
438
- response = @response_model.create(:api_call => api_call_type,
439
- :kb_account_id => kb_account_id,
440
- :kb_payment_id => kb_payment_id,
441
- :kb_payment_transaction_id => kb_payment_transaction_id,
442
- :transaction_type => transaction_type,
443
- :authorization => nil,
444
- :payment_processor_account_id => baid_payment_processor_account_id,
445
- :kb_tenant_id => context.tenant_id,
446
- :success => false,
447
- :created_at => Time.now.utc,
448
- :updated_at => Time.now.utc,
449
- :message => { :payment_plugin_status => :CANCELED, :exception_class => e.class.to_s, :exception_message => e.message }.to_json)
450
- return response.to_transaction_info_plugin(nil)
451
- end
452
- if options[:payer_id].nil?
453
- options[:payer_id] = payer_info.payer_id
454
- end
455
- options[:payer_email] = payer_info.payer_email
456
-
457
- begin
458
- options[:reference_id] = create_billing_aggrement(options[:token],
459
- kb_account_id,
460
- context.tenant_id,
461
- baid_payment_processor_account_id,
462
- kb_payment_id,
463
- kb_payment_transaction_id,
464
- transaction_type).billing_agreement_id
465
- rescue => e
466
- # Maybe invalid token?
467
- response = @response_model.create(:api_call => api_call_type,
468
- :kb_account_id => kb_account_id,
469
- :kb_payment_id => kb_payment_id,
470
- :kb_payment_transaction_id => kb_payment_transaction_id,
471
- :transaction_type => transaction_type,
472
- :authorization => nil,
473
- :payment_processor_account_id => baid_payment_processor_account_id,
474
- :kb_tenant_id => context.tenant_id,
475
- :success => false,
476
- :created_at => Time.now.utc,
477
- :updated_at => Time.now.utc,
478
- :message => { :payment_plugin_status => :CANCELED, :exception_class => e.class.to_s, :exception_message => e.message }.to_json)
479
- return response.to_transaction_info_plugin(nil)
480
- end
481
- end
482
379
 
380
+ # We have a baid on file
381
+ if options[:reference_id]
483
382
  if is_authorize
484
383
  gateway_call_proc = Proc.new do |gateway, linked_transaction, payment_source, amount_in_cents, options|
485
384
  # Can't use default implementation: the purchase signature is for one-off payments only
@@ -492,39 +391,37 @@ module Killbill #:nodoc:
492
391
  end
493
392
  end
494
393
  else
495
-
496
- if options.has_key?(:token)
497
- # Retrieve payer_id and payer_email
498
- begin
499
-
500
- payer_info = get_payer_info(options[:token],
501
- kb_account_id,
502
- context.tenant_id,
503
- baid_payment_processor_account_id,
504
- kb_payment_id,
505
- kb_payment_transaction_id,
506
- transaction_type)
507
- rescue => e
508
- # Maybe invalid token?
509
- response = @response_model.create(:api_call => api_call_type,
510
- :kb_account_id => kb_account_id,
511
- :kb_payment_id => kb_payment_id,
512
- :kb_payment_transaction_id => kb_payment_transaction_id,
513
- :transaction_type => transaction_type,
514
- :authorization => nil,
515
- :payment_processor_account_id => baid_payment_processor_account_id,
516
- :kb_tenant_id => context.tenant_id,
517
- :success => false,
518
- :created_at => Time.now.utc,
519
- :updated_at => Time.now.utc,
520
- :message => { :payment_plugin_status => :CANCELED, :exception_class => e.class.to_s, :exception_message => e.message }.to_json)
521
- return response.to_transaction_info_plugin(nil)
522
- end
523
- if options[:payer_id].nil?
524
- options[:payer_id] = payer_info.payer_id
525
- end
526
- options[:payer_email] = payer_info.payer_email
394
+ # One-off payment
395
+ # Retrieve payer_id and payer_email
396
+ begin
397
+ payer_info = get_payer_info(options[:token],
398
+ kb_account_id,
399
+ context.tenant_id,
400
+ payment_processor_account_id,
401
+ kb_payment_id,
402
+ kb_payment_transaction_id,
403
+ transaction_type)
404
+ rescue => e
405
+ # Maybe invalid token?
406
+ response = @response_model.create(:api_call => api_call_type,
407
+ :kb_account_id => kb_account_id,
408
+ :kb_payment_id => kb_payment_id,
409
+ :kb_payment_transaction_id => kb_payment_transaction_id,
410
+ :transaction_type => transaction_type,
411
+ :authorization => nil,
412
+ :payment_processor_account_id => payment_processor_account_id,
413
+ :kb_tenant_id => context.tenant_id,
414
+ :success => false,
415
+ :created_at => Time.now.utc,
416
+ :updated_at => Time.now.utc,
417
+ :message => { :payment_plugin_status => :CANCELED, :exception_class => e.class.to_s, :exception_message => e.message }.to_json)
418
+ return response.to_transaction_info_plugin(nil)
419
+ end
420
+ options[:payer_id] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :payer_id)
421
+ if options[:payer_id].nil?
422
+ options[:payer_id] = payer_info.payer_id
527
423
  end
424
+ options[:payer_email] = payer_info.payer_email
528
425
 
529
426
  if is_authorize
530
427
  gateway_call_proc = Proc.new do |gateway, linked_transaction, payment_source, amount_in_cents, options|
@@ -717,19 +614,15 @@ module Killbill #:nodoc:
717
614
  end
718
615
 
719
616
  def get_raw_payment_info(kb_payment_id, context)
617
+ ignored_api_calls = [:details_for]
720
618
  responses = @response_model.from_kb_payment_id(@transaction_model, kb_payment_id, context.tenant_id)
721
- details_for_response = responses.select {|r| r.api_call.to_sym == :details_for}.last
722
- details_for_plugin_info = details_for_response.nil? ? nil : details_for_response.to_transaction_info_plugin
723
-
724
619
  responses = responses.reject do |response|
725
- response == details_for_response
620
+ ignored_api_calls.include?(response.api_call.to_sym)
726
621
  end
727
622
  t_info_plugins = responses.collect do |response|
728
623
  response.to_transaction_info_plugin(response.send("#{@identifier}_transaction"))
729
624
  end
730
625
 
731
- merge_selected_properties_from_details_call(t_info_plugins, details_for_plugin_info, [:payerEmail])
732
-
733
626
  # Completed purchases/authorizations will have two rows in the responses table (one for api_call 'build_form_descriptor', one for api_call 'purchase/authorize')
734
627
  # Other transaction types don't support the :PENDING state
735
628
  target_transaction_types = [:PURCHASE, :AUTHORIZE]
@@ -737,25 +630,7 @@ module Killbill #:nodoc:
737
630
 
738
631
  # Filter out the pending transaction if there is already a response tied with the same transaction but indicating a final state
739
632
  t_info_plugins_without_pending = t_info_plugins.reject { |t_info_plugin| target_transaction_types.include?(t_info_plugin.transaction_type) && t_info_plugin.status == :PENDING }
740
- result = [with_only_pending_trx ? t_info_plugins : t_info_plugins_without_pending, t_info_plugins, with_only_pending_trx]
741
- result
742
- end
743
-
744
- def merge_selected_properties_from_details_call(plugin_infos, to_merge_plugin_info, merge_properties)
745
- unless to_merge_plugin_info.nil?
746
- plugin_infos.each do |trx_plugin_info|
747
- merge_properties.each do |p|
748
- p_value = find_value_from_properties(to_merge_plugin_info.properties, p)
749
- unless p_value.blank?
750
- if trx_plugin_info.properties.detect {|mp| mp.key.to_s == p.to_s}.nil?
751
- trx_plugin_info.properties << create_plugin_property(p.to_s, p_value)
752
- else
753
- trx_plugin_info.properties.detect {|mp| mp.key.to_s == p.to_s} .value = p_value
754
- end
755
- end
756
- end
757
- end
758
- end
633
+ [with_only_pending_trx ? t_info_plugins : t_info_plugins_without_pending, t_info_plugins, with_only_pending_trx]
759
634
  end
760
635
  end
761
636
  end
@@ -98,6 +98,7 @@ module Killbill #:nodoc:
98
98
 
99
99
  def self.sensitive_fields
100
100
  [:payer_name,
101
+ :payer_email,
101
102
  :contact_phone,
102
103
  :ship_to_address_name,
103
104
  :ship_to_address_company,
@@ -25,8 +25,8 @@ module Killbill #:nodoc:
25
25
 
26
26
  if with_baid
27
27
  options[:billing_agreement] ||= {}
28
- options[:billing_agreement][:type] ||= options[:billing_agreement_type] || 'MerchantInitiatedBilling'
29
- options[:billing_agreement][:description] ||= options[:billing_agreement_description] || 'Kill Bill billing agreement'
28
+ options[:billing_agreement][:type] ||= 'MerchantInitiatedBilling'
29
+ options[:billing_agreement][:description] ||= 'Kill Bill billing agreement'
30
30
  end
31
31
 
32
32
  # Go to Paypal (SetExpressCheckout call)
metadata CHANGED
@@ -1,21 +1,21 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: killbill-paypal-express
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.17
4
+ version: 6.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kill Bill core team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-27 00:00:00.000000000 Z
11
+ date: 2018-07-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
16
  - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: '8.0'
18
+ version: '9.4'
19
19
  name: killbill
20
20
  prerelease: false
21
21
  type: :runtime
@@ -23,7 +23,7 @@ dependencies:
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '8.0'
26
+ version: '9.4'
27
27
  - !ruby/object:Gem::Dependency
28
28
  requirement: !ruby/object:Gem::Requirement
29
29
  requirements:
@@ -237,7 +237,7 @@ dependencies:
237
237
  requirements:
238
238
  - - "~>"
239
239
  - !ruby/object:Gem::Version
240
- version: 2.12.0
240
+ version: 3.5.0
241
241
  name: rspec
242
242
  prerelease: false
243
243
  type: :development
@@ -245,7 +245,7 @@ dependencies:
245
245
  requirements:
246
246
  - - "~>"
247
247
  - !ruby/object:Gem::Version
248
- version: 2.12.0
248
+ version: 3.5.0
249
249
  - !ruby/object:Gem::Dependency
250
250
  requirement: !ruby/object:Gem::Requirement
251
251
  requirements:
@@ -260,6 +260,26 @@ dependencies:
260
260
  - - "~>"
261
261
  - !ruby/object:Gem::Version
262
262
  version: 2.53.0
263
+ - !ruby/object:Gem::Dependency
264
+ requirement: !ruby/object:Gem::Requirement
265
+ requirements:
266
+ - - "~>"
267
+ - !ruby/object:Gem::Version
268
+ version: '1.2'
269
+ - - "<="
270
+ - !ruby/object:Gem::Version
271
+ version: 1.2.4
272
+ name: websocket
273
+ prerelease: false
274
+ type: :development
275
+ version_requirements: !ruby/object:Gem::Requirement
276
+ requirements:
277
+ - - "~>"
278
+ - !ruby/object:Gem::Version
279
+ version: '1.2'
280
+ - - "<="
281
+ - !ruby/object:Gem::Version
282
+ version: 1.2.4
263
283
  - !ruby/object:Gem::Dependency
264
284
  requirement: !ruby/object:Gem::Requirement
265
285
  requirements: