active_merchant_payline 0.2.14 → 0.3.0
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.
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/active_merchant_payline.gemspec +11 -6
- data/lib/active_merchant_payline/integration/lib/request.rb +13 -0
- data/lib/active_merchant_payline/integration/lib/response.rb +15 -0
- data/lib/active_merchant_payline/integration/lib/web_payment_request.rb +125 -0
- data/lib/active_merchant_payline/integration/lib/web_payment_response.rb +3 -5
- data/lib/active_merchant_payline/integration/payline.rb +35 -7
- metadata +25 -8
- data/lib/active_merchant_payline/integration/lib/web_payment.rb +0 -104
data/Rakefile
CHANGED
@@ -11,7 +11,8 @@ begin
|
|
11
11
|
gem.homepage = "http://github.com/scrumers/active_merchant_payline"
|
12
12
|
gem.authors = ["Ludovic Galabru"]
|
13
13
|
gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
14
|
-
gem.add_dependency 'activemerchant', '
|
14
|
+
gem.add_dependency 'activemerchant', '1.9.0'
|
15
|
+
gem.add_dependency 'typhoeus', '0.1.31'
|
15
16
|
gem.add_dependency 'builder'
|
16
17
|
end
|
17
18
|
Jeweler::GemcutterTasks.new
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{active_merchant_payline}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.3.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Ludovic Galabru"]
|
12
|
-
s.date = %q{2010-11-
|
12
|
+
s.date = %q{2010-11-09}
|
13
13
|
s.description = %q{A plugin for Payline support in Active Merchant.}
|
14
14
|
s.email = %q{ludovic@scrumers.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,8 +28,10 @@ Gem::Specification.new do |s|
|
|
28
28
|
"lib/active_merchant_payline.rb",
|
29
29
|
"lib/active_merchant_payline/gateway/payline.rb",
|
30
30
|
"lib/active_merchant_payline/integration/lib/notification.rb",
|
31
|
+
"lib/active_merchant_payline/integration/lib/request.rb",
|
32
|
+
"lib/active_merchant_payline/integration/lib/response.rb",
|
31
33
|
"lib/active_merchant_payline/integration/lib/return.rb",
|
32
|
-
"lib/active_merchant_payline/integration/lib/
|
34
|
+
"lib/active_merchant_payline/integration/lib/web_payment_request.rb",
|
33
35
|
"lib/active_merchant_payline/integration/lib/web_payment_response.rb",
|
34
36
|
"lib/active_merchant_payline/integration/payline.rb",
|
35
37
|
"test/helper.rb",
|
@@ -51,16 +53,19 @@ Gem::Specification.new do |s|
|
|
51
53
|
|
52
54
|
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
53
55
|
s.add_development_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
54
|
-
s.add_runtime_dependency(%q<activemerchant>, ["
|
56
|
+
s.add_runtime_dependency(%q<activemerchant>, ["= 1.9.0"])
|
57
|
+
s.add_runtime_dependency(%q<typhoeus>, ["= 0.1.31"])
|
55
58
|
s.add_runtime_dependency(%q<builder>, [">= 0"])
|
56
59
|
else
|
57
60
|
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
58
|
-
s.add_dependency(%q<activemerchant>, ["
|
61
|
+
s.add_dependency(%q<activemerchant>, ["= 1.9.0"])
|
62
|
+
s.add_dependency(%q<typhoeus>, ["= 0.1.31"])
|
59
63
|
s.add_dependency(%q<builder>, [">= 0"])
|
60
64
|
end
|
61
65
|
else
|
62
66
|
s.add_dependency(%q<thoughtbot-shoulda>, [">= 0"])
|
63
|
-
s.add_dependency(%q<activemerchant>, ["
|
67
|
+
s.add_dependency(%q<activemerchant>, ["= 1.9.0"])
|
68
|
+
s.add_dependency(%q<typhoeus>, ["= 0.1.31"])
|
64
69
|
s.add_dependency(%q<builder>, [">= 0"])
|
65
70
|
end
|
66
71
|
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
module ActiveMerchant #:nodoc:
|
2
|
+
module Billing #:nodoc:
|
3
|
+
module Integrations #:nodoc:
|
4
|
+
module Payline
|
5
|
+
class WebPaymentRequest
|
6
|
+
#merchant_id, merchant_key, contract, return_url, amount
|
7
|
+
attr_accessor :options
|
8
|
+
|
9
|
+
def initialize(options = {})
|
10
|
+
self.options= options
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_xml
|
14
|
+
xml= Builder::XmlMarkup.new
|
15
|
+
xml.instruct!
|
16
|
+
xmlns= {
|
17
|
+
'xmlns:soapenv' => 'http://schemas.xmlsoap.org/soap/envelope/',
|
18
|
+
'xmlns:impl' => 'http://impl.ws.payline.experian.com',
|
19
|
+
'xmlns:obj' => 'http://obj.ws.payline.experian.com'
|
20
|
+
}
|
21
|
+
|
22
|
+
xml.soapenv :Envelope, xmlns do
|
23
|
+
xml.soapenv :Header do
|
24
|
+
end
|
25
|
+
xml.soapenv :Body do
|
26
|
+
do_web_payment_envelope xml
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
xml.target!
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
def do_web_payment_envelope(xml)
|
35
|
+
xml.impl :doWebPaymentRequest do
|
36
|
+
xml.impl :securityMode, 'SSL'
|
37
|
+
xml.impl :languageCode
|
38
|
+
xml.impl :customPaymentPageCode
|
39
|
+
|
40
|
+
add_urls_to xml
|
41
|
+
add_payment_to xml
|
42
|
+
add_order_to xml
|
43
|
+
add_contract_to xml
|
44
|
+
add_buyer_to xml
|
45
|
+
end
|
46
|
+
xml
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
def add_urls_to(xml)
|
51
|
+
xml.impl :returnURL, ''
|
52
|
+
xml.impl :cancelURL, ''
|
53
|
+
xml.impl :notificationURL, ''
|
54
|
+
xml.impl :customPaymentTemplateURL, ''
|
55
|
+
xml
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
def add_payment_to(xml)
|
60
|
+
xml.impl :payment do
|
61
|
+
xml.obj :amount, ''
|
62
|
+
xml.obj :currency, ''
|
63
|
+
xml.obj :action, ''
|
64
|
+
xml.obj :mode, ''
|
65
|
+
xml.obj :contractNumber, ''
|
66
|
+
xml.obj :differedActionDate, ''
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
private
|
71
|
+
def add_order_to(xml)
|
72
|
+
xml.impl :order do
|
73
|
+
xml.obj :ref, ''
|
74
|
+
xml.obj :origin, ''
|
75
|
+
xml.obj :country, ''
|
76
|
+
xml.obj :taxes, ''
|
77
|
+
xml.obj :amount, ''
|
78
|
+
xml.obj :currency, ''
|
79
|
+
xml.obj :date, ''
|
80
|
+
xml.obj :details do
|
81
|
+
xml.obj :details do
|
82
|
+
xml.obj :ref, ''
|
83
|
+
xml.obj :price, ''
|
84
|
+
xml.obj :quantity, ''
|
85
|
+
xml.obj :comment, ''
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
private
|
92
|
+
def add_contract_to(xml)
|
93
|
+
xml.impl :selectedContractList do
|
94
|
+
xml.obj :selectedContract, ''
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
private
|
99
|
+
def add_buyer_to(xml)
|
100
|
+
xml.impl :buyer do
|
101
|
+
xml.obj :lastName, ''
|
102
|
+
xml.obj :firstName, ''
|
103
|
+
xml.obj :email, ''
|
104
|
+
xml.obj :accountCreateDate, ''
|
105
|
+
xml.obj :accountAverageAmount, ''
|
106
|
+
xml.obj :accountOrderCount, ''
|
107
|
+
xml.obj :ip, ''
|
108
|
+
xml.obj :shippingAdress do
|
109
|
+
xml.obj :name, ''
|
110
|
+
xml.obj :street1, ''
|
111
|
+
xml.obj :street2, ''
|
112
|
+
xml.obj :cityName, ''
|
113
|
+
xml.obj :zipCode, ''
|
114
|
+
xml.obj :country, ''
|
115
|
+
xml.obj :phone, ''
|
116
|
+
end
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
end
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
|
@@ -1,12 +1,14 @@
|
|
1
|
+
require 'typhoeus'
|
2
|
+
|
1
3
|
module ActiveMerchant
|
2
4
|
module Billing
|
3
5
|
module Integrations
|
4
6
|
module Payline
|
5
7
|
autoload :Return, File.dirname(__FILE__) + '/lib/return.rb'
|
6
8
|
autoload :Notification, File.dirname(__FILE__) + '/lib/notification.rb'
|
7
|
-
autoload :
|
9
|
+
autoload :WebPaymentRequest, File.dirname(__FILE__) + '/lib/web_payment_request.rb'
|
8
10
|
autoload :WebPaymentResponse, File.dirname(__FILE__) + '/lib/web_payment_response.rb'
|
9
|
-
|
11
|
+
|
10
12
|
# Overwrite this if you want to change the Payline homologation url
|
11
13
|
mattr_accessor :homologation_url
|
12
14
|
self.homologation_url= 'homologation.payline.com'
|
@@ -14,15 +16,18 @@ module ActiveMerchant
|
|
14
16
|
# Overwrite this if you want to change the Payline production url
|
15
17
|
mattr_accessor :production_url
|
16
18
|
self.production_url= 'services.payline.com'
|
17
|
-
|
18
|
-
mattr_accessor :
|
19
|
-
self.
|
19
|
+
|
20
|
+
mattr_accessor :service_path
|
21
|
+
self.service_path= '/V4/services/WebPaymentAPI'
|
22
|
+
|
23
|
+
mattr_accessor :config
|
24
|
+
self.config= {}
|
20
25
|
|
21
26
|
def self.service_url
|
22
27
|
mode = ActiveMerchant::Billing::Base.integration_mode
|
23
28
|
case mode
|
24
29
|
when :production
|
25
|
-
self.production_url
|
30
|
+
self.production_url
|
26
31
|
when :test
|
27
32
|
self.homologation_url
|
28
33
|
else
|
@@ -35,9 +40,32 @@ module ActiveMerchant
|
|
35
40
|
end
|
36
41
|
|
37
42
|
def self.authorize(options = {})
|
43
|
+
soap_request= WebPaymentRequest.new(options)
|
44
|
+
|
45
|
+
merchant= self.config[:merchant]
|
46
|
+
unless merchant == nil
|
47
|
+
merchant_id= merchant[:id]
|
48
|
+
merchant_access_key= merchant[:access_key]
|
49
|
+
end
|
50
|
+
|
51
|
+
#Typhoeus can be replaced by 'net/https', but literraly 10x faster.
|
52
|
+
response = Typhoeus::Request.post(
|
53
|
+
"https://#{self.homologation_url}#{self.service_path}",
|
54
|
+
:headers => {
|
55
|
+
'Content-Type' => nil,
|
56
|
+
'Accept-Encoding' => nil
|
57
|
+
},
|
58
|
+
:username => merchant_id,
|
59
|
+
:password => merchant_access_key,
|
60
|
+
:method => :basic,
|
61
|
+
:user_agent => 'Scrumers - Authorization',
|
62
|
+
:body => soap_request.to_xml,
|
63
|
+
:verbose => 1
|
64
|
+
)
|
38
65
|
WebPaymentResponse.new(
|
39
|
-
|
66
|
+
response.body
|
40
67
|
)
|
68
|
+
response
|
41
69
|
end
|
42
70
|
|
43
71
|
def self.payment_details
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 3
|
8
|
+
- 0
|
9
|
+
version: 0.3.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Ludovic Galabru
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-11-
|
17
|
+
date: 2010-11-09 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -36,7 +36,7 @@ dependencies:
|
|
36
36
|
requirement: &id002 !ruby/object:Gem::Requirement
|
37
37
|
none: false
|
38
38
|
requirements:
|
39
|
-
- - "
|
39
|
+
- - "="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
segments:
|
42
42
|
- 1
|
@@ -46,9 +46,24 @@ dependencies:
|
|
46
46
|
type: :runtime
|
47
47
|
version_requirements: *id002
|
48
48
|
- !ruby/object:Gem::Dependency
|
49
|
-
name:
|
49
|
+
name: typhoeus
|
50
50
|
prerelease: false
|
51
51
|
requirement: &id003 !ruby/object:Gem::Requirement
|
52
|
+
none: false
|
53
|
+
requirements:
|
54
|
+
- - "="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
segments:
|
57
|
+
- 0
|
58
|
+
- 1
|
59
|
+
- 31
|
60
|
+
version: 0.1.31
|
61
|
+
type: :runtime
|
62
|
+
version_requirements: *id003
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: builder
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
52
67
|
none: false
|
53
68
|
requirements:
|
54
69
|
- - ">="
|
@@ -57,7 +72,7 @@ dependencies:
|
|
57
72
|
- 0
|
58
73
|
version: "0"
|
59
74
|
type: :runtime
|
60
|
-
version_requirements: *
|
75
|
+
version_requirements: *id004
|
61
76
|
description: A plugin for Payline support in Active Merchant.
|
62
77
|
email: ludovic@scrumers.com
|
63
78
|
executables: []
|
@@ -79,8 +94,10 @@ files:
|
|
79
94
|
- lib/active_merchant_payline.rb
|
80
95
|
- lib/active_merchant_payline/gateway/payline.rb
|
81
96
|
- lib/active_merchant_payline/integration/lib/notification.rb
|
97
|
+
- lib/active_merchant_payline/integration/lib/request.rb
|
98
|
+
- lib/active_merchant_payline/integration/lib/response.rb
|
82
99
|
- lib/active_merchant_payline/integration/lib/return.rb
|
83
|
-
- lib/active_merchant_payline/integration/lib/
|
100
|
+
- lib/active_merchant_payline/integration/lib/web_payment_request.rb
|
84
101
|
- lib/active_merchant_payline/integration/lib/web_payment_response.rb
|
85
102
|
- lib/active_merchant_payline/integration/payline.rb
|
86
103
|
- test/helper.rb
|
@@ -1,104 +0,0 @@
|
|
1
|
-
require 'net/http'
|
2
|
-
require 'net/https'
|
3
|
-
|
4
|
-
module ActiveMerchant #:nodoc:
|
5
|
-
module Billing #:nodoc:
|
6
|
-
module Integrations #:nodoc:
|
7
|
-
module Payline
|
8
|
-
class WebPayment
|
9
|
-
#merchant_id, merchant_key, contract, return_url, amount
|
10
|
-
|
11
|
-
def self.authorize(options = {})
|
12
|
-
xml= Builder::XmlMarkup.new
|
13
|
-
xml.instruct!
|
14
|
-
xmlns= {
|
15
|
-
'xmlns:soapenv' => 'http://schemas.xmlsoap.org/soap/envelope/',
|
16
|
-
'xmlns:impl' => 'http://impl.ws.payline.experian.com',
|
17
|
-
'xmlns:obj' => 'http://obj.ws.payline.experian.com'
|
18
|
-
}
|
19
|
-
xml.tag! "soapenv:Envelope", xmlns do
|
20
|
-
xml.tag! "soapenv:Header"
|
21
|
-
xml.tag! "soapenv:Body" do
|
22
|
-
do_web_payment_envelope(xml)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
Net::HTTP.start('homologation.payline.com', 443) do |http|
|
27
|
-
http.use_ssl= true
|
28
|
-
path= 'V4/services/DirectPaymentAPI'
|
29
|
-
data= xml.target!
|
30
|
-
response = http.post(path, data)
|
31
|
-
end
|
32
|
-
response
|
33
|
-
end
|
34
|
-
|
35
|
-
private
|
36
|
-
def do_web_payment_envelope(xml, options = {})
|
37
|
-
xml.tag! 'impl:doWebPaymentRequest' do
|
38
|
-
xml.tag! 'impl:securityMode' do
|
39
|
-
xml.text! 'SSL'
|
40
|
-
end
|
41
|
-
xml.tag! 'impl:languageCode'
|
42
|
-
xml.tag! 'impl:customPaymentPageCode' do
|
43
|
-
|
44
|
-
end
|
45
|
-
add_urls(xml)
|
46
|
-
add_payment(xml)
|
47
|
-
add_order(xml)
|
48
|
-
add_contract(xml)
|
49
|
-
add_buyer(xml)
|
50
|
-
end
|
51
|
-
xml
|
52
|
-
end
|
53
|
-
|
54
|
-
private
|
55
|
-
def add_urls(xml, options = {})
|
56
|
-
xml.tag! 'impl:returnURL' do
|
57
|
-
|
58
|
-
end
|
59
|
-
xml.tag! 'impl:cancelURL' do
|
60
|
-
|
61
|
-
end
|
62
|
-
xml.tag! 'impl:notificationURL' do
|
63
|
-
|
64
|
-
end
|
65
|
-
xml.tag! 'impl:customPaymentTemplateURL' do
|
66
|
-
|
67
|
-
end
|
68
|
-
xml
|
69
|
-
end
|
70
|
-
|
71
|
-
private
|
72
|
-
def add_payment(xml, options = {})
|
73
|
-
xml.tag! 'impl:payment' do
|
74
|
-
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
private
|
79
|
-
def add_order(xml, options = {})
|
80
|
-
xml.tag! 'impl:order' do
|
81
|
-
|
82
|
-
end
|
83
|
-
end
|
84
|
-
|
85
|
-
private
|
86
|
-
def add_contract(xml, options = {})
|
87
|
-
xml.tag! 'impl:contract' do
|
88
|
-
|
89
|
-
end
|
90
|
-
end
|
91
|
-
|
92
|
-
private
|
93
|
-
def add_buyer(xml, options = {})
|
94
|
-
xml.tag! 'impl:buyer' do
|
95
|
-
|
96
|
-
end
|
97
|
-
end
|
98
|
-
|
99
|
-
end
|
100
|
-
end
|
101
|
-
end
|
102
|
-
end
|
103
|
-
end
|
104
|
-
|