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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: acfaaf225e410fc5732ed5d3385fd98adcf506ed
4
- data.tar.gz: 16755b706b4e6e6401d83d48dca515c5ee6901b8
3
+ metadata.gz: 30615f1d644e3b6abafaccadef5ae3e1ccd9c23e
4
+ data.tar.gz: e2b1c7945292348d190860ade3265e4419765281
5
5
  SHA512:
6
- metadata.gz: cd50c6d01f2670b9a5883eb8dff649c5f2e404a7b7a980d5a62a65f4f4720217ec30504b2581966c916a0112eba75ecdcb518b66fcd933f096849acf68622415
7
- data.tar.gz: 59973bf3b76a38f870726714a766a546eb00cd7a38cd715ac18faf7615799f7bfca2c6f5816709599efccb69eb6377558752327365ce3040ca4f2722f4c429c0
6
+ metadata.gz: 05fef55f7da174ec1cc2b728724598867a90de330503079ae226a6fd7571eb657115129107718d1e49d74711409166fe7519c68491c07ff56657adbc0b2af659
7
+ data.tar.gz: da7a4f62f1a6d3b4253bc232d053413d62c145a0f3b069fa2ee14dde711c576acc638d6dfbe337d4f2b2c115e6d144f9a5d04fa1437f0e10aac590e7fa9d984a
@@ -1,3 +1,6 @@
1
1
  language: ruby
2
2
  rvm:
3
3
  - 2.1.0
4
+ - 2.2
5
+ script:
6
+ - CODECLIMATE_REPO_TOKEN=ae069f427c5dbd2edc0474f3aace9b12e4d29cae801a1a9a93b22b74b20c7b45 bundle exec rspec
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
- Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/unitpay`. To experiment with that code, run `bin/console` for an interactive prompt.
8
+ Gem для подключения к платежному шлюзу [unitpay](http://unitpay.ru).
9
+
10
+ [Документация к шлюзу](http://help.unitpay.ru/)
4
11
 
5
- TODO: Delete this and the text above, and describe your gem
12
+ - [Установка](#installation)
13
+ - [Подключение](#setup)
14
+ - [Использование](#usage)
15
+ - [Получение ссылки для оплаты](#payment_url)
16
+ - [Модуль для обработки запросов от unitpay (для RubyOnRails)](#rails)
17
+ - [Подключение виджета для карт оплаты](#widget)
6
18
 
7
- ## Installation
19
+ ##<a name="installation"></a> Установка
8
20
 
9
- Add this line to your application's Gemfile:
21
+ Добавьте эти строки в Gemfile вашего приложения:
10
22
 
11
23
  ```ruby
12
24
  gem 'unitpay'
13
25
  ```
14
26
 
15
- And then execute:
27
+ И выполните:
16
28
 
17
29
  $ bundle
18
30
 
19
- Or install it yourself as:
31
+ Или установите напрямую:
20
32
 
21
33
  $ gem install unitpay
22
34
 
23
- ## Usage
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
- TODO: Write usage instructions here
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
- ## Development
133
+ ###<a name="widget"></a> Подключение виджета для карт оплаты
28
134
 
29
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
135
+ Рассмотрим один из способов реализации случая, когда необходимо показать виджет оплаты после заполнения пользователем формы заказа.
30
136
 
31
- To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release` to create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
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/[my-github-username]/unitpay/fork )
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`)
@@ -1,3 +1,3 @@
1
1
  module Unitpay
2
- VERSION = '0.0.4'
2
+ VERSION = '0.1'
3
3
  end
@@ -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.8'
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
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.0.4
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: 2015-12-02 00:00:00.000000000 Z
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.8'
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.8'
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