Class: SolidusPaypalCommercePlatform::Gateway

Inherits:
Object
  • Object
show all
Includes:
PayPalCheckoutSdk::Orders, PayPalCheckoutSdk::Payments
Defined in:
app/models/solidus_paypal_commerce_platform/gateway.rb

Instance Method Summary collapse

Constructor Details

#initialize(options) ⇒ Gateway

Returns a new instance of Gateway.



8
9
10
11
12
13
14
15
16
# File 'app/models/solidus_paypal_commerce_platform/gateway.rb', line 8

def initialize(options)
  # Cannot use kwargs because of how the Gateway is initialize by Solidus.
  @client = Client.new(
    test_mode: options.fetch(:test_mode, nil),
    client_id: options.fetch(:client_id),
    client_secret: options.fetch(:client_secret),
  )
  @options = options
end

Instance Method Details

#authorize(_money, source, _options) ⇒ Object



30
31
32
33
34
35
36
37
38
39
# File 'app/models/solidus_paypal_commerce_platform/gateway.rb', line 30

def authorize(_money, source, _options)
  request = OrdersAuthorizeRequest.new(source.paypal_order_id)

  response = @client.execute_with_response(request)
  if response.success?
    authorization_id = response.params["result"].purchase_units[0].payments.authorizations[0].id
    source.update(authorization_id: authorization_id)
  end
  response
end

#capture(money, _response_code, options) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
# File 'app/models/solidus_paypal_commerce_platform/gateway.rb', line 41

def capture(money, _response_code, options)
  source = options[:originator].source
  request = AuthorizationsCaptureRequest.new(source.authorization_id)
  request.request_body(amount: { currency_code: options[:currency], value: Money.new(money).dollars })

  response = capture_with_response(request)
  if response.success?
    source.update(capture_id: response.params["result"].id)
  end
  response
end

#create_order(order, auto_capture) ⇒ Object



73
74
75
76
77
78
79
# File 'app/models/solidus_paypal_commerce_platform/gateway.rb', line 73

def create_order(order, auto_capture)
  intent = auto_capture ? "CAPTURE" : "AUTHORIZE"
  request = OrdersCreateRequest.new
  paypal_order = SolidusPaypalCommercePlatform::PaypalOrder.new(order)
  request.request_body paypal_order.to_json(intent)
  @client.execute(request)
end

#credit(_money_cents, _transaction_id, options) ⇒ Object



53
54
55
56
57
58
59
60
61
62
63
64
# File 'app/models/solidus_paypal_commerce_platform/gateway.rb', line 53

def credit(_money_cents, _transaction_id, options)
  refund = options[:originator]
  source = refund.payment.source
  capture_id = source.capture_id
  request = CapturesRefundRequest.new(capture_id)
  request.request_body(amount: { currency_code: refund.currency, value: refund.amount })
  message = I18n.t('success', scope: @client.i18n_scope_for(request), amount: refund.amount)

  response = @client.execute_with_response(request, success_message: message)
  source.update(refund_id: response.params["result"].id) if response.success?
  response
end

#get_order(order_id) ⇒ Object



81
82
83
# File 'app/models/solidus_paypal_commerce_platform/gateway.rb', line 81

def get_order(order_id)
  @client.execute(OrdersGetRequest.new(order_id)).result
end

#purchase(money, source, options) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
# File 'app/models/solidus_paypal_commerce_platform/gateway.rb', line 18

def purchase(money, source, options)
  request = OrdersCaptureRequest.new(source.paypal_order_id)
  request.request_body(amount: { currency_code: options[:currency], value: Money.new(money).dollars })

  response = @client.execute_with_response(request)
  if response.success?
    capture_id = response.params["result"].purchase_units[0].payments.captures[0].id
    source.update(capture_id: capture_id)
  end
  response
end

#void(_response_code, options) ⇒ Object



66
67
68
69
70
71
# File 'app/models/solidus_paypal_commerce_platform/gateway.rb', line 66

def void(_response_code, options)
  authorization_id = options[:originator].source.authorization_id
  request = AuthorizationsVoidRequest.new(authorization_id)

  @client.execute_with_response(request)
end