Class: Veritrans
- Inherits:
-
Object
- Object
- Veritrans
- Extended by:
- Forwardable
- Defined in:
- lib/veritrans.rb,
lib/veritrans/api.rb,
lib/veritrans/client.rb,
lib/veritrans/config.rb,
lib/veritrans/events.rb,
lib/veritrans/result.rb,
lib/veritrans/version.rb
Defined Under Namespace
Modules: Api, Client Classes: Config, Events, Result, SnapResult
Constant Summary collapse
- VERSION =
"2.4.1"
Class Method Summary collapse
-
.decode_notification_json(input) ⇒ Object
More safe json parser.
-
.events ⇒ Object
Shortcut for Veritrans::Events.
- .instance ⇒ Object
Instance Method Summary collapse
-
#checksum(params) ⇒ Object
Calculate signature_key sha512 checksum for validating HTTP notifications.
-
#config(&block) ⇒ Object
(also: #setup)
Midtrans configuration.
- #events ⇒ Object
-
#file_logger ⇒ Object
Logger to file, only important information For rails apps it will write log to RAILS_ROOT/log/veritrans.log.
-
#file_logger=(value) ⇒ Object
Set custom file_logger.
-
#initialize(options = nil) ⇒ Veritrans
constructor
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.
-
#logger ⇒ Object
General Midtrans logger.
-
#logger=(value) ⇒ Object
Set custom logger.
Methods included from Api
#approve, #cancel, #capture, #charge, #create_snap_redirect_url_str, #create_snap_token, #create_snap_token_string, #create_subscription, #create_vtlink, #delete_vtlink, #deny, #disable_subscription, #enable_subscription, #expire, #get_payment_account, #get_subscription, #inquiry_points, #link_payment_account, #refund, #status, #test_token, #unlink_payment_account, #update_subscription
Methods included from Client
_json_decode, #_json_encode, _json_encode, #request_with_logging
Constructor Details
#initialize(options = nil) ⇒ Veritrans
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")
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/veritrans.rb', line 66 def initialize( = nil) if && [:logger] self.logger = .delete(:logger) .delete("logger") end if && [:file_logger] self.file_logger = .delete(:file_logger) .delete("file_logger") end if @config = Veritrans::Config.new() end end |
Class Method Details
.decode_notification_json(input) ⇒ Object
More safe json parser
39 40 41 |
# File 'lib/veritrans.rb', line 39 def decode_notification_json(input) return Veritrans::Client._json_decode(input) end |
.events ⇒ Object
Shortcut for Veritrans::Events
29 30 31 32 33 34 35 36 |
# File 'lib/veritrans.rb', line 29 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 |
.instance ⇒ Object
43 44 45 |
# File 'lib/veritrans.rb', line 43 def instance @instance ||= new end |
Instance Method Details
#checksum(params) ⇒ Object
Calculate signature_key sha512 checksum for validating HTTP notifications
Arguments:
- params
-
A hash, should contain
:order_id, :status_code, :gross_amount. Additional key:server_keyis required if Midtrans.config.server_key is not set
Example
Midtrans.checksum(order_id: "aa11", status_code: "200", gross_amount: 1000, server_key: "my-key")
# => "5e00499b23a8932e833238b2f65dd4dd3d10451708c7ec4d93da69e8e7a2bac4f7f97f9f35a986a7d100d7fc58034e12..."
Raises:
-
ArgumentErrorwhen missing or invalid parameters
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 |
# File 'lib/veritrans.rb', line 121 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 |
#config(&block) ⇒ Object Also known as: setup
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
98 99 100 101 102 103 104 |
# File 'lib/veritrans.rb', line 98 def config(&block) if block instance_eval(&block) else @config ||= Veritrans::Config.new end end |
#events ⇒ Object
49 50 51 |
# File 'lib/veritrans.rb', line 49 def events self.class.events end |
#file_logger ⇒ Object
Logger to file, only important information For rails apps it will write log to RAILS_ROOT/log/veritrans.log
182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 |
# File 'lib/veritrans.rb', line 182 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 |
#file_logger=(value) ⇒ Object
Set custom file_logger
Midtrans.file_logger = Logger.new("./log/midtrans.log")
208 209 210 |
# File 'lib/veritrans.rb', line 208 def file_logger=(value) @file_logger = value end |
#logger ⇒ Object
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"
158 159 160 161 162 163 164 165 166 167 168 169 170 |
# File 'lib/veritrans.rb', line 158 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 |
#logger=(value) ⇒ Object
Set custom logger
Midtrans.logger = Logger.new("./log/midtrans.log")
176 177 178 |
# File 'lib/veritrans.rb', line 176 def logger=(value) @logger = value end |