class Veritrans
Constants
- Testing
- VERSION
Public Class Methods
More safe json parser
# File lib/veritrans.rb, line 40 def decode_notification_json(input) return Veritrans::Client._json_decode(input) end
Shortcut for Veritrans::Events
# File lib/veritrans.rb, line 30 def events if defined?(ActiveSupport::Deprecation) ActiveSupport::Deprecation.warn("`Veritrans.events` is deprecated. Please use `Veritrans::Events`.") else warn "`Veritrans.events` is deprecated. Please use `Veritrans::Events`." end Veritrans::Events if defined?(Veritrans::Events) end
# File lib/veritrans.rb, line 44 def instance @instance ||= new end
If you want to use multiple instances of Midtrans
in your code (e.g. process payments in different accounts), then you can create instance of Midtrans
client
mt_client = Midtrans.new( server_key: "My-Different-Key", client_key: "...", api_host: "https://api.sandbox.midtrans.com", # default http_options: { }, # optional logger: Logger.new(STDOUT), # optional file_logger: Logger.new(STDOUT), # optional ) mt_client.status("my-different-order-id")
# File lib/veritrans.rb, line 67 def initialize(options = nil) if options && options[:logger] self.logger = options.delete(:logger) options.delete("logger") end if options && options[:file_logger] self.file_logger = options.delete(:file_logger) options.delete("file_logger") end if options @config = Veritrans::Config.new(options) end end
Public Instance Methods
Calculate signature_key sha512 checksum for validating HTTP notifications
Arguments:
- params
-
A hash, should contain
:order_id, :status_code, :gross_amount
. Additional key:server_key
is required ifMidtrans.config
.server_key is not set
Example
Midtrans.checksum(order_id: "aa11", status_code: "200", gross_amount: 1000, server_key: "my-key") # => "5e00499b23a8932e833238b2f65dd4dd3d10451708c7ec4d93da69e8e7a2bac4f7f97f9f35a986a7d100d7fc58034e12..."
Raises:
-
ArgumentError
when missing or invalid parameters
# File lib/veritrans.rb, line 122 def checksum(params) require 'digest' unless defined?(Digest) params_sym = {} params.each do |key, value| params_sym[key.to_sym] = value end if (config.server_key.nil? || config.server_key == "") && params_sym[:server_key].nil? raise ArgumentError, "Server key is required. Please set Veritrans.config.server_key or :server_key key" end required = [:order_id, :status_code, :gross_amount] missing = required - params_sym.keys.select {|k| !!params_sym[k] } if missing.size > 0 raise ArgumentError, "Missing required parameters: #{missing.map(&:inspect).join(", ")}" end if params_sym[:gross_amount].is_a?(Numeric) params_sym[:gross_amount] = "%0.2f" % params_sym[:gross_amount] elsif params_sym[:gross_amount].is_a?(String) && params_sym[:gross_amount] !~ /\d+\.\d\d$/ raise ArgumentError, %{gross_amount has invalid format, should be a number or string with cents e.g "52.00" (given: #{params_sym[:gross_amount].inspect})} end seed = "#{params_sym[:order_id]}#{params_sym[:status_code]}" + "#{params_sym[:gross_amount]}#{params_sym[:server_key] || config.server_key}" logger.debug("checksum source: #{seed}") Digest::SHA2.new(512).hexdigest(seed) end
Midtrans
configuration. Can be used as DSL and as object
Use with block:
Midtrans.setup do config.load_yml "./midtrans.yml", Rails.env # load values from config # also can set one by one: config.server_key = "..." config.client_key = "..." config.api_host = "https://api.sandbox.midtrans.com" # (default) end
Use as object:
Midtrans.config.server_key
# File lib/veritrans.rb, line 99 def config(&block) if block instance_eval(&block) else @config ||= Veritrans::Config.new end end
# File lib/veritrans.rb, line 50 def events self.class.events end
Logger to file, only important information For rails apps it will write log to RAILS_ROOT/log/veritrans.log
# File lib/veritrans.rb, line 183 def file_logger if !@file_logger require 'logger' begin if defined?(Rails) && Rails.root require 'fileutils' FileUtils.mkdir_p(Rails.root.join("log")) @file_logger = Logger.new(Rails.root.join("log/veritrans.log").to_s) else @file_logger = Logger.new("/dev/null") end rescue => error STDERR.puts "Failed to create Midtrans.file_logger, will use /dev/null" STDERR.puts "#{error.class}: #{error.message}" STDERR.puts error.backtrace @file_logger = Logger.new("/dev/null") end end @file_logger end
Set custom file_logger
Midtrans.file_logger = Logger.new("./log/midtrans.log")
# File lib/veritrans.rb, line 209 def file_logger=(value) @file_logger = value end
General Midtrans
logger. For rails apps it will try to use Rails.logger
, for non-rails apps – it print to stdout
Midtrans.logger.info "Processing payment"
# File lib/veritrans.rb, line 159 def logger return @logger if @logger if defined?(Rails) Rails.logger else unless @log require 'logger' @log = Logger.new(STDOUT) @log.level = Logger::INFO end @log end end
Set custom logger
Midtrans.logger = Logger.new("./log/midtrans.log")
# File lib/veritrans.rb, line 177 def logger=(value) @logger = value end