spree_emerchantpay_genesis 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -0
- data/README.md +33 -1
- data/app/controllers/spree/checkout_controller_decorator.rb +88 -0
- data/app/services/spree_emerchantpay_genesis/sources/create_credit_card.rb +1 -0
- data/app/views/spree/checkout/payment/_emerchantpay_direct.html.erb +65 -1
- data/lib/spree_emerchantpay_genesis/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9c220bb96644c56f0979a39ad4e8465ef9560f5e58c45acf36e89faf4dcafb9d
|
4
|
+
data.tar.gz: 42f7abcc36024c096e88a39a072e57d0138aac80decc629a8278d6b1642616d9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fdbeb22309bc146f4cc8c957eda170fb17249afb73f7fc8e544f8d15a6560a5e22d2ed6a4749c8e0e3bdb455b533a5f8400165db6f812b6706f149addb8dbbce
|
7
|
+
data.tar.gz: 774446783c40d05322b15dd9768fda5db2873ccd2b87320ca75eb4cebee3401a2e1759e17e4d28e02ea8b5420d4e656987a20a1522608623a06820bfee73d94d
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,4 +1,10 @@
|
|
1
|
-
|
1
|
+
emerchantpay Genesis Gateway for Spree
|
2
|
+
===========
|
3
|
+
[![Gem Version](https://badge.fury.io/rb/spree_emerchantpay_genesis.svg)](https://badge.fury.io/rb/spree_emerchantpay_genesis)
|
4
|
+
[![Software License](https://img.shields.io/badge/license-MIT-green.svg?style=flat)](LICENSE)
|
5
|
+
|
6
|
+
Overview
|
7
|
+
--------
|
2
8
|
This is a Payment Module for Spree eCommerce that gives you the ability to process payments through emerchantpay's Payment Gateway - Genesis.
|
3
9
|
|
4
10
|
# Requirements
|
@@ -385,6 +391,32 @@ _Note_: If you have trouble with your credentials or terminal configuration, get
|
|
385
391
|
|
386
392
|
`bundle exec appraisal install`
|
387
393
|
|
394
|
+
### Build Demo store
|
395
|
+
Requires [Docker Engine](https://docs.docker.com/engine/install/)
|
396
|
+
|
397
|
+
1. Clone the project
|
398
|
+
2. Create .env file in the project rood based on the .env.example
|
399
|
+
* Set `RAILS_ENV=production`
|
400
|
+
3. Execute inside project root:
|
401
|
+
```shell
|
402
|
+
docker compose up
|
403
|
+
```
|
404
|
+
4. Setup Web Server with reverse proxy configuration
|
405
|
+
|
406
|
+
### Setup plugin for development
|
407
|
+
1. Clone the project
|
408
|
+
2. Create .env file based on the .env.example
|
409
|
+
* Set `RAILS_ENV=development`
|
410
|
+
* Set `PLUGIN_SOURCE=/<local path to the plugin source>`
|
411
|
+
3. Execute inside project root:
|
412
|
+
```shell
|
413
|
+
docker compose -f compose.yaml -f development-compose.yaml up -d
|
414
|
+
```
|
415
|
+
* Optional you can set project name with the -p flag
|
416
|
+
* You can attach to the container and debug with `pry` (`docker attach <container>`).
|
417
|
+
Requires `config.web_console.whitelisted_ips = '<host_ip>'` inside the container (/mnt/spree/config/environments/development.rb)
|
418
|
+
* If you expose the localhost (ex. ngrok) requires `config.hosts.clear` inside the container (/mnt/spree/config/environments/development.rb)
|
419
|
+
|
388
420
|
## License
|
389
421
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/license/mit).
|
390
422
|
|
@@ -0,0 +1,88 @@
|
|
1
|
+
module Spree
|
2
|
+
module CheckoutControllerDecorator
|
3
|
+
|
4
|
+
# Updates the order and advances to the next state (when possible.)
|
5
|
+
def update
|
6
|
+
result = process_emp_direct_payment? ? process_emp_direct_payment : default_payment_processing
|
7
|
+
|
8
|
+
if result
|
9
|
+
@order.temporary_address = !params[:save_user_address]
|
10
|
+
|
11
|
+
order_next
|
12
|
+
|
13
|
+
process_completed_order && return if @order.completed?
|
14
|
+
|
15
|
+
redirect_to spree.checkout_state_path @order.state
|
16
|
+
else
|
17
|
+
render :edit, status: :unprocessable_entity
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
# Default Rails FrontEnd Checkout controller `update` logic
|
24
|
+
def default_payment_processing
|
25
|
+
@order.update_from_params(params, permitted_checkout_attributes, request.headers.env)
|
26
|
+
end
|
27
|
+
|
28
|
+
# Proceed with Spree Order current state execution and move to the next
|
29
|
+
def order_next
|
30
|
+
return if @order.next
|
31
|
+
|
32
|
+
flash[:error] = @order.errors.full_messages.join("\n")
|
33
|
+
end
|
34
|
+
|
35
|
+
# Get payment_method_id from the params
|
36
|
+
def payment_method_id
|
37
|
+
params[:order][:payments_attributes].last[:payment_method_id].presence
|
38
|
+
rescue NoMethodError
|
39
|
+
nil
|
40
|
+
end
|
41
|
+
|
42
|
+
# Handle completed order
|
43
|
+
def process_completed_order
|
44
|
+
redirect_url = nil
|
45
|
+
@current_order = nil
|
46
|
+
flash['order_completed'] = true
|
47
|
+
|
48
|
+
redirect_url = @order.payments.last.private_metadata['redirect_url'] if @order.payments.last.private_metadata
|
49
|
+
|
50
|
+
redirect_to redirect_url || completion_route, allow_other_host: true
|
51
|
+
end
|
52
|
+
|
53
|
+
# Check for Emerchantpay Direct Payment process
|
54
|
+
def process_emp_direct_payment?
|
55
|
+
@order.state == 'payment' && emerchantpay_direct_payment?
|
56
|
+
end
|
57
|
+
|
58
|
+
# Check if the current payment method is Emerchantpay Direct
|
59
|
+
def emerchantpay_direct_payment?
|
60
|
+
return false unless payment_method_id
|
61
|
+
|
62
|
+
payment_method = Spree::PaymentMethod.find(payment_method_id)
|
63
|
+
|
64
|
+
payment_method&.type == Spree::Gateway::EmerchantpayDirect.name
|
65
|
+
end
|
66
|
+
|
67
|
+
# Process Emerchantpay Direct Payment
|
68
|
+
def process_emp_direct_payment
|
69
|
+
result = create_payment_service.call(
|
70
|
+
order: @order,
|
71
|
+
params: {
|
72
|
+
payment_method_id: payment_method_id,
|
73
|
+
source_attributes: params[:payment_source][payment_method_id.to_s.to_sym].presence
|
74
|
+
}
|
75
|
+
)
|
76
|
+
|
77
|
+
result.success?
|
78
|
+
end
|
79
|
+
|
80
|
+
# Spree Storefront Create Payment Service
|
81
|
+
def create_payment_service
|
82
|
+
Spree::Api::Dependencies.storefront_payment_create_service.constantize
|
83
|
+
end
|
84
|
+
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
Spree::CheckoutController.prepend(Spree::CheckoutControllerDecorator)
|
@@ -20,11 +20,57 @@
|
|
20
20
|
</div>
|
21
21
|
|
22
22
|
<input type="hidden" name="payment_source[<%= payment_method.id %>][cc_type]" id="emp_cc_type" value="" class="ccType">
|
23
|
+
<input name="payment_source[<%= payment_method.id %>][accept_header]"
|
24
|
+
type="hidden"
|
25
|
+
id="emp_cc_3dsv2_accept_header"
|
26
|
+
value="*/*"
|
27
|
+
>
|
28
|
+
<input name="payment_source[<%= payment_method.id %>][java_enabled]"
|
29
|
+
type="hidden"
|
30
|
+
id="emp_cc_3dsv2_java_enabled"
|
31
|
+
value=""
|
32
|
+
>
|
33
|
+
<input name="payment_source[<%= payment_method.id %>][language]"
|
34
|
+
type="hidden"
|
35
|
+
id="emp_cc_3dsv2_language"
|
36
|
+
value=""
|
37
|
+
>
|
38
|
+
<input name="payment_source[<%= payment_method.id %>][color_depth]"
|
39
|
+
type="hidden"
|
40
|
+
id="emp_cc_3dsv2_color_depth"
|
41
|
+
value=""
|
42
|
+
>
|
43
|
+
<input name="payment_source[<%= payment_method.id %>][screen_height]"
|
44
|
+
type="hidden"
|
45
|
+
id="emp_cc_3dsv2_screen_height"
|
46
|
+
value=""
|
47
|
+
>
|
48
|
+
<input name="payment_source[<%= payment_method.id %>][screen_width]"
|
49
|
+
type="hidden"
|
50
|
+
id="emp_cc_3dsv2_screen_width"
|
51
|
+
value=""
|
52
|
+
>
|
53
|
+
<input name="payment_source[<%= payment_method.id %>][time_zone_offset]"
|
54
|
+
type="hidden"
|
55
|
+
id="emp_cc_3dsv2_time_zone_offset"
|
56
|
+
value=""
|
57
|
+
>
|
58
|
+
<input name="payment_source[<%= payment_method.id %>][user_agent]"
|
59
|
+
type="hidden"
|
60
|
+
id="emp_cc_3dsv2_user_agent"
|
61
|
+
value=""
|
62
|
+
>
|
63
|
+
|
23
64
|
</div>
|
24
65
|
</div>
|
25
66
|
|
26
67
|
<script type="text/javascript">
|
27
68
|
document.addEventListener("DOMContentLoaded", function(){
|
69
|
+
initBrowserParams()
|
70
|
+
initCreditCard()
|
71
|
+
});
|
72
|
+
|
73
|
+
function initCreditCard() {
|
28
74
|
new Card({
|
29
75
|
form: document.getElementById('checkout_form_payment'),
|
30
76
|
container: '.emerchantpay-card-wrapper',
|
@@ -47,5 +93,23 @@
|
|
47
93
|
cvc: '***'
|
48
94
|
}
|
49
95
|
});
|
50
|
-
}
|
96
|
+
}
|
97
|
+
|
98
|
+
function initBrowserParams() {
|
99
|
+
document.getElementById('emp_cc_3dsv2_java_enabled').value = fetchJavaEnabled()
|
100
|
+
document.getElementById('emp_cc_3dsv2_color_depth').value = screen.colorDepth.toString()
|
101
|
+
document.getElementById('emp_cc_3dsv2_language').value = navigator.language
|
102
|
+
document.getElementById('emp_cc_3dsv2_screen_height').value = screen.height.toString()
|
103
|
+
document.getElementById('emp_cc_3dsv2_screen_width').value = screen.width.toString()
|
104
|
+
document.getElementById('emp_cc_3dsv2_time_zone_offset').value = (new Date()).getTimezoneOffset().toString()
|
105
|
+
document.getElementById('emp_cc_3dsv2_user_agent').value = navigator.userAgent
|
106
|
+
}
|
107
|
+
|
108
|
+
function fetchJavaEnabled() {
|
109
|
+
try {
|
110
|
+
return navigator.javaEnabled();
|
111
|
+
} catch (e) {
|
112
|
+
return false;
|
113
|
+
}
|
114
|
+
}
|
51
115
|
</script>
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_emerchantpay_genesis
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- emerchantpay ltd.
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: genesis_ruby
|
@@ -324,6 +324,7 @@ files:
|
|
324
324
|
- app/controllers/spree/api/v2/storefront/checkout_controller_decorator.rb
|
325
325
|
- app/controllers/spree/api/v2/storefront/emerchantpay_notification_controller.rb
|
326
326
|
- app/controllers/spree/api/v2/storefront/emerchantpay_threeds_controller.rb
|
327
|
+
- app/controllers/spree/checkout_controller_decorator.rb
|
327
328
|
- app/controllers/spree/emerchantpay_threeds_controller.rb
|
328
329
|
- app/helpers/spree/admin/payment_methods_helper.rb
|
329
330
|
- app/helpers/spree_emerchantpay_genesis/mappers/genesis.rb
|
@@ -400,7 +401,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
400
401
|
version: '0'
|
401
402
|
requirements:
|
402
403
|
- none
|
403
|
-
rubygems_version: 3.
|
404
|
+
rubygems_version: 3.4.10
|
404
405
|
signing_key:
|
405
406
|
specification_version: 4
|
406
407
|
summary: emerchantpay Gateway Module for Spree
|