veritrans 2.1.3 → 2.2.0

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.
Files changed (240) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +6 -1
  3. data/.travis.yml +3 -5
  4. data/CHANGELOG.md +20 -0
  5. data/Gemfile +1 -1
  6. data/Gemfile.lock +89 -94
  7. data/Procfile +1 -1
  8. data/README.md +62 -13
  9. data/api_reference.md +10 -10
  10. data/example/rails/cable/Gemfile +48 -0
  11. data/example/rails/cable/Gemfile.lock +184 -0
  12. data/example/rails/cable/README.md +29 -0
  13. data/example/rails/cable/Rakefile +6 -0
  14. data/example/rails/cable/app/assets/config/manifest.js +3 -0
  15. data/example/rails/cable/app/assets/images/.keep +0 -0
  16. data/example/rails/cable/app/assets/javascripts/application.js +15 -0
  17. data/example/rails/cable/app/assets/javascripts/cable.js +13 -0
  18. data/example/rails/cable/app/assets/javascripts/channels/.keep +0 -0
  19. data/example/rails/cable/app/assets/javascripts/chats.js +39 -0
  20. data/example/rails/cable/app/assets/javascripts/rooms.js +55 -0
  21. data/example/rails/cable/app/assets/stylesheets/application.css +16 -0
  22. data/example/rails/cable/app/assets/stylesheets/chatbox.scss +31 -0
  23. data/example/rails/cable/app/assets/stylesheets/peoplebox.scss +6 -0
  24. data/example/rails/cable/app/channels/application_cable/channel.rb +4 -0
  25. data/example/rails/cable/app/channels/application_cable/connection.rb +4 -0
  26. data/example/rails/cable/app/channels/rooms_texting_channel.rb +13 -0
  27. data/example/rails/cable/app/controllers/application_controller.rb +3 -0
  28. data/example/rails/cable/app/controllers/chats_controller.rb +18 -0
  29. data/example/rails/cable/app/controllers/concerns/.keep +0 -0
  30. data/example/rails/cable/app/controllers/pays_controller.rb +28 -0
  31. data/example/rails/cable/app/controllers/rooms_controller.rb +4 -0
  32. data/example/rails/cable/app/helpers/application_helper.rb +2 -0
  33. data/example/rails/cable/app/helpers/chats_helper.rb +2 -0
  34. data/example/rails/cable/app/helpers/rooms_helper.rb +5 -0
  35. data/example/rails/cable/app/jobs/application_job.rb +2 -0
  36. data/example/rails/cable/app/jobs/chat_broadcaster_job.rb +15 -0
  37. data/example/rails/cable/app/mailers/application_mailer.rb +4 -0
  38. data/example/rails/cable/app/models/application_record.rb +3 -0
  39. data/example/rails/cable/app/models/chat.rb +41 -0
  40. data/example/rails/cable/app/models/concerns/.keep +0 -0
  41. data/example/rails/cable/app/models/order.rb +2 -0
  42. data/example/rails/cable/app/models/user.rb +2 -0
  43. data/example/rails/cable/app/views/chats/_chat.html.erb +18 -0
  44. data/example/rails/cable/app/views/layouts/application.html.erb +19 -0
  45. data/example/rails/cable/app/views/layouts/mailer.html.erb +13 -0
  46. data/example/rails/cable/app/views/layouts/mailer.text.erb +1 -0
  47. data/example/rails/cable/app/views/rooms/_chatbox.html.erb +13 -0
  48. data/example/rails/cable/app/views/rooms/_online_people.html.erb +53 -0
  49. data/example/rails/cable/app/views/rooms/index.html.erb +9 -0
  50. data/example/rails/cable/bin/bundle +3 -0
  51. data/example/rails/cable/bin/rails +9 -0
  52. data/example/rails/cable/bin/rake +9 -0
  53. data/example/rails/cable/bin/setup +34 -0
  54. data/example/rails/cable/bin/spring +16 -0
  55. data/example/rails/cable/bin/update +29 -0
  56. data/example/rails/cable/config.ru +5 -0
  57. data/example/rails/cable/config/application.rb +16 -0
  58. data/example/rails/cable/config/boot.rb +3 -0
  59. data/example/rails/cable/config/cable.yml +9 -0
  60. data/example/rails/cable/config/database.yml +20 -0
  61. data/example/rails/cable/config/environment.rb +5 -0
  62. data/example/rails/cable/config/environments/development.rb +57 -0
  63. data/example/rails/cable/config/environments/production.rb +86 -0
  64. data/example/rails/cable/config/environments/test.rb +42 -0
  65. data/example/rails/cable/config/initializers/application_controller_renderer.rb +6 -0
  66. data/example/rails/cable/config/initializers/assets.rb +11 -0
  67. data/example/rails/cable/config/initializers/backtrace_silencers.rb +7 -0
  68. data/example/rails/cable/config/initializers/cookies_serializer.rb +5 -0
  69. data/example/rails/cable/config/initializers/filter_parameter_logging.rb +4 -0
  70. data/example/rails/cable/config/initializers/inflections.rb +16 -0
  71. data/example/rails/cable/config/initializers/mime_types.rb +4 -0
  72. data/example/rails/cable/config/initializers/new_framework_defaults.rb +24 -0
  73. data/example/rails/cable/config/initializers/session_store.rb +3 -0
  74. data/example/rails/cable/config/initializers/sidekiq.rb +2 -0
  75. data/example/rails/cable/config/initializers/veritrans.rb +46 -0
  76. data/example/rails/cable/config/initializers/wrap_parameters.rb +14 -0
  77. data/example/rails/cable/config/locales/en.yml +23 -0
  78. data/example/rails/cable/config/puma.rb +47 -0
  79. data/example/rails/cable/config/routes.rb +18 -0
  80. data/example/rails/cable/config/secrets.yml +22 -0
  81. data/example/rails/cable/config/spring.rb +6 -0
  82. data/example/rails/cable/config/veritrans.yml +13 -0
  83. data/example/rails/cable/db/development.sqlite3 +0 -0
  84. data/example/rails/cable/db/migrate/20161215070044_create_chats.rb +10 -0
  85. data/example/rails/cable/db/migrate/20161215072021_create_users.rb +10 -0
  86. data/example/rails/cable/db/migrate/20161219110219_create_orders.rb +11 -0
  87. data/example/rails/cable/db/schema.rb +37 -0
  88. data/example/rails/cable/db/seeds.rb +41 -0
  89. data/example/rails/cable/db/test.sqlite3 +0 -0
  90. data/example/rails/cable/lib/assets/.keep +0 -0
  91. data/example/rails/cable/lib/tasks/.keep +0 -0
  92. data/example/rails/cable/public/404.html +67 -0
  93. data/example/rails/cable/public/422.html +67 -0
  94. data/example/rails/cable/public/500.html +66 -0
  95. data/example/rails/cable/public/apple-touch-icon-precomposed.png +0 -0
  96. data/example/rails/cable/public/apple-touch-icon.png +0 -0
  97. data/example/rails/cable/public/favicon.ico +0 -0
  98. data/example/rails/cable/public/images/avatar1.jpg +0 -0
  99. data/example/rails/cable/public/images/avatar2.jpg +0 -0
  100. data/example/rails/cable/public/images/avatar3.jpg +0 -0
  101. data/example/rails/cable/public/images/avatar4.jpg +0 -0
  102. data/example/rails/cable/public/images/avatar5.jpg +0 -0
  103. data/example/rails/cable/public/images/avatar6.jpg +0 -0
  104. data/example/rails/cable/public/robots.txt +5 -0
  105. data/example/rails/cable/vendor/assets/javascripts/.keep +0 -0
  106. data/example/rails/cable/vendor/assets/stylesheets/.keep +0 -0
  107. data/example/rails/cable/vendor/assets/stylesheets/photon.css +2333 -0
  108. data/example/rails/simplepay/Gemfile +54 -0
  109. data/example/rails/simplepay/Gemfile.lock +178 -0
  110. data/example/rails/simplepay/README.md +30 -0
  111. data/example/rails/simplepay/Rakefile +6 -0
  112. data/example/rails/simplepay/app/assets/config/manifest.js +3 -0
  113. data/example/rails/simplepay/app/assets/images/.keep +0 -0
  114. data/example/rails/simplepay/app/assets/javascripts/application.js +16 -0
  115. data/example/rails/simplepay/app/assets/javascripts/cable.js +13 -0
  116. data/example/rails/simplepay/app/assets/javascripts/channels/.keep +0 -0
  117. data/example/rails/simplepay/app/assets/javascripts/pay.js +18 -0
  118. data/example/rails/simplepay/app/assets/stylesheets/application.css +15 -0
  119. data/example/rails/simplepay/app/assets/stylesheets/style.css +254 -0
  120. data/example/rails/simplepay/app/channels/application_cable/channel.rb +4 -0
  121. data/example/rails/simplepay/app/channels/application_cable/connection.rb +4 -0
  122. data/example/rails/simplepay/app/controllers/application_controller.rb +3 -0
  123. data/example/rails/simplepay/app/controllers/concerns/.keep +0 -0
  124. data/example/rails/simplepay/app/controllers/home_controller.rb +16 -0
  125. data/example/rails/simplepay/app/controllers/pay_controller.rb +10 -0
  126. data/example/rails/simplepay/app/helpers/application_helper.rb +2 -0
  127. data/example/rails/simplepay/app/helpers/pay_helper.rb +2 -0
  128. data/example/rails/simplepay/app/jobs/application_job.rb +2 -0
  129. data/example/rails/simplepay/app/mailers/application_mailer.rb +4 -0
  130. data/example/rails/simplepay/app/models/application_record.rb +3 -0
  131. data/example/rails/simplepay/app/models/concerns/.keep +0 -0
  132. data/example/rails/simplepay/app/models/order.rb +2 -0
  133. data/example/rails/simplepay/app/views/home/index.html.erb +19 -0
  134. data/example/rails/simplepay/app/views/layouts/application.html.erb +15 -0
  135. data/example/rails/simplepay/app/views/layouts/mailer.html.erb +13 -0
  136. data/example/rails/simplepay/app/views/layouts/mailer.text.erb +1 -0
  137. data/example/rails/simplepay/app/views/pay/notify.html.erb +2 -0
  138. data/example/rails/simplepay/bin/bundle +3 -0
  139. data/example/rails/simplepay/bin/rails +9 -0
  140. data/example/rails/simplepay/bin/rake +9 -0
  141. data/example/rails/simplepay/bin/setup +34 -0
  142. data/example/rails/simplepay/bin/spring +16 -0
  143. data/example/rails/simplepay/bin/update +29 -0
  144. data/example/rails/simplepay/config.ru +5 -0
  145. data/example/rails/simplepay/config/application.rb +15 -0
  146. data/example/rails/simplepay/config/boot.rb +3 -0
  147. data/example/rails/simplepay/config/cable.yml +9 -0
  148. data/example/rails/simplepay/config/database.yml +25 -0
  149. data/example/rails/simplepay/config/environment.rb +5 -0
  150. data/example/rails/simplepay/config/environments/development.rb +57 -0
  151. data/example/rails/simplepay/config/environments/production.rb +86 -0
  152. data/example/rails/simplepay/config/environments/test.rb +42 -0
  153. data/example/rails/simplepay/config/initializers/application_controller_renderer.rb +6 -0
  154. data/example/rails/simplepay/config/initializers/assets.rb +11 -0
  155. data/example/rails/simplepay/config/initializers/backtrace_silencers.rb +7 -0
  156. data/example/rails/simplepay/config/initializers/cookies_serializer.rb +5 -0
  157. data/example/rails/simplepay/config/initializers/filter_parameter_logging.rb +4 -0
  158. data/example/rails/simplepay/config/initializers/inflections.rb +16 -0
  159. data/example/rails/simplepay/config/initializers/mime_types.rb +4 -0
  160. data/example/rails/simplepay/config/initializers/new_framework_defaults.rb +24 -0
  161. data/example/rails/simplepay/config/initializers/session_store.rb +3 -0
  162. data/example/rails/simplepay/config/initializers/veritrans.rb +46 -0
  163. data/example/rails/simplepay/config/initializers/wrap_parameters.rb +14 -0
  164. data/example/rails/simplepay/config/locales/en.yml +23 -0
  165. data/example/rails/simplepay/config/puma.rb +47 -0
  166. data/example/rails/simplepay/config/routes.rb +5 -0
  167. data/example/rails/simplepay/config/secrets.yml +22 -0
  168. data/example/rails/simplepay/config/spring.rb +6 -0
  169. data/example/rails/simplepay/config/veritrans.yml +18 -0
  170. data/example/rails/simplepay/db/development.sqlite3 +0 -0
  171. data/example/rails/simplepay/db/migrate/20161221090855_create_orders.rb +10 -0
  172. data/example/rails/simplepay/db/schema.rb +22 -0
  173. data/example/rails/simplepay/db/seeds.rb +7 -0
  174. data/example/rails/simplepay/db/test.sqlite3 +0 -0
  175. data/example/rails/simplepay/lib/assets/.keep +0 -0
  176. data/example/rails/simplepay/lib/tasks/.keep +0 -0
  177. data/example/rails/simplepay/public/404.html +67 -0
  178. data/example/rails/simplepay/public/422.html +67 -0
  179. data/example/rails/simplepay/public/500.html +66 -0
  180. data/example/rails/simplepay/public/apple-touch-icon-precomposed.png +0 -0
  181. data/example/rails/simplepay/public/apple-touch-icon.png +0 -0
  182. data/example/rails/simplepay/public/favicon.ico +0 -0
  183. data/example/rails/simplepay/public/robots.txt +5 -0
  184. data/example/rails/simplepay/vendor/assets/javascripts/.keep +0 -0
  185. data/example/rails/simplepay/vendor/assets/stylesheets/.keep +0 -0
  186. data/example/{README.md → sinatra/README.md} +0 -0
  187. data/example/{config.ru → sinatra/config.ru} +3 -0
  188. data/example/{index.erb → sinatra/index.erb} +7 -6
  189. data/example/{localization.erb → sinatra/localization.erb} +6 -5
  190. data/example/{points.erb → sinatra/points.erb} +6 -5
  191. data/example/{recurring.erb → sinatra/recurring.erb} +6 -6
  192. data/example/{response.erb → sinatra/response.erb} +4 -1
  193. data/example/{sinatra.rb → sinatra/sinatra.rb} +9 -3
  194. data/example/{style.css → sinatra/style.css} +11 -0
  195. data/example/{veritrans.yml → sinatra/veritrans.yml} +2 -2
  196. data/example/{widget.erb → sinatra/widget.erb} +18 -6
  197. data/lib/generators/templates/assets/credit_card_form.js +6 -0
  198. data/lib/generators/templates/payments_controller.rb +4 -4
  199. data/lib/generators/templates/veritrans.yml +5 -5
  200. data/lib/generators/templates/views/_credit_card_form.erb +2 -2
  201. data/lib/generators/templates/views/_veritrans_include.erb +1 -1
  202. data/lib/generators/veritrans/install_generator.rb +1 -1
  203. data/lib/generators/veritrans/payment_form_generator.rb +1 -1
  204. data/lib/veritrans.rb +106 -5
  205. data/lib/veritrans/api.rb +7 -7
  206. data/lib/veritrans/cli.rb +11 -5
  207. data/lib/veritrans/client.rb +7 -4
  208. data/lib/veritrans/config.rb +5 -3
  209. data/lib/veritrans/events.rb +46 -35
  210. data/lib/veritrans/result.rb +58 -2
  211. data/lib/veritrans/testing.rb +156 -0
  212. data/lib/veritrans/version.rb +1 -1
  213. data/spec/cli_spec.rb +2 -2
  214. data/spec/fixtures/approve_failed.yml +1 -1
  215. data/spec/fixtures/cancel_failed.yml +1 -1
  216. data/spec/fixtures/cancel_success.yml +2 -2
  217. data/spec/fixtures/capture_failed.yml +1 -1
  218. data/spec/fixtures/charge.yml +2 -2
  219. data/spec/fixtures/charge_direct.yml +1 -1
  220. data/spec/fixtures/charge_vtweb.yml +2 -2
  221. data/spec/fixtures/cli_test_1111-not-exists.yml +1 -1
  222. data/spec/fixtures/cli_test_not_exists.yml +1 -1
  223. data/spec/fixtures/cli_test_real_txn.yml +1 -1
  224. data/spec/fixtures/cli_test_unauthorized.yml +1 -1
  225. data/spec/fixtures/events_test_real_txn.yml +1 -1
  226. data/spec/fixtures/expire_failed.yml +1 -1
  227. data/spec/fixtures/expire_success.yml +1 -1
  228. data/spec/fixtures/midtrans_status.yml +2 -2
  229. data/spec/fixtures/status_fail.yml +1 -1
  230. data/spec/fixtures/status_success.yml +2 -2
  231. data/spec/rails_plugin_spec.rb +37 -20
  232. data/spec/spec_helper.rb +0 -1
  233. data/spec/veritrans_client_spec.rb +1 -1
  234. data/spec/veritrans_config_spec.rb +1 -1
  235. data/spec/veritrans_events_spec.rb +6 -6
  236. data/spec/veritrans_testing_spec.rb +184 -0
  237. data/testing_webhooks.md +2 -2
  238. data/veritrans.gemspec +1 -1
  239. metadata +195 -16
  240. data/lib/veritrans/core_extensions.rb +0 -32
@@ -1,10 +1,46 @@
1
1
  class Veritrans
2
+ # Midtrans response object, a wrapper for raw response object plus helper methods
3
+ #
4
+ # Usual response body for Midtrans.charge or Midtrans.status will look like this:
5
+ #
6
+ # {
7
+ # "status_code": "200",
8
+ # "status_message": "Success, Mandiri Clickpay transaction is successful",
9
+ # "transaction_id": "d788e503-3fab-4296-9c10-83b107324cb9",
10
+ # "order_id": "2016-11-14 11:54:03 +0800",
11
+ # "gross_amount": "10000.00",
12
+ # "payment_type": "mandiri_clickpay",
13
+ # "transaction_time": "2016-11-14 10:54:02",
14
+ # "transaction_status": "settlement",
15
+ # "fraud_status": "accept",
16
+ # "approval_code": "1479095646260",
17
+ # "masked_card": "411111-1111"
18
+ # }
19
+ #
20
+ # Result object can be used like this:
21
+ #
22
+ # result.success? # => true
23
+ # result.status_code # => 200
24
+ # result.transaction_status # => "settlement"
25
+ # result.fraud_status # => "accept"
26
+ # result.approval_code # => "1479095646260"
27
+ # result.masked_card # => "411111-1111"
28
+ #
29
+ # result.data # => {:status_code => "200", :status_message => "Success, Mandiri ..."} # add data as hash
30
+ # result.time # => 1.3501
31
+ #
2
32
  class Result
33
+ # Response body parsed as hash
3
34
  attr_reader :data
35
+ # HTTP status code, should always be 200
4
36
  attr_reader :status
37
+ # Excon::Response object
5
38
  attr_reader :response
39
+ # Request options, a hash with :path, :method, :headers, :body
6
40
  attr_reader :request_options
41
+ # HTTP request time, a Float
7
42
  attr_reader :time
43
+ # Request full URL, e.g. "https://api.sandbox.midtrans.com/v2/charge"
8
44
  attr_reader :url
9
45
 
10
46
  def initialize(response, url, request_options, time)
@@ -33,28 +69,33 @@ class Veritrans
33
69
  @request_options = request_options
34
70
  end
35
71
 
72
+ # Return whenever transaction is successful, based on <tt>status_code</tt>
36
73
  def success?
37
74
  @data[:status_code] == '200' || @data[:status_code] == '201' || @data[:status_code] == '407'
38
75
  end
39
76
 
40
- # for VT-Link
77
+ # Return if VT-Link page was created
41
78
  def created?
42
79
  @data[:status_code] == '201'
43
80
  end
44
81
 
45
- # Docs http://docs.veritrans.co.id/en/api/status_code.html
82
+ # Return <tt>"status_code"</tt> field of response
83
+ # Docs https://api-docs.midtrans.com/#status-code
46
84
  def status_code
47
85
  @data[:status_code].to_i
48
86
  end
49
87
 
88
+ # Return <tt>"status_message"</tt> field of response
50
89
  def status_message
51
90
  @data[:status_message]
52
91
  end
53
92
 
93
+ # Return <tt>"redirect_url"</tt> field of response
54
94
  def redirect_url
55
95
  @data[:redirect_url]
56
96
  end
57
97
 
98
+ # Return <tt>"transaction_id"</tt> field of response
58
99
  def transaction_id
59
100
  @data[:transaction_id]
60
101
  end
@@ -67,6 +108,7 @@ class Veritrans
67
108
  end
68
109
  end
69
110
 
111
+ # Raw response body as String
70
112
  def body
71
113
  response.body
72
114
  end
@@ -86,12 +128,26 @@ class Veritrans
86
128
  end
87
129
  end
88
130
 
131
+ # SNAP response object
89
132
  class SnapResult < Result
133
+
134
+ # HTTP response status code
90
135
  def status_code
91
136
  @response.status.to_i
92
137
  end
93
138
 
139
+ # DEPRECATED, please use #token instead
94
140
  def token_id
141
+ if defined?(ActiveSupport::Deprecation)
142
+ ActiveSupport::Deprecation.warn("`token_id` on SnapResult is deprecated. Please use `token` instead.")
143
+ else
144
+ warn "DEPRECATION WARNING: `token_id` on SnapResult is deprecated. Please use `token` instead."
145
+ end
146
+ @data[:token]
147
+ end
148
+
149
+ # Acccessor for <tt>token</tt> value
150
+ def token
95
151
  @data[:token]
96
152
  end
97
153
 
@@ -0,0 +1,156 @@
1
+ require 'excon'
2
+ require 'json'
3
+ require 'uri'
4
+
5
+ # Client for Midtrans Testing API and some helper methods for SNAP API
6
+ #
7
+ # Status: still in development
8
+ #
9
+ class Veritrans::TestingLib
10
+
11
+ def initialize(server_url = "https://api.sandbox.midtrans.com:7676")
12
+ @server_url = server_url
13
+ end
14
+
15
+ def logger
16
+ @logger || Veritrans.logger
17
+ end
18
+
19
+ def logger=(value)
20
+ @logger = value
21
+ end
22
+
23
+ def GET(url, options = {})
24
+ logger.info("Veritrans::Testing GET #{url}")
25
+ result = Excon.get(url)
26
+ logger.info("Veritrans::Testing -> #{result.status}\n#{result.body}")
27
+ options[:return_raw] ? result : result_json(result)
28
+ end
29
+
30
+ def POST(url, options = {})
31
+ logger.info("Veritrans::Testing POST #{url} #{options[:body]}")
32
+ result = Excon.post(url, options)
33
+ logger.info("Veritrans::Testing -> #{result.status}\n#{result.body}")
34
+ options[:return_raw] ? result : result_json(result)
35
+ end
36
+
37
+ def get_permata_va(va_number)
38
+ GET(@server_url + "/api/permata_va/#{va_number}")
39
+ end
40
+
41
+ def pay_permata_va(va_number)
42
+ POST(@server_url + "/api/permata_va/#{va_number}/pay")
43
+ end
44
+
45
+ def get_bca_va(va_number)
46
+ GET(@server_url + "/api/bca_va/#{va_number}")
47
+ end
48
+
49
+ def pay_bca_va(va_number)
50
+ POST(@server_url + "/api/bca_va/#{va_number}/pay")
51
+ end
52
+
53
+ def get_klik_bca(merchant_code, user_id)
54
+ GET(@server_url + "/api/klikbca/#{merchant_code}/#{user_id}")
55
+ end
56
+
57
+ def pay_klik_bca(merchant_code, user_id, order_id = nil)
58
+ POST(@server_url + "/api/klikbca/#{merchant_code}/#{user_id}/pay" + (order_id ? "?order_id=#{order_id}" : ''))
59
+ end
60
+
61
+ def get_mandiri_bill(bill_key)
62
+ GET(@server_url + "/api/mandiri_bill/#{bill_key}")
63
+ end
64
+
65
+ def pay_mandiri_bill(bill_key)
66
+ POST(@server_url + "/api/mandiri_bill/#{bill_key}/pay")
67
+ end
68
+
69
+ def get_indomaret(payment_code)
70
+ GET(@server_url + "/api/indomaret/#{payment_code}")
71
+ end
72
+
73
+ def pay_indomaret(payment_code)
74
+ POST(@server_url + "/api/indomaret/#{payment_code}/pay")
75
+ end
76
+
77
+ def get_cimb_clicks(redirect_url)
78
+ gateway_result = GET(redirect_url, return_raw: true)
79
+
80
+ form_result = extract_form(gateway_result.body)
81
+
82
+ POST(form_result[:url].sub("cimb/clicks/index", "api/cimb/inquiry"),
83
+ body: URI.encode_www_form(form_result[:fields].to_a),
84
+ headers: {'Content-Type' => 'application/x-www-form-urlencoded'}
85
+ )
86
+ end
87
+
88
+ def pay_cimb_clicks(redirect_url, user_id = "testuser00")
89
+ gateway_result = GET(redirect_url, return_raw: true)
90
+
91
+ form_result = extract_form(gateway_result.body)
92
+
93
+ form_result[:fields]["AccountId"] = user_id
94
+
95
+ result = POST(form_result[:url].sub("cimb/clicks/index", "api/cimb/pay"),
96
+ body: URI.encode_www_form(form_result[:fields].to_a),
97
+ headers: {'Content-Type' => 'application/x-www-form-urlencoded'}
98
+ )
99
+
100
+ result2 = POST(result['redirect_url'],
101
+ body: URI.encode_www_form(result['redirect_params'].to_a),
102
+ headers: {'Content-Type' => 'application/x-www-form-urlencoded'},
103
+ return_raw: true
104
+ )
105
+
106
+ result
107
+ end
108
+
109
+ # experimental
110
+ def pay_snap(snap_token, payment_type, transaction_params = {})
111
+ #snap_data = GET("https://app.sandbox.veritrans.co.id/snap/v1/payment_pages/#{snap_token}")
112
+ #snap_data = GET("https://app.sandbox.midtrans.com/snap/v1/transactions/#{snap_token}")
113
+
114
+ result = POST("https://app.sandbox.midtrans.com/snap/v1/transactions/#{snap_token}/pay",
115
+ body: JSON.pretty_generate({
116
+ payment_type: payment_type
117
+ }.merge(transaction_params)),
118
+ headers: json_headers
119
+ )
120
+
121
+ result
122
+ end
123
+
124
+ def extract_form(html)
125
+ form_html = html.match(/(<form.+<\/form>)/m)[1]
126
+ form_url = form_html.match(/action="(.+?)"/)[1]
127
+ form_method = form_html.match(/method="(.+?)"/)[1]
128
+ fields = {}
129
+ form_html.gsub(/<input(.+?)>/) do |token|
130
+ key = (token.match(/name="(.+?)"/) || [])[1]
131
+ value = (token.match(/value="(.+?)"/) || [])[1]
132
+ fields[key] = value
133
+ end
134
+
135
+ return {
136
+ method: form_method,
137
+ url: form_url,
138
+ fields: fields
139
+ }
140
+ end
141
+
142
+ def result_json(result) # :nodoc:
143
+ JSON.parse(result.body)
144
+ end
145
+
146
+ def json_headers # :nodoc:
147
+ {
148
+ 'Content-Type' => 'application/json;charset=UTF-8',
149
+ 'Accept' => 'application/json, text/plain, */*'
150
+ }
151
+ end
152
+ end
153
+
154
+ class Veritrans
155
+ Testing = Veritrans::TestingLib.new
156
+ end
@@ -1,3 +1,3 @@
1
1
  class Veritrans
2
- VERSION = "2.1.3"
2
+ VERSION = "2.2.0"
3
3
  end
@@ -27,7 +27,7 @@ describe Veritrans do
27
27
 
28
28
  it "should raise error if payment not found" do
29
29
  CONFIG[:order] = "1111-not-exists"
30
- CONFIG[:config_path] = "./example/veritrans.yml"
30
+ CONFIG[:config_path] = "./example/sinatra/veritrans.yml"
31
31
 
32
32
  VCR.use_cassette("cli_test_not_exists") do
33
33
  silence_stream(STDOUT) do
@@ -64,7 +64,7 @@ describe Veritrans do
64
64
 
65
65
  it "should send real data as json" do
66
66
  CONFIG[:order] = "testing-0.2703-1415600236"
67
- CONFIG[:config_path] = "./example/veritrans.yml"
67
+ CONFIG[:config_path] = "./example/sinatra/veritrans.yml"
68
68
 
69
69
  VCR.use_cassette("cli_test_real_txn") do
70
70
  silence_stream(STDOUT) do
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.sandbox.veritrans.co.id/v2/not-exists/cancel
5
+ uri: https://api.sandbox.midtrans.com/v2/not-exists/cancel
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: "{}"
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.sandbox.veritrans.co.id/v2/not-exists/cancel
5
+ uri: https://api.sandbox.midtrans.com/v2/not-exists/cancel
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: "{}"
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.sandbox.veritrans.co.id/v2/charge
5
+ uri: https://api.sandbox.midtrans.com/v2/charge
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: '{"payment_type":"permata","transaction_details":{"order_id":1415110696,"gross_amount":100000}}'
@@ -54,7 +54,7 @@ http_interactions:
54
54
  recorded_at: Tue, 04 Nov 2014 14:18:17 GMT
55
55
  - request:
56
56
  method: post
57
- uri: https://api.sandbox.veritrans.co.id/v2/1415110696/cancel
57
+ uri: https://api.sandbox.midtrans.com/v2/1415110696/cancel
58
58
  body:
59
59
  encoding: UTF-8
60
60
  string: "{}"
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.sandbox.veritrans.co.id/v2/capture
5
+ uri: https://api.sandbox.midtrans.com/v2/capture
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: '{"transaction_id":"not-exists","gross_amount":1000}'
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.sandbox.veritrans.co.id/v2/charge
5
+ uri: https://api.sandbox.midtrans.com/v2/charge
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: '{"payment_type":"VTWEB","transaction_details":{"order_id":"2014-11-04
@@ -43,7 +43,7 @@ http_interactions:
43
43
  {
44
44
  "status_code" : "201",
45
45
  "status_message" : "OK, success do VTWeb transaction, please go to redirect_url",
46
- "redirect_url" : "https://vtweb.sandbox.veritrans.co.id/v2/vtweb/f523ecff-34e7-4791-a558-3f579f731b75"
46
+ "redirect_url" : "https://vtweb.sandbox.midtrans.com/v2/vtweb/f523ecff-34e7-4791-a558-3f579f731b75"
47
47
  }
48
48
  http_version:
