oschadbank 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 01a6506ac422e77a6cea1bec1e156a07c92fd9fa
4
- data.tar.gz: 1436be25b9fc901bd35323b27a8eec77959cba4a
3
+ metadata.gz: d28a742d941bc588bf8fef5df6e3f332d9676ef5
4
+ data.tar.gz: 7499b5cade156829a2bafb722c7ba2d62d69b45f
5
5
  SHA512:
6
- metadata.gz: 4bad2aa3e5e8caf2739df173f8cd5f7f5368f5e56e4487fd9d445f492827093d95aae3c72a6d209e6eaeb274b93c85c5c4bb4de705ec8c47c23dac34cbe28d6f
7
- data.tar.gz: cb57aef79c767c0c2cdc7e8f91240376a2cf22e4297e50c2fb38cf515158db56a2d5f6c7d639563d79422ce3a3e756ce74f9864f21b597e06ea62cb6e31ac473
6
+ metadata.gz: 36734ff6da0eff6797761fc07537ead77838b979a5505e257d3a5a16eaf3f8b4826e3a7849bd938fbb1816c165cc6c377bc1434ea4de2ff37ba00358d73d1ba8
7
+ data.tar.gz: db8ecbb14570856b1c44b8186eeb0876d992163961dc63e27ec1d4d69fdc5f8bbd3ae8e30dcc1d2ebc618d4431bc30a36929d3c71cbfdcd7014fa6fbf5561d6e
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # Oschadbank
2
2
 
