killbill-paypal-express 5.0.15 → 5.0.16

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.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/paypal_express/api.rb +128 -33
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 94d76dc9e50ed47e45f0d06f190f34779df7a42e
4
- data.tar.gz: cbf2a9ded0e14f69741e1a78e82d30d532234be5
3
+ metadata.gz: 9eed5bc0972cf50c5d1fc6e78c0fb1f6adaa9f19
4
+ data.tar.gz: 3d282224dcc0dbf454fd40705d6860a2498dca89
5
5
  SHA512:
6
- metadata.gz: bfae427c8064df1985796fbbfeb71d89458ec295f616a2dbce13126237619b0a6eaf0b557482241e0ad9164aa76baeeb890b2435b343175fe3a1938e0f0d0955
7
- data.tar.gz: da9ce852cbc8139824b15a19318948600edb7921f5047b42b9130e229f8a51b124783c37b13492d6199ec2485488f1bc5b558e4647ddb7e60ec9eae131d9887f
6
+ metadata.gz: ee1c6cb5b204b9ffbf3a4f4d9dad8a5785bed9365db77664c118a8bfd5cad7eab440c8366aa37cdb4f4b267bb371ad3c7340dc6f5f5b8d0af1e0bfd20ca42119
7
+ data.tar.gz: f1e4184e291e8e8bb74c9a2dff8e961e260b2768b78518c530305062fb718fb27189b936fe802184735f2107d8059509f38e41c3a17742a8fb5bc57d1338463e
@@ -301,6 +301,28 @@ module Killbill #:nodoc:
301
301
  response
302
302
  end
303
303
 
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
+
304
326
  def add_default_options(kb_payment_transaction_id, options)
305
327
  options[:payment_type] ||= 'Any'
306
328
  options[:invoice_id] ||= kb_payment_transaction_id
@@ -328,6 +350,7 @@ module Killbill #:nodoc:
328
350
 
329
351
  with_baid = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :with_baid)
330
352
  if with_baid
353
+ options[:payment_processor_account_id] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :payment_master_processor_account_id)
331
354
  [:billing_agreement_type, :billing_agreement_description].each { |sym| options[sym] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, sym) }
332
355
  end
333
356
 
@@ -349,7 +372,15 @@ module Killbill #:nodoc:
349
372
 
350
373
  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)
351
374
  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
+
352
378
  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
+
353
384
  transaction_type = is_authorize ? :AUTHORIZE : :PURCHASE
354
385
  api_call_type = is_authorize ? :authorize : :purchase
355
386
 
@@ -384,40 +415,71 @@ module Killbill #:nodoc:
384
415
  options[:payment_processor_account_id] = payment_processor_account_id
385
416
  options[:payer_id] = ::Killbill::Plugin::ActiveMerchant::Utils.normalized(properties_hash, :payer_id)
386
417
 
387
- if options.has_key?(:token)
388
- # Retrieve payer_id and payer_email
389
- begin
390
- payer_info = get_payer_info(options[:token],
391
- kb_account_id,
392
- context.tenant_id,
393
- payment_processor_account_id,
394
- kb_payment_id,
395
- kb_payment_transaction_id,
396
- transaction_type)
397
- rescue => e
398
- # Maybe invalid token?
399
- response = @response_model.create(:api_call => api_call_type,
400
- :kb_account_id => kb_account_id,
401
- :kb_payment_id => kb_payment_id,
402
- :kb_payment_transaction_id => kb_payment_transaction_id,
403
- :transaction_type => transaction_type,
404
- :authorization => nil,
405
- :payment_processor_account_id => payment_processor_account_id,
406
- :kb_tenant_id => context.tenant_id,
407
- :success => false,
408
- :created_at => Time.now.utc,
409
- :updated_at => Time.now.utc,
410
- :message => { :payment_plugin_status => :CANCELED, :exception_class => e.class.to_s, :exception_message => e.message }.to_json)
411
- return response.to_transaction_info_plugin(nil)
412
- end
413
- if options[:payer_id].nil?
414
- options[:payer_id] = payer_info.payer_id
415
- end
416
- options[:payer_email] = payer_info.payer_email
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
417
422
  end
418
423
 
419
- # We have a baid on file
420
- if options[:reference_id]
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
+
421
483
  if is_authorize
422
484
  gateway_call_proc = Proc.new do |gateway, linked_transaction, payment_source, amount_in_cents, options|
423
485
  # Can't use default implementation: the purchase signature is for one-off payments only
@@ -430,7 +492,40 @@ module Killbill #:nodoc:
430
492
  end
431
493
  end
432
494
  else
433
- # One-off payment
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
527
+ end
528
+
434
529
  if is_authorize
435
530
  gateway_call_proc = Proc.new do |gateway, linked_transaction, payment_source, amount_in_cents, options|
436
531
  gateway.authorize(amount_in_cents, options)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: killbill-paypal-express
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.0.15
4
+ version: 5.0.16
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: 2019-12-20 00:00:00.000000000 Z
11
+ date: 2020-03-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement