unitpay 0.0.4 → 0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
[![Gem Version](https://badge.fury.io/rb/unitpay.svg)](https://badge.fury.io/rb/unitpay)
|
2
|
+
[![Build Status](https://travis-ci.org/ssnikolay/unitpay.svg?branch=master)](https://travis-ci.org/ssnikolay/unitpay)
|
3
|
+
[![Code Climate](https://codeclimate.com/github/ssnikolay/unitpay.svg)](https://codeclimate.com/github/ssnikolay/unitpay)
|
4
|
+
[![Test Coverage](https://codeclimate.com/github/ssnikolay/unitpay/badges/coverage.svg)](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
|
+
![Settings](https://raw.github.com/ssnikolay/unitpay/master/unitpay.jpg)
|
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
|