unitpay 0.0.4 → 0.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 +4 -4
- data/.travis.yml +3 -0
- data/README.md +186 -12
- data/lib/unitpay/version.rb +1 -1
- data/unitpay.gemspec +2 -1
- data/unitpay.jpg +0 -0
- metadata +19 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 30615f1d644e3b6abafaccadef5ae3e1ccd9c23e
|
4
|
+
data.tar.gz: e2b1c7945292348d190860ade3265e4419765281
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 05fef55f7da174ec1cc2b728724598867a90de330503079ae226a6fd7571eb657115129107718d1e49d74711409166fe7519c68491c07ff56657adbc0b2af659
|
7
|
+
data.tar.gz: da7a4f62f1a6d3b4253bc232d053413d62c145a0f3b069fa2ee14dde711c576acc638d6dfbe337d4f2b2c115e6d144f9a5d04fa1437f0e10aac590e7fa9d984a
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,38 +1,212 @@
|
|
1
|
+
[](https://badge.fury.io/rb/unitpay)
|
2
|
+
[](https://travis-ci.org/ssnikolay/unitpay)
|
3
|
+
[](https://codeclimate.com/github/ssnikolay/unitpay)
|
4
|
+
[](https://codeclimate.com/github/ssnikolay/unitpay/coverage)
|
5
|
+
|
1
6
|
# Unitpay
|
2
7
|
|
3
|
-
|
8
|
+
Gem для подключения к платежному шлюзу [unitpay](http://unitpay.ru).
|
9
|
+
|
10
|
+
[Документация к шлюзу](http://help.unitpay.ru/)
|
4
11
|
|
5
|
-
|
12
|
+
- [Установка](#installation)
|
13
|
+
- [Подключение](#setup)
|
14
|
+
- [Использование](#usage)
|
15
|
+
- [Получение ссылки для оплаты](#payment_url)
|
16
|
+
- [Модуль для обработки запросов от unitpay (для RubyOnRails)](#rails)
|
17
|
+
- [Подключение виджета для карт оплаты](#widget)
|
6
18
|
|
7
|
-
|
19
|
+
##<a name="installation"></a> Установка
|
8
20
|
|
9
|
-
|
21
|
+
Добавьте эти строки в Gemfile вашего приложения:
|
10
22
|
|
11
23
|
```ruby
|
12
24
|
gem 'unitpay'
|
13
25
|
```
|
14
26
|
|
15
|
-
|
27
|
+
И выполните:
|
16
28
|
|
17
29
|
$ bundle
|
18
30
|
|
19
|
-
|
31
|
+
Или установите напрямую:
|
20
32
|
|
21
33
|
$ gem install unitpay
|
22
34
|
|
23
|
-
|
35
|
+
##<a name="setup"></a> Подключение
|
36
|
+
Чтобы получить доступ к сервисному классу, достаточно проинициализировать его с `public` и `secret` ключами.
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
Unitpay::Service.new('unitpay_public_key', 'unitpay_secret_key')
|
40
|
+
```
|
41
|
+
|
42
|
+
По умолчанию курс валюты выставлен в `RUB`, а использование сигнатуры в `true`.
|
43
|
+
Переопределить их можно и при инициализации.
|
44
|
+
```ruby
|
45
|
+
use_sign, currency = false, 'RUB'
|
46
|
+
Unitpay::Service.new('unitpay_public_key', 'unitpay_secret_key', use_sign, currency)
|
47
|
+
```
|
48
|
+
Чтобы включить проверку сигнатуры со стороны `unitpay`, необходимо нажать на "замочек" в настройках вашего партнера.
|
49
|
+
|
50
|
+

|
51
|
+
|
52
|
+
1. Включение проверки сигнатуры.
|
53
|
+
2. `Secret key` для инициализации `Unitpay::Service`.
|
54
|
+
3. Необходимо изменить `example.com` на адрес вашего приложения.
|
55
|
+
4. Необходимо изменить `example.com` на адрес вашего приложения.
|
56
|
+
|
57
|
+
|
58
|
+
##<a name="usage"></a> Использование
|
59
|
+
|
60
|
+
###<a name="payment_url"></a> Получение ссылки для оплаты
|
61
|
+
|
62
|
+
Чтобы получить ссылку для оплаты, необходимо использовать метод `payment_url`, в который нужно передать следующие параметры:
|
63
|
+
|
64
|
+
Название | Описание
|
65
|
+
--------------------|:-----------------------------------------
|
66
|
+
`sum` | Цена, которую необходимо оплатить пользователю
|
67
|
+
`account` | Внутренний идентификатор платежа (или заказа), однозначно определяющий его в магазине.
|
68
|
+
`desc` | Описание платежа, отображающееся пользователю на стороне шлюза.
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
sum, account, desc = 100, 1, 'description'
|
72
|
+
service = Unitpay::Service.new('unitpay_public_key', 'unitpay_secret_key')
|
73
|
+
service.payment_url(sum, account, desc)
|
74
|
+
# => 'https://unitpay.ru/pay/public_key?sum=100&account=1&desc=description...'
|
75
|
+
```
|
76
|
+
|
77
|
+
###<a name="rails"></a> Модуль для обработки запросов от unitpay (для RubyOnRails)
|
78
|
+
|
79
|
+
Добавьте роуты для **unitpay** (`config/routes.rb`)
|
24
80
|
|
25
|
-
|
81
|
+
```ruby
|
82
|
+
scope :unitpay do
|
83
|
+
get :success, to: 'unitpay#success'
|
84
|
+
get :fail, to: 'unitpay#fail'
|
85
|
+
get :notify, to: 'unitpay#notify'
|
86
|
+
end
|
87
|
+
```
|
88
|
+
|
89
|
+
Создайте `app/controllers/unitpay_controller.rb` со следующим кодом:
|
90
|
+
|
91
|
+
```ruby
|
92
|
+
class UnitpayController < ApplicationController
|
93
|
+
include Unitpay::Controller
|
94
|
+
|
95
|
+
def success
|
96
|
+
# вызывается при отправке шлюзом пользователя на Success URL.
|
97
|
+
#
|
98
|
+
# ВНИМАНИЕ: является незащищенным действием!
|
99
|
+
# Для выполнения действий после успешной оплаты используйте pay
|
100
|
+
end
|
101
|
+
|
102
|
+
def fail
|
103
|
+
# вызывается при отправке шлюзом пользователя на Fail URL.
|
104
|
+
# (во время принятия платежа возникла ошибка)
|
105
|
+
end
|
106
|
+
|
107
|
+
def pay
|
108
|
+
# вызывается при оповещении магазина об
|
109
|
+
# успешной оплате пользователем заказа и после проверки сигнатуры.
|
110
|
+
#
|
111
|
+
# ВНИМАНИЕ: правильный ответ будет сгенерирован автоматически (не нужно использовать render\redirect_to)!
|
112
|
+
# order = Order.find(params[:params][:account])
|
113
|
+
# order.payed!
|
114
|
+
end
|
115
|
+
|
116
|
+
def error
|
117
|
+
# вызывается при оповещении магазина об ошибке при оплате заказа.
|
118
|
+
#
|
119
|
+
# ВНИМАНИЕ: правильный ответ будет сгенерирован автоматически (не нужно использовать render\redirect_to)!
|
120
|
+
# order = Order.find(params[:params][:account])
|
121
|
+
# order.error!
|
122
|
+
end
|
123
|
+
|
124
|
+
private
|
125
|
+
|
126
|
+
def service
|
127
|
+
# ВНИМАНИЕ: обязательный метод! Используется при проверке сигнатуры.
|
128
|
+
Unitpay::Service.new('unitpay_public_key', 'unitpay_secret_key')
|
129
|
+
end
|
130
|
+
end
|
131
|
+
```
|
26
132
|
|
27
|
-
|
133
|
+
###<a name="widget"></a> Подключение виджета для карт оплаты
|
28
134
|
|
29
|
-
|
135
|
+
Рассмотрим один из способов реализации случая, когда необходимо показать виджет оплаты после заполнения пользователем формы заказа.
|
30
136
|
|
31
|
-
|
137
|
+
1. Подключите на странице внешний скрипт:
|
138
|
+
|
139
|
+
```html
|
140
|
+
<script src="https://widget.unitpay.ru/unitpay.js"></script>
|
141
|
+
```
|
142
|
+
|
143
|
+
2. Добавьте обработчик формы заказа
|
144
|
+
|
145
|
+
**unitpay.js.coffe**
|
146
|
+
```coffee
|
147
|
+
class Unitpay
|
148
|
+
bindEvents: ->
|
149
|
+
@handleAfterSubmitForm()
|
150
|
+
|
151
|
+
handleAfterSubmitForm: ->
|
152
|
+
$('#id-your-form').submit (e) ->
|
153
|
+
e.preventDefault()
|
154
|
+
tryUnitpay() # при сабмите формы пытаемся получить параметры для виджета
|
155
|
+
|
156
|
+
tryUnitpay = ->
|
157
|
+
$.ajax({
|
158
|
+
type: 'POST',
|
159
|
+
dataType: 'json'
|
160
|
+
url: '/orders' # любой другой путь сохранения\создания вашего платежа (заказа). Не забудьте добавить его в routes.rb
|
161
|
+
data: $('#id-your-form').serialize(),
|
162
|
+
success: (data) ->
|
163
|
+
payment = new UnitPay()
|
164
|
+
payment.createWidget(data)
|
165
|
+
payment.success ->
|
166
|
+
console.log('Unitpay: успешный платеж')
|
167
|
+
payment.error ->
|
168
|
+
# ошибка платежного шлюза (например, пользователь не завершил оплату)
|
169
|
+
console.log('Unitpay: ошибка платежа')
|
170
|
+
error: ->
|
171
|
+
# ошибка при сохранении заказа (например, ошибки валидации)
|
172
|
+
console.log('Ошибка сохранения\создания платежа (заказа)')
|
173
|
+
})
|
174
|
+
$ ->
|
175
|
+
unitpay = new Unitpay
|
176
|
+
unitpay.bindEvents()
|
177
|
+
|
178
|
+
```
|
179
|
+
|
180
|
+
3. Измените контроллер так, чтобы он отдавал необходимый `json` ответ
|
181
|
+
|
182
|
+
**orders_controller.rb**
|
183
|
+
```ruby
|
184
|
+
class OrdersController < ApplicationController
|
185
|
+
def create
|
186
|
+
order = Order.new(permitted_params)
|
187
|
+
if order.save
|
188
|
+
render json: unitpay_service.params_for_widget(order.total_cost, order.id, order.description)
|
189
|
+
else
|
190
|
+
render json: order.errors, status: :unprocessable_entity
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
private
|
195
|
+
|
196
|
+
def unitpay_service
|
197
|
+
# Внимание: не храните ключи в открытом виде в репозитории.
|
198
|
+
# используйте конфигурационные файлы (https://github.com/binarylogic/settingslogic)
|
199
|
+
Unitpay::Service.new('public_key', 'secret_key')
|
200
|
+
end
|
201
|
+
|
202
|
+
def permitted_params
|
203
|
+
# используйте strong params
|
204
|
+
end
|
205
|
+
end
|
32
206
|
|
33
207
|
## Contributing
|
34
208
|
|
35
|
-
1. Fork it ( https://github.com/
|
209
|
+
1. Fork it ( https://github.com/ssnikolay/unitpay/fork )
|
36
210
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
37
211
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
38
212
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/lib/unitpay/version.rb
CHANGED
data/unitpay.gemspec
CHANGED
@@ -19,10 +19,11 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
20
|
spec.require_paths = ['lib']
|
21
21
|
|
22
|
-
spec.add_development_dependency 'bundler', '~> 1.
|
22
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
23
23
|
spec.add_development_dependency 'rake', '~> 10.0'
|
24
24
|
|
25
25
|
spec.add_development_dependency 'pry'
|
26
26
|
spec.add_development_dependency 'rspec'
|
27
27
|
spec.add_development_dependency 'rspec-its'
|
28
|
+
spec.add_development_dependency 'codeclimate-test-reporter'
|
28
29
|
end
|
data/unitpay.jpg
ADDED
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: unitpay
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.1'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ssnikolay
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: '1.
|
19
|
+
version: '1.6'
|
20
20
|
type: :development
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: '1.
|
26
|
+
version: '1.6'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: codeclimate-test-reporter
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
description: Gem для подключения к платежной системе unitpay.ru
|
84
98
|
email:
|
85
99
|
- ssnikolay@gmail.com
|
@@ -102,6 +116,7 @@ files:
|
|
102
116
|
- lib/unitpay/service.rb
|
103
117
|
- lib/unitpay/version.rb
|
104
118
|
- unitpay.gemspec
|
119
|
+
- unitpay.jpg
|
105
120
|
homepage: https://github.com/ssnikolay/unitpay
|
106
121
|
licenses:
|
107
122
|
- MIT
|