mekari_midtrans_api 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +56 -0
- data/Gemfile +7 -0
- data/LICENSE +674 -0
- data/LICENSE.txt +21 -0
- data/README.md +154 -0
- data/Rakefile +8 -0
- data/bin/console +15 -0
- data/bin/setup +7 -0
- data/lib/midtrans_api.rb +10 -0
- data/lib/midtrans_api/api/base.rb +23 -0
- data/lib/midtrans_api/api/check/status.rb +14 -0
- data/lib/midtrans_api/api/credit_card/charge.rb +22 -0
- data/lib/midtrans_api/api/credit_card/token.rb +23 -0
- data/lib/midtrans_api/api/gopay/charge.rb +31 -0
- data/lib/midtrans_api/client.rb +70 -0
- data/lib/midtrans_api/configure.rb +25 -0
- data/lib/midtrans_api/errors.rb +55 -0
- data/lib/midtrans_api/middleware/handle_response_exception.rb +77 -0
- data/lib/midtrans_api/model/base.rb +36 -0
- data/lib/midtrans_api/model/check/status.rb +41 -0
- data/lib/midtrans_api/model/credit_card/charge.rb +34 -0
- data/lib/midtrans_api/model/credit_card/token.rb +18 -0
- data/lib/midtrans_api/model/gopay/charge.rb +28 -0
- data/lib/midtrans_api/version.rb +7 -0
- data/mekari_midtrans_api.gemspec +31 -0
- metadata +168 -0
@@ -0,0 +1,77 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MidtransApi
|
4
|
+
module Middleware
|
5
|
+
class HandleResponseException < Faraday::Middleware
|
6
|
+
VALID_STATUSES = %w[200 201 407].freeze
|
7
|
+
|
8
|
+
def initialize(app)
|
9
|
+
super(app)
|
10
|
+
end
|
11
|
+
|
12
|
+
def call(env)
|
13
|
+
@app.call(env).on_complete do |response|
|
14
|
+
validate_response(response.body)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
21
|
+
def validate_response(response)
|
22
|
+
json_response = JSON.parse(response)
|
23
|
+
return true if VALID_STATUSES.include?(json_response['status_code'])
|
24
|
+
|
25
|
+
case json_response['status_code']
|
26
|
+
when '202'
|
27
|
+
raise MidtransApi::Errors::PaymentDenied, json_response['status_message']
|
28
|
+
when '300'
|
29
|
+
raise MidtransApi::Errors::MovePermanently, json_response['status_message']
|
30
|
+
when '400'
|
31
|
+
raise MidtransApi::Errors::ValidationError, json_response['validation_messages'].first
|
32
|
+
when '401'
|
33
|
+
raise MidtransApi::Errors::AccessDenied, json_response['status_message']
|
34
|
+
when '402'
|
35
|
+
raise MidtransApi::Errors::UnauthorizedPayment, json_response['status_message']
|
36
|
+
when '403'
|
37
|
+
raise MidtransApi::Errors::ForbiddenRequest, json_response['status_message']
|
38
|
+
when '404'
|
39
|
+
raise MidtransApi::Errors::NotFound, json_response['status_message']
|
40
|
+
when '405'
|
41
|
+
raise MidtransApi::Errors::HttpNotAllowed, json_response['status_message']
|
42
|
+
when '406'
|
43
|
+
raise MidtransApi::Errors::DuplicateOrderId, json_response['status_message']
|
44
|
+
when '408'
|
45
|
+
raise MidtransApi::Errors::WrongDataType, json_response['status_message']
|
46
|
+
when '409'
|
47
|
+
raise MidtransApi::Errors::ManySameCardNumber, json_response['status_message']
|
48
|
+
when '410'
|
49
|
+
raise MidtransApi::Errors::MerchantAccountDeactivated, json_response['status_message']
|
50
|
+
when '411'
|
51
|
+
raise MidtransApi::Errors::ErrorTokenId, json_response['status_message']
|
52
|
+
when '412'
|
53
|
+
raise MidtransApi::Errors::CannotModifyTransaction, json_response['status_message']
|
54
|
+
when '413'
|
55
|
+
raise MidtransApi::Errors::MalformedSyntax, json_response['status_message']
|
56
|
+
when '414'
|
57
|
+
raise MidtransApi::Errors::RefundInvalidAmount, json_response['status_message']
|
58
|
+
when '500'
|
59
|
+
raise MidtransApi::Errors::InternalServerError, json_response['status_message']
|
60
|
+
when '501'
|
61
|
+
raise MidtransApi::Errors::FeatureNotAvailable, json_response['status_message']
|
62
|
+
when '502'
|
63
|
+
raise MidtransApi::Errors::BankConnectionProblem, json_response['status_message']
|
64
|
+
when '503'
|
65
|
+
raise MidtransApi::Errors::PartnerConnectionIssue, json_response['status_message']
|
66
|
+
when '504'
|
67
|
+
raise MidtransApi::Errors::FraudDetectionUnavailable, json_response['status_message']
|
68
|
+
when '505'
|
69
|
+
raise MidtransApi::Errors::PaymentReferenceUnavailable, json_response['status_message']
|
70
|
+
else
|
71
|
+
raise MidtransApi::Errors::UnknownError, json_response['status_message']
|
72
|
+
end
|
73
|
+
end
|
74
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MidtransApi
|
4
|
+
module Model
|
5
|
+
class Base
|
6
|
+
class << self
|
7
|
+
def attribute_keys
|
8
|
+
@attribute_keys ||= []
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def resource_attributes(*attributes)
|
14
|
+
attributes.each { |attribute| attr_accessor attribute }
|
15
|
+
attribute_keys.concat(attributes)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(params)
|
20
|
+
assign_attributes(params)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def assign_attributes(params)
|
26
|
+
self.class.attribute_keys.each do |attr|
|
27
|
+
resolved_attr = resolve_params_attr(attr)
|
28
|
+
|
29
|
+
unless params[resolved_attr].nil?
|
30
|
+
__send__("#{attr}=", params[resolved_attr])
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MidtransApi
|
4
|
+
module Model
|
5
|
+
module Check
|
6
|
+
class Status < MidtransApi::Model::Base
|
7
|
+
resource_attributes :transaction_time,
|
8
|
+
:transaction_id,
|
9
|
+
:gross_amount,
|
10
|
+
:currency,
|
11
|
+
:order_id,
|
12
|
+
:payment_type,
|
13
|
+
:signature_key,
|
14
|
+
:status_code,
|
15
|
+
:transaction_status,
|
16
|
+
:fraud_status,
|
17
|
+
:status_message,
|
18
|
+
:settlement_time,
|
19
|
+
:masked_card,
|
20
|
+
:merchant_id,
|
21
|
+
:bank,
|
22
|
+
:approval_code,
|
23
|
+
:channel_response_code,
|
24
|
+
:channel_response_message,
|
25
|
+
:card_type,
|
26
|
+
:refund_amount,
|
27
|
+
:refunds,
|
28
|
+
:refund_chargeback_id,
|
29
|
+
:created_at,
|
30
|
+
:reason,
|
31
|
+
:refund_key,
|
32
|
+
:refund_method,
|
33
|
+
:bank_confirmed_at
|
34
|
+
|
35
|
+
def resolve_params_attr(attr)
|
36
|
+
attr.to_s
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MidtransApi
|
4
|
+
module Model
|
5
|
+
module CreditCard
|
6
|
+
class Charge < MidtransApi::Model::Base
|
7
|
+
resource_attributes :status_code,
|
8
|
+
:approval_code,
|
9
|
+
:transaction_id,
|
10
|
+
:order_id,
|
11
|
+
:status_message,
|
12
|
+
:payment_type,
|
13
|
+
:gross_amount,
|
14
|
+
:transaction_status,
|
15
|
+
:transaction_time,
|
16
|
+
:actions,
|
17
|
+
:merchant_id,
|
18
|
+
:currency,
|
19
|
+
:channel_response_code,
|
20
|
+
:channel_response_message,
|
21
|
+
:fraud_status,
|
22
|
+
:bank,
|
23
|
+
:redirect_url,
|
24
|
+
:masked_card,
|
25
|
+
:card_type,
|
26
|
+
:installment_term
|
27
|
+
|
28
|
+
def resolve_params_attr(attr)
|
29
|
+
attr.to_s
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MidtransApi
|
4
|
+
module Model
|
5
|
+
module CreditCard
|
6
|
+
class Token < MidtransApi::Model::Base
|
7
|
+
resource_attributes :status_code,
|
8
|
+
:status_message,
|
9
|
+
:token_id,
|
10
|
+
:hash
|
11
|
+
|
12
|
+
def resolve_params_attr(attr)
|
13
|
+
attr.to_s
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module MidtransApi
|
4
|
+
module Model
|
5
|
+
module Gopay
|
6
|
+
class Charge < MidtransApi::Model::Base
|
7
|
+
resource_attributes :status_code,
|
8
|
+
:transaction_id,
|
9
|
+
:order_id,
|
10
|
+
:status_message,
|
11
|
+
:payment_type,
|
12
|
+
:gross_amount,
|
13
|
+
:transaction_status,
|
14
|
+
:transaction_time,
|
15
|
+
:actions,
|
16
|
+
:merchant_id,
|
17
|
+
:currency,
|
18
|
+
:channel_response_code,
|
19
|
+
:channel_response_message,
|
20
|
+
:fraud_status
|
21
|
+
|
22
|
+
def resolve_params_attr(attr)
|
23
|
+
attr.to_s
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
4
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
+
require 'midtrans_api/version'
|
6
|
+
|
7
|
+
Gem::Specification.new do |spec|
|
8
|
+
spec.name = 'mekari_midtrans_api'
|
9
|
+
spec.version = MidtransApi::Version::VERSION
|
10
|
+
spec.authors = ['Fadli Zul Fahmi']
|
11
|
+
spec.email = ['fadli.fahmi@mekari.com']
|
12
|
+
|
13
|
+
spec.summary = 'Mekari Midtrans API Wrapper'
|
14
|
+
spec.description = 'Ruby Wrapper for Midtrans Payment API.'
|
15
|
+
spec.homepage = 'https://github.com/mekari-engineering/midtrans_api_ruby'
|
16
|
+
spec.license = 'MIT'
|
17
|
+
|
18
|
+
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
19
|
+
spec.bindir = 'bin'
|
20
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
21
|
+
spec.require_paths = ['lib']
|
22
|
+
|
23
|
+
spec.add_dependency 'faraday', '>=0.9'
|
24
|
+
spec.add_dependency 'faraday_middleware', '>=0.9'
|
25
|
+
|
26
|
+
spec.add_development_dependency 'bundler', '~> 1.10'
|
27
|
+
spec.add_development_dependency 'pry'
|
28
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
29
|
+
spec.add_development_dependency 'rspec'
|
30
|
+
spec.add_development_dependency 'webmock'
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,168 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: mekari_midtrans_api
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Fadli Zul Fahmi
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-10-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: faraday
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.9'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.9'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: faraday_middleware
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.9'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.9'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.10'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.10'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: pry
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
description: Ruby Wrapper for Midtrans Payment API.
|
112
|
+
email:
|
113
|
+
- fadli.fahmi@mekari.com
|
114
|
+
executables:
|
115
|
+
- console
|
116
|
+
- setup
|
117
|
+
extensions: []
|
118
|
+
extra_rdoc_files: []
|
119
|
+
files:
|
120
|
+
- ".gitignore"
|
121
|
+
- Gemfile
|
122
|
+
- LICENSE
|
123
|
+
- LICENSE.txt
|
124
|
+
- README.md
|
125
|
+
- Rakefile
|
126
|
+
- bin/console
|
127
|
+
- bin/setup
|
128
|
+
- lib/midtrans_api.rb
|
129
|
+
- lib/midtrans_api/api/base.rb
|
130
|
+
- lib/midtrans_api/api/check/status.rb
|
131
|
+
- lib/midtrans_api/api/credit_card/charge.rb
|
132
|
+
- lib/midtrans_api/api/credit_card/token.rb
|
133
|
+
- lib/midtrans_api/api/gopay/charge.rb
|
134
|
+
- lib/midtrans_api/client.rb
|
135
|
+
- lib/midtrans_api/configure.rb
|
136
|
+
- lib/midtrans_api/errors.rb
|
137
|
+
- lib/midtrans_api/middleware/handle_response_exception.rb
|
138
|
+
- lib/midtrans_api/model/base.rb
|
139
|
+
- lib/midtrans_api/model/check/status.rb
|
140
|
+
- lib/midtrans_api/model/credit_card/charge.rb
|
141
|
+
- lib/midtrans_api/model/credit_card/token.rb
|
142
|
+
- lib/midtrans_api/model/gopay/charge.rb
|
143
|
+
- lib/midtrans_api/version.rb
|
144
|
+
- mekari_midtrans_api.gemspec
|
145
|
+
homepage: https://github.com/mekari-engineering/midtrans_api_ruby
|
146
|
+
licenses:
|
147
|
+
- MIT
|
148
|
+
metadata: {}
|
149
|
+
post_install_message:
|
150
|
+
rdoc_options: []
|
151
|
+
require_paths:
|
152
|
+
- lib
|
153
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
154
|
+
requirements:
|
155
|
+
- - ">="
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
158
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ">="
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
requirements: []
|
164
|
+
rubygems_version: 3.0.3
|
165
|
+
signing_key:
|
166
|
+
specification_version: 4
|
167
|
+
summary: Mekari Midtrans API Wrapper
|
168
|
+
test_files: []
|