class Veritrans::Result

Midtrans response object, a wrapper for raw response object plus helper methods

Usual response body for Midtrans.charge or Midtrans.status will look like this:

{
  "status_code": "200",
  "status_message": "Success, Mandiri Clickpay transaction is successful",
  "transaction_id": "d788e503-3fab-4296-9c10-83b107324cb9",
  "order_id": "2016-11-14 11:54:03 +0800",
  "gross_amount": "10000.00",
  "payment_type": "mandiri_clickpay",
  "transaction_time": "2016-11-14 10:54:02",
  "transaction_status": "settlement",
  "fraud_status": "accept",
  "approval_code": "1479095646260",
  "masked_card": "411111-1111"
}

Result object can be used like this:

result.success?    # => true
result.status_code # => 200
result.transaction_status # => "settlement"
result.fraud_status # => "accept"
result.approval_code # => "1479095646260"
result.masked_card # => "411111-1111"

result.data # => {:status_code => "200", :status_message => "Success, Mandiri ..."} # add data as hash
result.time # => 1.3501

Attributes

data[R]

Response body parsed as hash

request_options[R]

Request options, a hash with :path, :method, :headers, :body

response[R]

Excon::Response object

status[R]

HTTP status code, should always be 200

time[R]

HTTP request time, a Float

url[R]

Request full URL, e.g. “api.sandbox.midtrans.com/v2/charge

Public Class Methods

new(response, url, request_options, time) click to toggle source
# File lib/veritrans/result.rb, line 46
def initialize(response, url, request_options, time)
  begin
    if url =~ %r{/v2/.+/transcript$}
      @data = {}
    else
      @data = Veritrans::Client._json_decode(response.body)

      # Failback for Hash#symbolize_keys
      @data.keys.each do |key|
        @data[(key.to_sym rescue key) || key] = @data.delete(key)
      end
    end

  rescue => e
    Veritrans.logger.info "Error parsing Veritrans response #{e.message}"
    Veritrans.logger.info e.backtrace.join("\n")
    @data = {}
  end

  @time = time
  @status = response.status
  @response = response
  @url = url
  @request_options = request_options
end

Public Instance Methods

body() click to toggle source

Raw response body as String

# File lib/veritrans/result.rb, line 112
def body
  response.body
end
created?() click to toggle source

Return if VT-Link page was created

# File lib/veritrans/result.rb, line 78
def created?
  @data[:status_code] == '201'
end
inspect() click to toggle source
# File lib/veritrans/result.rb, line 124
def inspect
  time_ms = (@time * 1000).round
  data = @data.inspect.gsub(/:([^\s]+)=>/, "\\1: ")
  "#<#{self.class.to_s}:#{object_id} ^^ status: #{@status} time: #{time_ms}ms ^^ data: #{data}>"
end
messages() click to toggle source
# File lib/veritrans/result.rb, line 103
def messages
  if @data[:message].present?
    @data[:message].chomp(']').sub(/^\[/, '').split(',').map(&:strip)
  else
    []
  end
end
method_missing(method_name, *args) click to toggle source
Calls superclass method
# File lib/veritrans/result.rb, line 116
def method_missing(method_name, *args)
  if args.size == 0 && @data && @data.has_key?(method_name)
    return @data[method_name]
  else
    super
  end
end
redirect_url() click to toggle source

Return "redirect_url" field of response

# File lib/veritrans/result.rb, line 94
def redirect_url
  @data[:redirect_url]
end
status_code() click to toggle source

Return "status_code" field of response Docs api-docs.midtrans.com/#status-code

# File lib/veritrans/result.rb, line 84
def status_code
  @data[:status_code].to_i
end
status_message() click to toggle source

Return "status_message" field of response

# File lib/veritrans/result.rb, line 89
def status_message
  @data[:status_message]
end
success?() click to toggle source

Return whenever transaction is successful, based on status_code

# File lib/veritrans/result.rb, line 73
def success?
  @data[:status_code] == '200' || @data[:status_code] == '201' || @data[:status_code] == '407'
end
transaction_id() click to toggle source

Return "transaction_id" field of response

# File lib/veritrans/result.rb, line 99
def transaction_id
  @data[:transaction_id]
end