Class: OpenPayU::Order

Inherits:
Object
  • Object
show all
Defined in:
lib/openpayu/order.rb

Overview

A class responsible for dealing with Order

Class Method Summary collapse

Class Method Details

.build_notify_response(request_id) ⇒ String

Creates OrderNotifyResponse to send to PayU

Parameters:

  • request_id (String)

    value of ReqId(UUID) from OrderNotifyRequest

Returns:

  • (String)

    Response in XML or JSON (depends on gem configuration)



109
110
111
112
113
114
115
# File 'lib/openpayu/order.rb', line 109

def self.build_notify_response(request_id)
  response = Models::NotifyResponse.new({
    res_id: request_id,
    status: { 'StatusCode' => 'SUCCESS' }
  })
  response.prepare_data('OrderNotifyResponse')
end

.cancel(order_id) ⇒ Documents::Response

Cancels Order

  • Sends to PayU OrderCancelRequest

Parameters:

  • order_id (String)

    PayU OrderId sent back in OrderCreateResponse

Returns:



73
74
75
76
77
78
79
80
81
# File 'lib/openpayu/order.rb', line 73

def self.cancel(order_id)
  url = Configuration.get_base_url + "order/#{order_id}." +
    Configuration.data_format
  request = Documents::Request.new(url)
  Documents::Response.new(
    Connection.delete(url, request.body, request.headers),
    'OrderCancelResponse'
  )
end

.consume_notification(request) ⇒ Documents::Response

Transforms OrderNotifyRequest to [Documents::Response]

Parameters:

  • request (Rack::Request||ActionDispatch::Request)

    object od request received from PayU

Returns:

Raises:



90
91
92
93
94
95
96
97
98
99
100
101
102
103
# File 'lib/openpayu/order.rb', line 90

def self.consume_notification(request)
  response = Documents::Response.new(
    { response: request, request: nil },
    'OrderNotifyRequest'
  )
  if !response.nil?
    response
  else
    raise(
      WrongNotifyRequest,
      "Invalid OrderNotifyRequest: #{request.inspect}"
    )
  end
end

.create(order) ⇒ Documents::Response

Creates new Order

  • Sends to PayU OrderCreateRequest

Parameters:

  • order (Hash)

    A Hash object containing full Models::Order object

Returns:

Raises:

  • (WrongOrderParameters)

    if provided Hash ‘order’ isn’t a valid object (with all required fields)



32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/openpayu/order.rb', line 32

def self.create(order)
  @order = Models::Order.new(order)
  if @order.all_objects_valid?
    url = Configuration.get_base_url + 'order.' + Configuration.data_format
    request =
      Documents::Request.new(@order.prepare_data('OrderCreateRequest'))
    Documents::Response.new(
      Connection.post(url, request.body, request.headers),
      'OrderCreateResponse'
    )
  else
    raise WrongOrderParameters.new(@order)
  end
end

.retrieve(order_id) ⇒ Documents::Response

Retrieves information about the order

  • Sends to PayU OrderRetrieveRequest

Parameters:

  • order_id (String)

    PayU OrderId sent back in OrderCreateResponse

Returns:



14
15
16
17
18
19
20
21
22
# File 'lib/openpayu/order.rb', line 14

def self.retrieve(order_id)
  url = Configuration.get_base_url + "order/#{order_id}." +
  Configuration.data_format
  request = Documents::Request.new(url)
  Documents::Response.new(
    Connection.get(url, request.body, request.headers),
    'OrderRetrieveResponse'
  )
end

.status_update(status_update) ⇒ Documents::Response

Updates Order status

  • Sends to PayU OrderStatusUpdateRequest

Parameters:

Returns:

Raises:



55
56
57
58
59
60
61
62
63
64
65
# File 'lib/openpayu/order.rb', line 55

def self.status_update(status_update)
  @update = OpenPayU::Models::StatusUpdate.new status_update
  url = Configuration.get_base_url + "order/#{@update.order_id}/status." +
    Configuration.data_format
  request =
    Documents::Request.new(@update.prepare_data('OrderStatusUpdateRequest'))
  Documents::Response.new(
    Connection.put(url, request.body, request.headers),
    'OrderStatusUpdateResponse'
  )
end