pay24 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 9274a3468a62dc80013cc7386a800536d77d9339
4
+ data.tar.gz: a8891b5ad107c2f354da099a2fdcfa0f91782ad9
5
+ SHA512:
6
+ metadata.gz: 1441fc399559a096428b839278019a8b2e4ecb9f58b5d9eb6d1f1897cca8beed4f9b2eca91502218d0dda8a8b9867089a72be878390495974aaf91c893d96b1c
7
+ data.tar.gz: 676e733a8c43f2e382c1b2320fee34c94e2de6cee5a5a5978c40218f76d6517a85f906d9fdb892d7b78decf0c44df7d7880b2a5d5e4f3fd2f742a9920fbc61c2
@@ -0,0 +1,20 @@
1
+ Copyright 2019 Bexeiitov Nursultan
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,23 @@
1
+ # Гем для работы с pay24
2
+
3
+ Гем для работы с платежной системой Pay24 для использования в проектах, использующих Ruby (Ruby On Rails, Sinatra и др.).
4
+
5
+ Платежная система «Pay24» создана в 2014 году, с самого начала осуществляет свою деятельность на рынке приема платежей.
6
+ В 2015 году Компания получила две лицензии Национального Банка Кыргызской Республики.
7
+
8
+ Официальный сайт: https://pay24.asia/
9
+
10
+ ## Установка
11
+
12
+ Добавьте эту строку в ваш Gemfile:
13
+
14
+ gem 'pay24'
15
+
16
+ Затем установите gem, используя bundler:
17
+
18
+ $ bundle
19
+
20
+ Или выполните команду:
21
+
22
+ $ gem install pay24
23
+
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env rake
2
+ require 'bundler/gem_tasks'
@@ -0,0 +1,7 @@
1
+ require 'pay24/version'
2
+
3
+ module Pay24
4
+ autoload :ResponseHandler, 'pay24/response_handler'
5
+ autoload :Result, 'pay24/result'
6
+ autoload :Errors, 'pay24/errors'
7
+ end
@@ -0,0 +1,21 @@
1
+ require 'builder'
2
+
3
+ module Pay24
4
+ module Errors
5
+ attr_reader :code, :message, :result_code
6
+
7
+ # фатальные ошибки начинаются с ERROR_, остальные - с других символов
8
+ SUCCESS = :ok # non-fatal
9
+ TEMPORARY_ERROR = :temporary_error # non-fatal
10
+ ERROR_INVALID_USER_ID_FORMAT = :user_id_does_not_match_format # fatal
11
+ ERROR_USER_NOT_FOUND = :user_not_found # fatal
12
+ ERROR_PAYMENT_DENIED_BY_PROVIDER = :payment_denied_by_provider # fatal
13
+ ERROR_PAYMENT_DENIED_FOR_TECHNICAL_REASON = :payment_denied_tech_reason # fatal
14
+ ERROR_INACTIVE_USER = :inactive_user # fatal
15
+ PAYMENT_PROCESSING_NOT_FINISHED = :payment_processing_not_finished # non-fatal
16
+ ERROR_SUM_IS_TOO_SMALL = :sum_is_too_small # fatal
17
+ ERROR_SUM_IS_TOO_LARGE = :sum_is_too_large # fatal
18
+ ERROR_CANNOT_CHECK_USER_ACCOUNT_STATE = :cannot_check_account_state # fatal
19
+ ERROR_INTERNAL = :internal_error # fatal
20
+ end
21
+ end
@@ -0,0 +1,107 @@
1
+ require 'builder'
2
+
3
+ # Обработчик входящих платежей Pay24.
4
+ #
5
+ # transaction_id целое число длиной до 28 знаков
6
+ # sum Сумма платежа, дробное число с точностью до сотых, в качестве разделителя используется точка
7
+ # transaction_date дата платежа (дата получения запроса от клиента)
8
+ # account ID пользователя, строка, содержащая буквы, цифры и спецсимволы, длиной до 200 символов.
9
+ #
10
+ # Передача информации о платеже провайдеру производится системой в 2 этапа:
11
+ # command=check Проверка возможности совершения платежа. Запись информации о платеже у поставщика
12
+ # command=pay Подтверждение проведения платежа
13
+ #
14
+ module Pay24
15
+ class ResponseHandler
16
+ include Pay24::Errors
17
+
18
+ attr_reader :command, :account, :transaction_id, :transaction_date, :sum
19
+
20
+ EMAIL_REGEX = /\A[^@\s]+@([^@\s]+\.)+[^@\s]+\z/
21
+ IDENTIFICATOR_REGEX = /\A\d+\z/
22
+
23
+ REQUEST_HANDLERS = {
24
+ pay: :osmp_pay,
25
+ check: :check_if_account_is_valid,
26
+ }.freeze
27
+
28
+ def initialize(params: {}, find_user_callback: nil, payment_callback: nil, raise_on_error: false)
29
+ @command = params[:command]
30
+ @account = params[:account]
31
+ @transaction_id = params[:txn_id]
32
+ @transaction_date = params[:txn_date]
33
+ @sum = params[:sum]
34
+ @find_user_callback = find_user_callback
35
+ @payment_callback = payment_callback
36
+ @raise_on_error = raise_on_error
37
+ freeze
38
+ end
39
+
40
+ def command_is_valid?
41
+ @command.to_sym.in?(REQUEST_HANDLERS.keys)
42
+ end
43
+
44
+ def payment_command?
45
+ @command.to_sym == :pay
46
+ end
47
+
48
+ def run_command
49
+ result_code = if command_is_valid?
50
+ send(REQUEST_HANDLERS[@command.to_sym]) || ERROR_INTERNAL
51
+ else
52
+ ERROR_INTERNAL
53
+ end
54
+
55
+ Pay24::Result.new(result_code)
56
+ end
57
+
58
+ def requested_account
59
+ @find_user_callback.(@account) rescue ERROR_CANNOT_CHECK_USER_ACCOUNT_STATE
60
+ end
61
+
62
+ def generate_xml(result, comment = '')
63
+ xml = Builder::XmlMarkup.new indent: 2
64
+ xml.instruct!
65
+ xml.response do |req|
66
+ req.result result.code
67
+ req.comment comment
68
+ if payment_command?
69
+ req.txn_id @transaction_id
70
+ req.sum @sum
71
+ end
72
+ end
73
+ end
74
+
75
+ private
76
+
77
+ def osmp_pay
78
+ return check_if_account_is_valid if check_if_account_is_valid != SUCCESS
79
+
80
+ sum = @sum.to_f.abs
81
+ result_code = nil
82
+
83
+ begin
84
+ raise PaymentIsZero, 'Попытка пополнить баланс на 0 единиц через Pay24' if sum.zero?
85
+
86
+ @payment_callback.(requested_account, sum)
87
+ rescue => e
88
+ raise e if @raise_on_error
89
+ result_code = ERROR_INTERNAL
90
+ else
91
+ result_code = SUCCESS
92
+ end
93
+
94
+ result_code
95
+ end
96
+
97
+ def check_if_account_is_valid
98
+ if @account =~ EMAIL_REGEX || @account =~ IDENTIFICATOR_REGEX
99
+ requested_account.present? ? SUCCESS : ERROR_USER_NOT_FOUND
100
+ else
101
+ ERROR_INVALID_USER_ID_FORMAT
102
+ end
103
+ end
104
+
105
+ class PaymentIsZero < StandardError; end
106
+ end
107
+ end
@@ -0,0 +1,84 @@
1
+ require 'builder'
2
+
3
+ # Модель для вывода результата обработчика.
4
+ #
5
+ # code код результата
6
+ # message_code комментарий
7
+ # result_code названия результата
8
+ #
9
+ module Pay24
10
+ class Result
11
+ include Pay24::Errors
12
+
13
+ attr_reader :code, :message, :result_code
14
+
15
+ # назание неточно, тут не только ошибки. MESSAGES_TO_PAYMENT_GATEWAY
16
+ ERRORS = {
17
+ SUCCESS => {
18
+ message: 'OK',
19
+ code: 0,
20
+ },
21
+ TEMPORARY_ERROR => {
22
+ message: 'Временная ошибка. Повторите запрос позже',
23
+ code: 1,
24
+ },
25
+ ERROR_INVALID_USER_ID_FORMAT => {
26
+ message: 'Неверный формат идентификатора абонента',
27
+ code: 4,
28
+ },
29
+ ERROR_USER_NOT_FOUND => {
30
+ message: 'Идентификатор абонента не найден (Нет такого пользователя)',
31
+ code: 5,
32
+ },
33
+ ERROR_PAYMENT_DENIED_BY_PROVIDER => {
34
+ message: 'Прием платежа запрещен провайдером',
35
+ code: 7,
36
+ },
37
+ ERROR_PAYMENT_DENIED_FOR_TECHNICAL_REASON => {
38
+ message: 'Прием платежа запрещен по техническим причинам',
39
+ code: 8,
40
+ },
41
+ ERROR_INACTIVE_USER => {
42
+ message: 'Счет абонента не активен',
43
+ code: 79,
44
+ },
45
+ PAYMENT_PROCESSING_NOT_FINISHED => {
46
+ message: 'Проведение платежа не окончено (При отмене платежа – отмена еще не подтверждена. Система отправит повторный запрос через некоторое время.)',
47
+ code: 90,
48
+ },
49
+ ERROR_SUM_IS_TOO_SMALL => {
50
+ message: 'Сумма слишком мала',
51
+ code: 241,
52
+ },
53
+ ERROR_SUM_IS_TOO_LARGE => {
54
+ message: 'Сумма слишком велика',
55
+ code: 242,
56
+ },
57
+ ERROR_CANNOT_CHECK_USER_ACCOUNT_STATE => {
58
+ message: 'Невозможно проверить состояние счета',
59
+ code: 243,
60
+ },
61
+ ERROR_INTERNAL => {
62
+ message: 'Другая ошибка провайдера',
63
+ code: 300,
64
+ },
65
+ }.freeze
66
+
67
+ NON_FATAL_ERRORS = %i{ ok temporary_error payment_processing_not_finished }.freeze
68
+
69
+ def initialize(result_code)
70
+ @result_code = result_code
71
+ @message = ERRORS.try(:[], result_code).try(:[], :message)
72
+ @code = ERRORS.try(:[], result_code).try(:[], :code)
73
+ end
74
+
75
+ def failure?
76
+ !success?
77
+ end
78
+
79
+ def success?
80
+ @result_code.to_sym.in? NON_FATAL_ERRORS
81
+ end
82
+
83
+ end
84
+ end
@@ -0,0 +1,3 @@
1
+ module Pay24
2
+ VERSION = '0.0.1'
3
+ end
metadata ADDED
@@ -0,0 +1,79 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pay24
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Bexeiitov Nursultan
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2019-05-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 4.1.0
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 4.1.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: builder
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '2.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '2.0'
41
+ description: Adds the ability to work with the payment system pay24.
42
+ email:
43
+ - bekseitov@mail.ru
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - MIT-LICENSE
49
+ - README.md
50
+ - Rakefile
51
+ - lib/pay24.rb
52
+ - lib/pay24/errors.rb
53
+ - lib/pay24/response_handler.rb
54
+ - lib/pay24/result.rb
55
+ - lib/pay24/version.rb
56
+ homepage: http://neoweb.kz
57
+ licenses: []
58
+ metadata: {}
59
+ post_install_message:
60
+ rdoc_options: []
61
+ require_paths:
62
+ - lib
63
+ required_ruby_version: !ruby/object:Gem::Requirement
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '2.3'
68
+ required_rubygems_version: !ruby/object:Gem::Requirement
69
+ requirements:
70
+ - - ">="
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ requirements: []
74
+ rubyforge_project:
75
+ rubygems_version: 2.6.12
76
+ signing_key:
77
+ specification_version: 4
78
+ summary: pay24 gem
79
+ test_files: []