Class: Veritrans
- Inherits:
-
Object
- Object
- Veritrans
- Extended by:
- Forwardable
- Defined in:
- lib/veritrans.rb,
lib/veritrans/api.rb,
lib/veritrans/cli.rb,
lib/veritrans/client.rb,
lib/veritrans/config.rb,
lib/veritrans/events.rb,
lib/veritrans/result.rb,
lib/veritrans/testing.rb,
lib/veritrans/version.rb,
lib/generators/veritrans/install_generator.rb,
lib/generators/veritrans/payment_form_generator.rb
Defined Under Namespace
Modules: Api, CLI, Client Classes: Config, Events, InstallGenerator, PaymentFormGenerator, Result, SnapResult, TestingLib
Constant Summary collapse
- Testing =
Veritrans::TestingLib.new
- VERSION =
"2.2.0"
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_token, #create_vtlink, #delete_vtlink, #expire, #inquiry_points, #status
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")
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/veritrans.rb', line 67 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
40 41 42 |
# File 'lib/veritrans.rb', line 40 def decode_notification_json(input) return Veritrans::Client._json_decode(input) end |
.events ⇒ Object
Shortcut for Veritrans::Events
30 31 32 33 34 35 36 37 |
# 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 |
.instance ⇒ Object
44 45 46 |
# File 'lib/veritrans.rb', line 44 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_key
is 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:
-
ArgumentError
when missing or invalid parameters
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 152 |
# 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 |
#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
99 100 101 102 103 104 105 |
# File 'lib/veritrans.rb', line 99 def config(&block) if block instance_eval(&block) else @config ||= Veritrans::Config.new end end |
#events ⇒ Object
50 51 52 |
# File 'lib/veritrans.rb', line 50 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
183 184 185 186 187 188 189 190 191 192 193 194 |
# File 'lib/veritrans.rb', line 183 def file_logger if !@file_logger if defined?(Rails) && Rails.root @file_logger = Logger.new(Rails.root.join("log/veritrans.log").to_s) else require 'logger' @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")
200 201 202 |
# File 'lib/veritrans.rb', line 200 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"
159 160 161 162 163 164 165 166 167 168 169 170 171 |
# 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 |
#logger=(value) ⇒ Object
Set custom logger
Midtrans.logger = Logger.new("./log/midtrans.log")
177 178 179 |
# File 'lib/veritrans.rb', line 177 def logger=(value) @logger = value end |