3
+ [![Gem Version](https://badge.fury.io/rb/oschadbank.svg)](https://badge.fury.io/rb/oschadbank)
4
+ [![Build Status](https://travis-ci.org/busfor/oschadbank.svg?branch=master)](https://travis-ci.org/busfor/oschadbank)
5
+
3
6
  Ruby wrapper for Oschadbank.ua API
4
7
 
5
8
  ## Installation
@@ -48,22 +51,22 @@ params = client.pre_auth_params(
48
51
  description: 'Payment description',
49
52
  back_url: 'http://www.my-shop.com/back/url',
50
53
  )
51
- # => {:TRTYPE=>"0",
52
- # :TERMINAL=>"123",
53
- # :MERCHANT=>"456",
54
- # :MERCH_NAME=>"Shop name",
55
- # :MERCH_URL=>"www.my-shop.com",
56
- # :MERCH_GMT=>"+3",
57
- # :COUNTRY=>"UA",
58
- # :EMAIL=>"example@my-shop.com",
59
- # :TIMESTAMP=>"20160718093533",
60
- # :NONCE=>"c82f595aef2ead17103c806b701e994c",
61
- # :ORDER=>"123456",
62
- # :CURRENCY=>"UAH",
63
- # :AMOUNT=>"100.5",
64
- # :DESC=>"Payment description",
65
- # :BACKREF=>"http://www.my-shop.com/back/link",
66
- # :P_SIGN=>"040a2920ec647e901756349491bb0167fa184747"}
54
+ # => {"TRTYPE"=>"0",
55
+ # "TERMINAL"=>"123",
56
+ # "MERCHANT"=>"456",
57
+ # "MERCH_NAME"=>"Shop name",
58
+ # "MERCH_URL"=>"www.my-shop.com",
59
+ # "MERCH_GMT"=>"+3",
60
+ # "COUNTRY"=>"UA",
61
+ # "EMAIL"=>"example@my-shop.com",
62
+ # "TIMESTAMP"=>"20160718093533",
63
+ # "NONCE"=>"c82f595aef2ead17103c806b701e994c",
64
+ # "ORDER"=>"123456",
65
+ # "CURRENCY"=>"UAH",
66
+ # "AMOUNT"=>"100.5",
67
+ # "DESC"=>"Payment description",
68
+ # "BACKREF"=>"http://www.my-shop.com/back/link",
69
+ # "P_SIGN"=>"040a2920ec647e901756349491bb0167fa184747"}
67
70
 
68
71
  params = client.auth_params(
69
72
  order_id: 123456,
@@ -72,22 +75,22 @@ params = client.auth_params(
72
75
  description: 'Payment description',
73
76
  back_url: 'http://www.my-shop.com/back/url',
74
77
  )
75
- # => {:TRTYPE=>"1",
76
- # :TERMINAL=>"123",
77
- # :MERCHANT=>"456",
78
- # :MERCH_NAME=>"Shop name",
79
- # :MERCH_URL=>"www.my-shop.com",
80
- # :MERCH_GMT=>"+3",
81
- # :COUNTRY=>"UA",
82
- # :EMAIL=>"example@my-shop.com",
83
- # :TIMESTAMP=>"20160718093707",
84
- # :NONCE=>"4a6de0a53f759469042ce3fb08accb13",
85
- # :ORDER=>"123456",
86
- # :CURRENCY=>"UAH",
87
- # :AMOUNT=>"100.5",
88
- # :DESC=>"Payment description",
89
- # :BACKREF=>"http://www.my-shop.com/back/link",
90
- # :P_SIGN=>"73e7a49bf4b729f5c66c160117e05d6b1f3a1f3e"}
78
+ # => {"TRTYPE"=>"1",
79
+ # "TERMINAL"=>"123",
80
+ # "MERCHANT"=>"456",
81
+ # "MERCH_NAME"=>"Shop name",
82
+ # "MERCH_URL"=>"www.my-shop.com",
83
+ # "MERCH_GMT"=>"+3",
84
+ # "COUNTRY"=>"UA",
85
+ # "EMAIL"=>"example@my-shop.com",
86
+ # "TIMESTAMP"=>"20160718093707",
87
+ # "NONCE"=>"4a6de0a53f759469042ce3fb08accb13",
88
+ # "ORDER"=>"123456",
89
+ # "CURRENCY"=>"UAH",
90
+ # "AMOUNT"=>"100.5",
91
+ # "DESC"=>"Payment description",
92
+ # "BACKREF"=>"http://www.my-shop.com/back/link",
93
+ # "P_SIGN"=>"73e7a49bf4b729f5c66c160117e05d6b1f3a1f3e"}
91
94
  ```
92
95
 
93
96
  To complete payment after pre-authorization request:
@@ -33,7 +33,7 @@ module Oschadbank
33
33
  end
34
34
 
35
35
  def response(params)
36
- Response.new(params)
36
+ Response.new(self, params)
37
37
  end
38
38
  end
39
39
  end
@@ -11,47 +11,61 @@ module Oschadbank
11
11
 
12
12
  MAC_PARAMS_ORDER = {
13
13
  auth: [
14
- :AMOUNT,
15
- :CURRENCY,
16
- :ORDER,
17
- :DESC,
18
- :MERCH_NAME,
19
- :MERCH_URL,
20
- :MERCHANT,
21
- :TERMINAL,
22
- :EMAIL,
23
- :TRTYPE,
24
- :COUNTRY,
25
- :MERCH_GMT,
26
- :TIMESTAMP,
27
- :NONCE,
28
- :BACKREF,
14
+ 'AMOUNT',
15
+ 'CURRENCY',
16
+ 'ORDER',
17
+ 'DESC',
18
+ 'MERCH_NAME',
19
+ 'MERCH_URL',
20
+ 'MERCHANT',
21
+ 'TERMINAL',
22
+ 'EMAIL',
23
+ 'TRTYPE',
24
+ 'COUNTRY',
25
+ 'MERCH_GMT',
26
+ 'TIMESTAMP',
27
+ 'NONCE',
28
+ 'BACKREF',
29
29
  ].freeze,
30
30
  charge: [
31
- :ORDER,
32
- :AMOUNT,
33
- :CURRENCY,
34
- :RRN,
35
- :INT_REF,
36
- :TRTYPE,
37
- :TERMINAL,
38
- :BACKREF,
39
- :TIMESTAMP,
40
- :NONCE,
31
+ 'ORDER',
32
+ 'AMOUNT',
33
+ 'CURRENCY',
34
+ 'RRN',
35
+ 'INT_REF',
36
+ 'TRTYPE',
37
+ 'TERMINAL',
38
+ 'BACKREF',
39
+ 'TIMESTAMP',
40
+ 'NONCE',
41
41
  ].freeze,
42
42
  refund: [
43
- :ORDER,
44
- :ORG_AMOUNT,
45
- :AMOUNT,
46
- :CURRENCY,
47
- :RRN,
48
- :INT_REF,
49
- :TRTYPE,
50
- :TERMINAL,
51
- :BACKREF,
52
- :TIMESTAMP,
53
- :NONCE,
43
+ 'ORDER',
44
+ 'ORG_AMOUNT',
45
+ 'AMOUNT',
46
+ 'CURRENCY',
47
+ 'RRN',
48
+ 'INT_REF',
49
+ 'TRTYPE',
50
+ 'TERMINAL',
51
+ 'BACKREF',
52
+ 'TIMESTAMP',
53
+ 'NONCE',
54
54
  ].freeze,
55
+ response: [
56
+ 'TERMINAL',
57
+ 'TRTYPE',
58
+ 'ORDER',
59
+ 'AMOUNT',
60
+ 'CURRENCY',
61
+ 'Result',
62
+ 'RC',
63
+ 'AuthCode',
64
+ 'RRN',
65
+ 'IntRef',
66
+ 'TIMESTAMP',
67
+ 'NONCE',
68
+ ].freeze
55
69
  }.freeze
56
70
 
57
71
  RESULT_MESSAGES = {
@@ -16,4 +16,10 @@ module Oschadbank
16
16
  super("Param #{param} required")
17
17
  end
18
18
  end
19
+
20
+ class InvalidSignature < Error
21
+ def initialize
22
+ super("Invalid signature param")
23
+ end
24
+ end
19
25
  end
@@ -3,14 +3,14 @@ module Oschadbank
3
3
  include Constants
4
4
 
5
5
  REQUEST_PARAMS = {
6
- amount: :AMOUNT,
7
- org_amount: :ORG_AMOUNT,
8
- currency: :CURRENCY,
9
- order_id: :ORDER,
10
- description: :DESC,
11
- rrn: :RRN,
12
- int_ref: :INT_REF,
13
- back_url: :BACKREF,
6
+ amount: 'AMOUNT',
7
+ org_amount: 'ORG_AMOUNT',
8
+ currency: 'CURRENCY',
9
+ order_id: 'ORDER',
10
+ description: 'DESC',
11
+ rrn: 'RRN',
12
+ int_ref: 'INT_REF',
13
+ back_url: 'BACKREF',
14
14
  }.freeze
15
15
 
16
16
  def initialize(client, request_type, params)
@@ -21,28 +21,28 @@ module Oschadbank
21
21
 
22
22
  def build
23
23
  result = {
24
- TRTYPE: tr_type,
25
- TERMINAL: @client.terminal_id.to_s,
26
- MERCHANT: @client.merchant_id.to_s,
27
- MERCH_NAME: @client.merchant_name.to_s,
28
- MERCH_URL: @client.merchant_url.to_s,
29
- MERCH_GMT: @client.merchant_gmt.to_s,
30
- COUNTRY: @client.country_code.to_s,
31
- EMAIL: @client.email.to_s,
32
- TIMESTAMP: timestamp,
33
- NONCE: nonce,
24
+ 'TRTYPE' => tr_type,
25
+ 'TERMINAL' => @client.terminal_id.to_s,
26
+ 'MERCHANT' => @client.merchant_id.to_s,
27
+ 'MERCH_NAME' => @client.merchant_name.to_s,
28
+ 'MERCH_URL' => @client.merchant_url.to_s,
29
+ 'MERCH_GMT' => @client.merchant_gmt.to_s,
30
+ 'COUNTRY' => @client.country_code.to_s,
31
+ 'EMAIL' => @client.email.to_s,
32
+ 'TIMESTAMP' => timestamp,
33
+ 'NONCE' => nonce,
34
34
  }
35
35
 
36
36
  @params.each do |key, value|
37
37
  key = REQUEST_PARAMS[key] || key
38
38
  value = value.to_s
39
- value = value.encode('CP1251', 'UTF-8') if key == :DESC
39
+ value = value.encode('CP1251', 'UTF-8') if key == 'DESC'
40
40
  result[key] = value
41
41
  end
42
42
 
43
43
  result.delete_if { |_k, v| v.empty? }
44
44
 
45
- result[:P_SIGN] = mac_signature(result)
45
+ result['P_SIGN'] = mac_signature(result)
46
46
 
47
47
  result
48
48
  end
@@ -2,10 +2,12 @@ module Oschadbank
2
2
  class Response
3
3
  include Constants
4
4
 
5
- def initialize(params)
5
+ def initialize(client, params)
6
+ @client = client
6
7
  @params = params
7
8
 
8
9
  check_required!
10
+ check_signature!
9
11
  end
10
12
 
11
13
  def request_type
@@ -67,12 +69,21 @@ module Oschadbank
67
69
  private
68
70
 
69
71
  def check_required!
70
- required_params = ['Order', 'Result', 'RC', 'TRTYPE']
72
+ required_params = %w(Order Result RC TRTYPE P_SIGN)
71
73
  required_params.each do |param|
72
74
  raise ParamRequred.new(param) if @params[param].to_s.empty?
73
75
  end
74
76
  end
75
77
 
78
+ def check_signature!
79
+ params = @params.dup
80
+ signature = params.delete('P_SIGN')
81
+
82
+ valid_signature = MacBuilder.new(:response, @client.mac_key, params).build
83
+
84
+ raise InvalidSignature unless signature == valid_signature
85
+ end
86
+
76
87
  def result_code
77
88
  @params['Result'].to_s
78
89
  end
@@ -1,3 +1,3 @@
1
1
  module Oschadbank
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: oschadbank
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Roman Khrebtov