privat24_api 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: f73a5056a7f7e38ac36d9dc3e24203bcc6012336f5bb56238bd81a7f5bfc4de9
4
+ data.tar.gz: 14c9019b583040a2f7f8d3072a48c8e2039fd69936388ff076a919219ed60667
5
+ SHA512:
6
+ metadata.gz: 4d3eb3ed79f6bdbd4f384643fa64727a252ef90003b5e482b68923fd5a34780c62cfe7cdd02e7e00d214782177f4d81fb438aa20503133493d6b23584ae28d1d
7
+ data.tar.gz: 5b7bc94b08869f4aa9a77c60ad2fd9d4db8c905b48d3d7dd602d1755459003612606b77929f9f68fb1c99e019c07d9261d101f27cd782194efdb27033f14de91
@@ -0,0 +1,20 @@
1
+ require "privat24_api/request/info/info_request"
2
+ require "privat24_api/request/payment/payment_request"
3
+
4
+ module Privat24Api
5
+ class Card
6
+ attr_reader :args
7
+
8
+ def initialize(**args)
9
+ @args = args
10
+ end
11
+
12
+ def info
13
+ Privat24Api::InfoRequest.new(args)
14
+ end
15
+
16
+ def payment
17
+ Privat24Api::PaymentRequest.new(args)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,28 @@
1
+ module Privat24Api
2
+ def self.class_attr_accessor(*names)
3
+ names.each do |name|
4
+ define_singleton_method("#{name.to_s}=".to_sym) do |attr|
5
+ class_variable_set("@@#{name.to_s}", attr)
6
+ end
7
+
8
+ define_singleton_method(name.to_sym) do
9
+ class_variable_get("@@#{name.to_s}")
10
+ end
11
+ end
12
+ end
13
+
14
+ class_attr_accessor :cards, :base_url, :end_points
15
+
16
+ def self.configure
17
+ yield self
18
+ end
19
+
20
+ self.cards = []
21
+ self.base_url = 'https://api.privatbank.ua/p24api/'
22
+ self.end_points = {
23
+ 'info' => {
24
+ 'balance' => 'balance',
25
+ 'transaction_details' => 'rest_fiz'
26
+ }
27
+ }
28
+ end
@@ -0,0 +1,37 @@
1
+ require "privat24_api/request/request"
2
+
3
+ module Privat24Api
4
+ class InfoRequest
5
+
6
+ MOD = 'info'
7
+
8
+ attr_reader :card_args
9
+
10
+ def initialize(**card_args)
11
+ @card_args = card_args
12
+ end
13
+
14
+ def balance
15
+ Request.new(card_args).send_data_for(MOD, 'balance') do |data|
16
+ data.oper('cmt')
17
+ data.wait('0')
18
+ data.payment(id: '')
19
+ data.prop(name: 'cardnum', value: card_args[:card_num])
20
+ data.prop(name: 'country', value: 'UA')
21
+ end
22
+ end
23
+
24
+ def transaction_details(from, to)
25
+ Request.new(card_args).send_data_for(MOD, 'transaction_details') do |data|
26
+ data.oper('cmt')
27
+ data.wait('0')
28
+ data.test('0')
29
+ data.payment(id: '') do
30
+ data.prop(name: 'sd', value: from)
31
+ data.prop(name: 'ed', value: to)
32
+ data.prop(name: 'card', value: card_args[:card_num])
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,14 @@
1
+ require "privat24_api/request/request"
2
+
3
+ module Privat24Api
4
+ class PaymentRequest
5
+
6
+ MOD = 'payment'
7
+
8
+ attr_reader :card_args
9
+
10
+ def initialize(**card_args)
11
+ @card_args = card_args
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,73 @@
1
+ require 'digest/md5'
2
+ require 'digest/sha1'
3
+
4
+ module Privat24Api
5
+ class Request
6
+
7
+ attr_reader :data_value, :card_num, :merchant_id, :merchant_password
8
+
9
+ def initialize(**card_args)
10
+ @card_num = card_args[:card_num]
11
+ @merchant_id = card_args[:merchant_id]
12
+ @merchant_password = card_args[:merchant_password]
13
+ end
14
+
15
+ def send_data_for(mod, met)
16
+ builder = Nokogiri::XML::DocumentFragment.parse ""
17
+ Nokogiri::XML::Builder.with(builder) do |xml|
18
+ yield xml
19
+ end
20
+
21
+ @data_value = builder.to_xml
22
+
23
+ send(mod, met)
24
+ end
25
+
26
+ private
27
+
28
+ def send(mod, met)
29
+ RestClient.post(make_url(mod, met), unescape_xml(make_xml), :content_type => "text/xml").body
30
+ end
31
+
32
+ def make_url(mod, met)
33
+ "#{Privat24Api.base_url}#{Privat24Api.end_points[mod][met]}"
34
+ end
35
+
36
+ def unescape_xml(xml)
37
+ CGI::unescapeHTML(xml)
38
+ end
39
+
40
+ def make_xml
41
+ builder = Nokogiri::XML::Builder.new(encoding: 'UTF-8') do |xml|
42
+ xml.request(version: '1.0') do
43
+ xml.merchant(xml_merchant(signature))
44
+ xml.data(data_value)
45
+ end
46
+ end
47
+
48
+ builder.to_xml
49
+ end
50
+
51
+ def xml_merchant(signatur)
52
+ builder = Nokogiri::XML::DocumentFragment.parse ""
53
+
54
+ Nokogiri::XML::Builder.with(builder) do |xml|
55
+ xml.id(merchant_id)
56
+ xml.signature(signatur)
57
+ end
58
+
59
+ builder.to_xml
60
+ end
61
+
62
+ def signature
63
+ generate_signature(data_value, merchant_password)
64
+ end
65
+
66
+ def generate_signature(data, password)
67
+ Digest::SHA1.hexdigest( Digest::MD5.hexdigest(data.strip << password) )
68
+ end
69
+ end
70
+ end
71
+
72
+
73
+
@@ -0,0 +1,3 @@
1
+ module Privat24Api
2
+ VERSION = "0.1.1"
3
+ end
@@ -0,0 +1,8 @@
1
+ require 'nokogiri'
2
+ require 'rest_client'
3
+ require 'privat24_api/version'
4
+ require 'privat24_api/configure'
5
+ require 'privat24_api/card/card'
6
+
7
+ module Privat24Api
8
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: privat24_api
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - woodcrust
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-09-05 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 2.0.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 2.0.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: httparty
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.16.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 0.16.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: nokogiri
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 0.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 0.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.15'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.15'
69
+ description: Gem privat24_api for all ruby projects
70
+ email:
71
+ - emptystamp@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/privat24_api.rb
77
+ - lib/privat24_api/card/card.rb
78
+ - lib/privat24_api/configure.rb
79
+ - lib/privat24_api/request/info/info_request.rb
80
+ - lib/privat24_api/request/payment/payment_request.rb
81
+ - lib/privat24_api/request/request.rb
82
+ - lib/privat24_api/version.rb
83
+ homepage: https://github.com/woodcrust/privat24_api
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.7.3
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: This is gem privat24_api
107
+ test_files: []