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
Response body parsed as hash
Request options, a hash with :path, :method, :headers, :body
Excon::Response object
HTTP status code, should always be 200
HTTP request time, a Float
Request full URL, e.g. “api.sandbox.midtrans.com/v2/charge”
Public Class Methods
# 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
Raw response body as String
# File lib/veritrans/result.rb, line 112 def body response.body end
Return if VT-Link page was created
# File lib/veritrans/result.rb, line 78 def created? @data[:status_code] == '201' end
# 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
# File lib/veritrans/result.rb, line 103 def messages if @data[:message].present? @data[:message].chomp(']').sub(/^\[/, '').split(',').map(&:strip) else [] end end
# 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
Return "redirect_url"
field of response
# File lib/veritrans/result.rb, line 94 def redirect_url @data[:redirect_url] end
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
Return "status_message"
field of response
# File lib/veritrans/result.rb, line 89 def status_message @data[:status_message] end
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
Return "transaction_id"
field of response
# File lib/veritrans/result.rb, line 99 def transaction_id @data[:transaction_id] end