49
49
  recorded_at: Tue, 04 Nov 2014 13:58:15 GMT
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.sandbox.veritrans.co.id/v2/charge
5
+ uri: https://api.sandbox.midtrans.com/v2/charge
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: '{"payment_type":"permata","transaction_details":{"order_id":"2014-11-04
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.sandbox.veritrans.co.id/v2/charge
5
+ uri: https://api.sandbox.midtrans.com/v2/charge
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: '{"payment_type":"vtweb","transaction_details":{"order_id":"2014-11-04
@@ -43,7 +43,7 @@ http_interactions:
43
43
  {
44
44
  "status_code" : "201",
45
45
  "status_message" : "OK, success do VTWeb transaction, please go to redirect_url",
46
- "redirect_url" : "https://vtweb.sandbox.veritrans.co.id/v2/vtweb/aff32361-ad6b-4e3f-9173-95b057e68157"
46
+ "redirect_url" : "https://vtweb.sandbox.midtrans.com/v2/vtweb/aff32361-ad6b-4e3f-9173-95b057e68157"
47
47
  }
48
48
  http_version:
49
49
  recorded_at: Tue, 04 Nov 2014 14:10:15 GMT
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://api.sandbox.veritrans.co.id/v2/1111-not-exists/status
5
+ uri: https://api.sandbox.midtrans.com/v2/1111-not-exists/status
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://api.sandbox.veritrans.co.id/v2/1111-not-exists/status
5
+ uri: https://api.sandbox.midtrans.com/v2/1111-not-exists/status
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://api.sandbox.veritrans.co.id/v2/testing-0.2703-1415600236/status
5
+ uri: https://api.sandbox.midtrans.com/v2/testing-0.2703-1415600236/status
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://api.sandbox.veritrans.co.id/v2/1111-not-exists/status
5
+ uri: https://api.sandbox.midtrans.com/v2/1111-not-exists/status
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: get
5
- uri: https://api.sandbox.veritrans.co.id/v2/testing-0.2703-1415600236/status
5
+ uri: https://api.sandbox.midtrans.com/v2/testing-0.2703-1415600236/status
6
6
  body:
7
7
  encoding: US-ASCII
8
8
  string: ''
@@ -2,7 +2,7 @@
2
2
  http_interactions:
3
3
  - request:
4
4
  method: post
5
- uri: https://api.sandbox.veritrans.co.id/v2/not-exists/expire
5
+ uri: https://api.sandbox.midtrans.com/v2/not-exists/expire
6
6
  body:
7
7
  encoding: UTF-8
8
8
  string: "{}"