moneta-api 2.0.0 → 2.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 +5 -5
- data/CHANGELOG.md +9 -5
- data/README.md +46 -5
- data/lib/moneta/api/service.rb +3 -3
- data/lib/moneta/api/version.rb +1 -1
- data/lib/moneta/api.rb +6 -0
- data/lib/moneta/constants/settings.rb +11 -0
- data/lib/moneta/front/http_exception.rb +13 -0
- data/lib/moneta/front/service.rb +51 -0
- data/lib/moneta/front/service_methods.rb +26 -0
- data/moneta-api.gemspec +2 -1
- data/spec/lib/moneta/api/service_spec.rb +1 -1
- data/spec/lib/moneta/front/service_spec.rb +38 -0
- data/spec/spec_helper.rb +7 -0
- data/spec/support/moneta-certificate.pem +29 -0
- data/spec/support/moneta-private.key +28 -0
- data/spec/support/moneta.example.yml +4 -0
- data/spec/vcr/moneta_front_service_get_receipt_pdf/when_bad_request_.yml +295 -0
- data/spec/vcr/moneta_front_service_get_receipt_pdf/when_success_request_must_be_a_pdf.yml +650 -0
- data/spec/vcr/moneta_front_service_request/when_bad_request_status_.yml +282 -0
- data/spec/vcr/moneta_front_service_request/when_success_request_status_.yml +650 -0
- metadata +41 -14
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: c82f9dbd8db0a264f2c5a8aa035592f50c7e5b9ee142a37b0a7bc6ca9bafc407
|
|
4
|
+
data.tar.gz: b1fded7db6cf946e6f120a449eec29812aa9debeec07851204e77196e2b373cf
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6effc742a9c1c7c01a879b64548b01b9b8a225b9f91d3f929d456d5ce50567b9d185273335e9165740cfaf96e8fc9eb7a0e64ccc448c37edbc941ae992f7b3b3
|
|
7
|
+
data.tar.gz: 424967818511b08af3ecfd120f6115e8316a00fcc19be0812f8b3fa6abf1119279bd3335f6e4a4a24ae90acd7e6253dd5691359468f778ad899e71ffd43b9d66
|
data/CHANGELOG.md
CHANGED
|
@@ -1,15 +1,19 @@
|
|
|
1
|
+
## 2.1.1
|
|
2
|
+
- Изменение основного URL.
|
|
3
|
+
## 2.1.0
|
|
4
|
+
- Получение чека монеты в формате PDF с иcпользованием сертификатов
|
|
1
5
|
## 2.0.0
|
|
2
6
|
|
|
3
7
|
- Перевод взаимодействия с Moneta.ru с SOAP на JSON.
|
|
4
|
-
|
|
8
|
+
|
|
5
9
|
Interaction with MONETA.RU changed from SOAP to JSON.
|
|
6
|
-
|
|
10
|
+
|
|
7
11
|
- Подключены зависимости Oj и ActiveSupport.
|
|
8
|
-
|
|
12
|
+
|
|
9
13
|
Oj and ActiveSupport added as dependencies.
|
|
10
|
-
|
|
14
|
+
|
|
11
15
|
- Изменились настройки подключения. Доступные опции: `demo_mode`, `logger`, `log_body`, `open_timeout`, `filter`.
|
|
12
|
-
|
|
16
|
+
|
|
13
17
|
Connection settings changed. Available options: `demo_mode`, `logger`, `log_body`, `open_timeout`, `filter`.
|
|
14
18
|
|
|
15
19
|
## 1.13.0
|
data/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://codeclimate.com/github/ssnikolay/moneta-api)
|
|
5
5
|
[](http://inch-ci.org/github/ssnikolay/moneta-api)
|
|
6
6
|
|
|
7
|
-
[Описание MerchantAPI](https://
|
|
7
|
+
[Описание MerchantAPI](https://moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf) | [RDoc](http://www.rubydoc.info/gems/moneta-api) |
|
|
8
8
|
[Список методов](http://www.rubydoc.info/gems/moneta-api/Moneta/Api/ServiceMethods)
|
|
9
9
|
|
|
10
10
|
# moneta-api
|
|
@@ -18,8 +18,8 @@
|
|
|
18
18
|
- v1 работает с Moneta.ru при помощи SOAP, v2 при помощи JSON.
|
|
19
19
|
- В v1 числа являются строками, в v2 числами (например, значения `id`).
|
|
20
20
|
- Изменились настройки фильтрации, добавилась настройка `log_body`, убрались `log`, `pretty_print_xml`
|
|
21
|
-
- В аттрибутах ключ-значение (например, результат `FindBankAccounts`), значение всегда строка.
|
|
22
|
-
Поэтому например значение поля `is_international` будет строка `"false"`, а не Boolean `false`.
|
|
21
|
+
- В аттрибутах ключ-значение (например, результат `FindBankAccounts`), значение всегда строка.
|
|
22
|
+
Поэтому например значение поля `is_international` будет строка `"false"`, а не Boolean `false`.
|
|
23
23
|
Это связано с особенностями работы с Moneta.ru при помощи JSON.
|
|
24
24
|
|
|
25
25
|
## Установка
|
|
@@ -39,8 +39,11 @@ gem 'moneta-api'
|
|
|
39
39
|
$ gem install moneta-api
|
|
40
40
|
|
|
41
41
|
## Использование
|
|
42
|
+
Есть несколько вариантов работы с сервисами монеты:
|
|
43
|
+
1. API - работа происходит с использованием методов описанных в MONETA.MerchantAPI.v2
|
|
44
|
+
2. FRONT - работа происходит напрямую с интерфейсом монеты.
|
|
42
45
|
|
|
43
|
-
### Примеры
|
|
46
|
+
### Примеры работы c API
|
|
44
47
|
|
|
45
48
|
#### Получить данные счета
|
|
46
49
|
|
|
@@ -135,10 +138,48 @@ gem 'moneta-api'
|
|
|
135
138
|
Moneta::Api::Service.new('username', 'password', { demo_mode: true })
|
|
136
139
|
```
|
|
137
140
|
|
|
141
|
+
|
|
142
|
+
### Примеры работы с FRONT (интерфейс монеты)
|
|
143
|
+
|
|
144
|
+
#### Получить квинтанцию оплаты в формате PDF
|
|
145
|
+
```ruby
|
|
146
|
+
require 'moneta/api'
|
|
147
|
+
|
|
148
|
+
certificate = OpenSSL::X509::Certificate.new(File.read('cert_path'))
|
|
149
|
+
private_key = OpenSSL::PKey::RSA.new(File.read('key_path'), 'password')
|
|
150
|
+
|
|
151
|
+
service = Moneta::Front::Service.new(certificate, private_key, { demo_mode: true })
|
|
152
|
+
|
|
153
|
+
service.get_receipt_pdf(468398)
|
|
154
|
+
# => 'PDF файл'
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
**Полный [список методов](http://www.rubydoc.info/gems/moneta-api/Moneta/Front/ServiceMethods), с помощью которых вы можете обратиться к интефейсу moneta.ru**
|
|
158
|
+
|
|
159
|
+
### Настройки
|
|
160
|
+
**Для работы с интерфейсом монеты понадобиться получение сертификатов, получение подробно описано в [MONETA.MerchantAPI.v2](https://moneta.ru/doc/MONETA.MerchantAPI.v2.ru.pdf)**
|
|
161
|
+
|
|
162
|
+
Параметры:
|
|
163
|
+
|
|
164
|
+
Название | Описание
|
|
165
|
+
---------------------------|:----------------------------------------------
|
|
166
|
+
`certificate` | Сертификат пользователя, полученный от монеты.
|
|
167
|
+
`private_key` | Приватный ключ, сгенерированный пользователем.
|
|
168
|
+
`:demo_mode` | Выполнение операций на демо стенде.
|
|
169
|
+
`:open_timeout` | Таймаут подключения.
|
|
170
|
+
`:filter` | Настройка фильтрации содержимого лога.
|
|
171
|
+
|
|
172
|
+
#### Demo режим
|
|
173
|
+
Для использования тестового сервера (http://demo.moneta.ru) следует инициализировать сервис со специальным флагом
|
|
174
|
+
|
|
175
|
+
```ruby
|
|
176
|
+
Moneta::Front::Service.new(certificate, private_key, { demo_mode: true })
|
|
177
|
+
```
|
|
178
|
+
|
|
138
179
|
## Contributing
|
|
139
180
|
|
|
140
181
|
1. Стандартная схема с pull-request workflow
|
|
141
182
|
2. Для локального запуска тестов необходимо создать конфигурационный файл со своими demo доступами
|
|
142
183
|
```bash
|
|
143
|
-
|
|
184
|
+
cp spec/support/moneta.example.yml spec/support/moneta.yml
|
|
144
185
|
```
|
data/lib/moneta/api/service.rb
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
module Moneta
|
|
2
2
|
module Api
|
|
3
3
|
class Service
|
|
4
|
-
DEMO =
|
|
5
|
-
PRODUCTION =
|
|
6
|
-
URL =
|
|
4
|
+
DEMO = Moneta::Constants::Settings::DEMO
|
|
5
|
+
PRODUCTION = Moneta::Constants::Settings::PRODUCTION
|
|
6
|
+
URL = Moneta::Constants::Settings::SERVICES_PATH
|
|
7
7
|
|
|
8
8
|
include ServiceMethods
|
|
9
9
|
|
data/lib/moneta/api/version.rb
CHANGED
data/lib/moneta/api.rb
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
require 'moneta/api/version'
|
|
2
2
|
require 'faraday'
|
|
3
|
+
require 'faraday_middleware'
|
|
3
4
|
require 'oj'
|
|
4
5
|
require 'active_support/core_ext/hash/indifferent_access'
|
|
5
6
|
require 'active_support/core_ext/string/inflections'
|
|
6
7
|
|
|
7
8
|
require 'moneta/constants/withdrawal'
|
|
9
|
+
require 'moneta/constants/settings'
|
|
8
10
|
require 'moneta/api/options'
|
|
9
11
|
require 'moneta/api/service_methods'
|
|
10
12
|
require 'moneta/api/service'
|
|
@@ -122,3 +124,7 @@ require 'moneta/api/responses/approve_phone_send_confirmation_response'
|
|
|
122
124
|
require 'moneta/api/responses/approve_phone_apply_code_response'
|
|
123
125
|
|
|
124
126
|
require 'moneta/api/response_factory'
|
|
127
|
+
|
|
128
|
+
require 'moneta/front/http_exception'
|
|
129
|
+
require 'moneta/front/service_methods'
|
|
130
|
+
require 'moneta/front/service'
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
require 'moneta/api/options'
|
|
2
|
+
|
|
3
|
+
module Moneta
|
|
4
|
+
module Front
|
|
5
|
+
class Service
|
|
6
|
+
DEMO = Moneta::Constants::Settings::DEMO
|
|
7
|
+
PRODUCTION = Moneta::Constants::Settings::PRODUCTION
|
|
8
|
+
PATH = Moneta::Constants::Settings::CERTIFICATE_PATH
|
|
9
|
+
|
|
10
|
+
include ServiceMethods
|
|
11
|
+
|
|
12
|
+
def initialize(certificate, key, params = {})
|
|
13
|
+
@certificate = certificate
|
|
14
|
+
@key = key
|
|
15
|
+
@connection = connection(Moneta::Api::Options.new(params))
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def request(url)
|
|
19
|
+
@connection.get(url)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def connection(options)
|
|
25
|
+
Faraday.new(url: endpoint(options.demo?), ssl: ssl_options) do |faraday|
|
|
26
|
+
faraday.use ::FaradayMiddleware::FollowRedirects, limit: 10
|
|
27
|
+
|
|
28
|
+
if options.logger
|
|
29
|
+
faraday.response :logger, options.logger, bodies: options.log_bodies? do |logger|
|
|
30
|
+
options.filter.each do |subject, replacement|
|
|
31
|
+
logger.filter(/#{ subject }/, replacement)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
faraday.adapter :net_http do |http|
|
|
37
|
+
http.open_timeout = options.open_timeout
|
|
38
|
+
end
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def endpoint(demo)
|
|
43
|
+
(demo ? DEMO : PRODUCTION) + PATH
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def ssl_options
|
|
47
|
+
{ client_cert: @certificate, client_key: @key, verify: false }
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
module Moneta
|
|
2
|
+
module Front
|
|
3
|
+
module ServiceMethods
|
|
4
|
+
def get_receipt_pdf(operation_id)
|
|
5
|
+
url = "report/receipt.htm?operationId=#{operation_id}&format=pdf"
|
|
6
|
+
|
|
7
|
+
call(url)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
private
|
|
11
|
+
|
|
12
|
+
def call(url)
|
|
13
|
+
response = request(url)
|
|
14
|
+
|
|
15
|
+
case response.status
|
|
16
|
+
when 200..230 then response.body
|
|
17
|
+
else
|
|
18
|
+
raise Moneta::Front::HTTPException.new("Status code: #{response.status}")
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
rescue Faraday::Error => e
|
|
22
|
+
raise Moneta::Front::HTTPException.new(e.message)
|
|
23
|
+
end
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
end
|
data/moneta-api.gemspec
CHANGED
|
@@ -21,10 +21,11 @@ Gem::Specification.new do |spec|
|
|
|
21
21
|
spec.required_ruby_version = '>= 2.0'
|
|
22
22
|
|
|
23
23
|
spec.add_dependency 'faraday', '~> 0.11.0'
|
|
24
|
+
spec.add_dependency 'faraday_middleware', '~> 0.12'
|
|
24
25
|
spec.add_dependency 'activesupport', '>= 4.0.0'
|
|
25
26
|
spec.add_dependency 'oj', '>= 2.16'
|
|
26
27
|
|
|
27
|
-
spec.add_development_dependency 'bundler'
|
|
28
|
+
spec.add_development_dependency 'bundler'
|
|
28
29
|
spec.add_development_dependency 'rake', '~> 10'
|
|
29
30
|
spec.add_development_dependency 'pry'
|
|
30
31
|
spec.add_development_dependency 'rspec'
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
describe Moneta::Front::Service, vcr: true do
|
|
2
|
+
let(:params) { { demo_mode: true } }
|
|
3
|
+
|
|
4
|
+
let(:service) { described_class.new($cert, $cert_private_key, params) }
|
|
5
|
+
|
|
6
|
+
describe '#request' do
|
|
7
|
+
subject { service.request(path) }
|
|
8
|
+
|
|
9
|
+
context 'when success request' do
|
|
10
|
+
let(:path) { 'report/receipt.htm?operationId=467339&format=pdf' }
|
|
11
|
+
|
|
12
|
+
its(:status) { is_expected.to eq 200 }
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
context 'when bad request' do
|
|
16
|
+
let(:path) { 'report/receipt.htm' }
|
|
17
|
+
its(:status) { is_expected.to eq 400 }
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
describe '#get_receipt_pdf' do
|
|
22
|
+
subject { service.get_receipt_pdf(operation_id) }
|
|
23
|
+
|
|
24
|
+
context 'when success request' do
|
|
25
|
+
let(:operation_id) { 467339 }
|
|
26
|
+
|
|
27
|
+
it 'Must be a PDF' do
|
|
28
|
+
expect(subject[0, 4]).to eq('%PDF')
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
context 'when bad request' do
|
|
33
|
+
let(:operation_id) { 'report/receipt.htm' }
|
|
34
|
+
|
|
35
|
+
it { expect { subject }.to raise_error(Moneta::Front::HTTPException) }
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -17,9 +17,15 @@ end
|
|
|
17
17
|
|
|
18
18
|
config = YAML.load(File.read(File.join(Dir.pwd, 'spec/support/moneta.yml')))
|
|
19
19
|
|
|
20
|
+
cert_path = File.join(Dir.pwd, config['cert_path'])
|
|
21
|
+
cert_private_key_path = File.join(Dir.pwd, config['cert_private_key_path'])
|
|
22
|
+
|
|
20
23
|
$username = config['username']
|
|
21
24
|
$password = config['password']
|
|
22
25
|
|
|
26
|
+
$cert = OpenSSL::X509::Certificate.new(File.read(cert_path))
|
|
27
|
+
$cert_private_key = OpenSSL::PKey::RSA.new(File.read(cert_private_key_path), config['private_key_password'])
|
|
28
|
+
|
|
23
29
|
class WebHelper
|
|
24
30
|
def self.with_real_connection
|
|
25
31
|
WebMock.allow_net_connect!
|
|
@@ -35,6 +41,7 @@ VCR.configure do |config|
|
|
|
35
41
|
config.hook_into :webmock
|
|
36
42
|
config.filter_sensitive_data('<USERNAME>') { $username }
|
|
37
43
|
config.filter_sensitive_data('<PASSWORD>') { $password }
|
|
44
|
+
config.filter_sensitive_data('<CERT_PASSWORD>') { $cert_pass }
|
|
38
45
|
config.ignore_hosts 'codeclimate.com'
|
|
39
46
|
end
|
|
40
47
|
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
|
2
|
+
MIIE7zCCAtegAwIBAgICKKQwDQYJKoZIhvcNAQEFBQAwgaYxCzAJBgNVBAYTAlJV
|
|
3
|
+
MRAwDgYDVQQIDAdNYXJpIEVsMRQwEgYDVQQHDAtZb3Noa2FyLU9sYTEcMBoGA1UE
|
|
4
|
+
CgwTTkNPIE1PTkVUQS5SVSAoTExDKTERMA8GA1UECwwIVGVjaERlcHQxFzAVBgNV
|
|
5
|
+
BAMMDmRlbW8ubW9uZXRhLnJ1MSUwIwYJKoZIhvcNAQkBFhZ0ZWNoLnN1cHBvcnRA
|
|
6
|
+
bW9uZXRhLnJ1MB4XDTE3MTEwMzEwMjU0OFoXDTE4MTEwMzEwMjU0OFowVzELMAkG
|
|
7
|
+
A1UEBhMCUlUxEjAQBgNVBAgMCVRhdGFyc3RhbjEOMAwGA1UEBwwFS2F6YW4xFDAS
|
|
8
|
+
BgNVBAoMC1J1bnRpbWUgTExDMQ4wDAYDVQQDDAVEYW1pcjCCASIwDQYJKoZIhvcN
|
|
9
|
+
AQEBBQADggEPADCCAQoCggEBAL1q0kiaP6pr3f2jtH9CMCYWF+Oc9aMOQuzoU7P5
|
|
10
|
+
xETxePfBZu8h2smB8WsrHjlHbj/LI8XxH5kGYzomri7XrbC6osfTQR2Up9yuPvJw
|
|
11
|
+
9rV1h0bEUQ2I7y1ns0d5kCFaIqOOpFp04eF16/xqjYFcZqF6triw2IBfcDRnRSnY
|
|
12
|
+
5x9cR6lyeXhnjDNCcMHyzfXcnPUzUycEyaDVVKO/gNcFJInZcblyAobM2ja07Ji/
|
|
13
|
+
sOI5GB6RpEKKdRMBfSjGf9cDrm/33heeVGCiVUK9rxT9lv44e+FwhmMEApuPVc9m
|
|
14
|
+
xVJ6j8aBlb+Y0+zEdVEysUNAuu7+gUEMQgAGU7IH/mWVeSkCAwEAAaN1MHMwHwYD
|
|
15
|
+
VR0jBBgwFoAUEmi7gDDSEybKT6yoaTS7VAvOxqQwHQYDVR0OBBYEFNL2nqzYd5/5
|
|
16
|
+
TxLSNRBe5Jsym9KSMA4GA1UdDwEB/wQEAwIHgDAMBgNVHRMBAf8EAjAAMBMGA1Ud
|
|
17
|
+
JQQMMAoGCCsGAQUFBwMCMA0GCSqGSIb3DQEBBQUAA4ICAQApsU1xN+lA8iT2x9MP
|
|
18
|
+
Tn/W//de5tBOFAKUnefzQrpjkqf94vzQ0j2z06g2nwRNDuVeit9g/r5iZpHiJh1K
|
|
19
|
+
Joz2F4WPGZNeWAszDwiXfMDsCsQOuw2zq4WYa4rOOLMs+IgLR9tKhDspgbLl396U
|
|
20
|
+
3MEHz5N9Lb5Pfiu/1klFE+SO/9q9HtyLn5lNkbyfxrzoKfyWpHwYZi8dofkHPNgI
|
|
21
|
+
qPOIjQwedPv5SUWdWghSdsjQ6NvptUnCWgJOQzaHVPJLq01wdRLhz/lL316b59YH
|
|
22
|
+
/VcGwmZcXwEwUVvIgDdE0ieNjHJwfp+OZJqRGszvHOh89fE8zvtSOysqvLvmSv3E
|
|
23
|
+
sHemrnQ18Fr3P7kOr4kfbsB9DMheaxPyp9yTQ7t+r3YOkJK8HxxNavAIchner/lU
|
|
24
|
+
sfWioutD1qzCI8Ex5JG6gWOltDEs6A7w2ro9zyAIjelpq8R3rnGd8c6LXbClqJdr
|
|
25
|
+
1x3EU9DjAhWb8+JWNKlv9doR+EAUFHvjtojWfoWNcRxoVIAoio1qsDega0MibFVr
|
|
26
|
+
9lWGMkGhsTIXOOk5KpmcTT3eLD5ZJNXLXRcYa0tj60QH9xTaTtJbfJJ3KhV8vPdO
|
|
27
|
+
2sc+QRWbIjD5+MpJkSPFMMsHbHm2LO/FvrpcMExVOYZ+UXhvzfah1HiIZ2sr353f
|
|
28
|
+
HnFMtpar7U/YZvkoIL4fOpKWQA==
|
|
29
|
+
-----END CERTIFICATE-----
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
-----BEGIN PRIVATE KEY-----
|
|
2
|
+
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC9atJImj+qa939
|
|
3
|
+
o7R/QjAmFhfjnPWjDkLs6FOz+cRE8Xj3wWbvIdrJgfFrKx45R24/yyPF8R+ZBmM6
|
|
4
|
+
Jq4u162wuqLH00EdlKfcrj7ycPa1dYdGxFENiO8tZ7NHeZAhWiKjjqRadOHhdev8
|
|
5
|
+
ao2BXGahera4sNiAX3A0Z0Up2OcfXEepcnl4Z4wzQnDB8s313Jz1M1MnBMmg1VSj
|
|
6
|
+
v4DXBSSJ2XG5cgKGzNo2tOyYv7DiORgekaRCinUTAX0oxn/XA65v994XnlRgolVC
|
|
7
|
+
va8U/Zb+OHvhcIZjBAKbj1XPZsVSeo/GgZW/mNPsxHVRMrFDQLru/oFBDEIABlOy
|
|
8
|
+
B/5llXkpAgMBAAECggEAQYHU8ajuxbiCUHqyLKSuVC2l22DoDpkbCiWa9Q43E4TT
|
|
9
|
+
ShPHzoHN0Yyv+lkyHasXdNaDK6ylOd3cqTrBWI/ckNcq/qKPzXQgzZAxUtVAbScV
|
|
10
|
+
PqMcSOsHlJNdjCV9dBthCWGGc4YirD+E+om7IHbdQ5FV6e+3IEZhXq4sXDmYTN6b
|
|
11
|
+
i+I+TWiEAvnUrY1qm8+o3xqdvadnD2ixcNRlbAi6uzMUkhTqPy/g6POSzPtTKYF7
|
|
12
|
+
LQOssf6e1mxoLihevkBFVqwrshvXSanKkVu1q2QMlWaXHUzSCs0BtZQB3mRBu+XB
|
|
13
|
+
2AC1afQai4Ubr7nT/XfBz52u+bh59Tmq+qGDXnm+gQKBgQDqNSPkBj8yb30aw1nj
|
|
14
|
+
0vo987jNtaFeA+PdPwMCr952YjSgMzaOV9irSQjCHqTQS5JLoUGc32Tof1fWH8kc
|
|
15
|
+
pCgt7IKTGn1hdvQotPMHhve9vuFI/rQ6YIPF0+USUSmNwbKbwmSzK5SzqkdvwXD/
|
|
16
|
+
xfAO5qMlb4A6cAlQvXXHLl/L+QKBgQDPCsTz5fG2VSN7tDr2Hh1hJ4xhXSKIu8ri
|
|
17
|
+
cOzmbEwL8AeVhhR1wJQEXBM/FX/dIlcYDA9SyOkcnAeNRrjFlPn6/DqzrbJSWXRL
|
|
18
|
+
ziiMkew7Yld5rwRGl6w5uURpfB1APQMeefsNT5AZQtepTmjW08fjFHtoNFyD7FcN
|
|
19
|
+
dM71vS2CsQKBgQC2Bl0BoNVHJp0tyrw3M8bnlV+BCXQD9LQJRSra0MLucT8Dbyos
|
|
20
|
+
kRvFa/rRnC1t8f4ep5KuEHWFuUsUERomF3Ne1d1Z5RGjSWdTp+bmZ8BuCUdgiwyZ
|
|
21
|
+
/l8LxrbXeJr6IJvnMLtBAVMOG/5vXgGr2DPN8PTFaJZZVK/4v3clOeacSQKBgQC9
|
|
22
|
+
DcVoPKjpaHa9J4bLZBZJt7Ys1cGJ/4i0Go+HnI4YPHaAZ21ZVJ8UGAuPCA+4mfnT
|
|
23
|
+
QHfhjQmnkSYoL9LawD0/nH/xwALbxUk3Symlqj1+wD7GIzURTL/7+Ztpguam2M93
|
|
24
|
+
TcUbk3IuTuXkeG+s8rdMOFCzh1SPNgkLhYTRyYu8EQKBgQC117MNYc1JG5d3PkWC
|
|
25
|
+
Q3xAkXPS14sRKlP4cE8m2ZyCoT04mFAP6hydlGtbUz8sDhwMwbHZVkROqrhnkzsT
|
|
26
|
+
7MXifPU7Z4+Z15LzhFC8j8EdfebFlDCpXbhHMIHfFnZMGpLEPbPyOncTXA4QvjHf
|
|
27
|
+
i63SHI1R9T/c8KXfFZhvIzfUVw==
|
|
28
|
+
-----END PRIVATE KEY-----
|