killbill-paypal-express 4.0.0 → 4.1.0

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: 57d1cac0516faf51d00c0ce21bf204ce090981dd
4
- data.tar.gz: 987beb06dc7c106c29338ed874588a820875ac49
3
+ metadata.gz: bc4531efe4c6f7825ed1d9a3dd3fd2b8e9f2ccb6
4
+ data.tar.gz: 1a3dab60dedf1ca4f9c8e17beb1f3be748cc71f9
5
5
  SHA512:
6
- metadata.gz: c60577d1f8c7bbfae4d8f26285f9dca40d0debe93fb8f8abc6a4a50983a201d2643c227ce5e97e9664344335af3ea03051fa5861cd46aac80745301d78fa4d14
7
- data.tar.gz: 17c18b4d35b798beac5e7f1cae35774d4df13ab1c9eb6a6c41d7f4f47e8eef6e987277e7c5321af27a70aa5baf81a4e38bf1e53442cfe9068d078d386443c4a4
6
+ metadata.gz: adb0c1956db0e87054266415ae29824e70f88d442769fc6b7c30c8e6a037b570f4fa51c0fad29db8bdcb346fd5b1f17dc8541d6a2aa5c7b8184c5f665ca1b469
7
+ data.tar.gz: 4d77f05cc11ade49b059c96ecd0479eccc5c36d26d9b93113fe0935a1639e9ce95b6805e0ede6bafc443cbed73dcac1a3144c3fb2dda4b974eb0ae15c9ce0288
data/Gemfile.lock CHANGED
@@ -1,14 +1,14 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- killbill-paypal-express (4.0.0)
4
+ killbill-paypal-express (4.1.0)
5
5
  actionpack (~> 4.1.0)
6
6
  actionview (~> 4.1.0)
7
7
  activemerchant (~> 1.53.0)
8
8
  activerecord (~> 4.1.0)
9
9
  activerecord-bogacs (~> 0.3)
10
- activerecord-jdbc-adapter (~> 1.3)
11
- jruby-openssl (~> 0.9.6)
10
+ activerecord-jdbc-adapter (~> 1.3, < 1.5)
11
+ jruby-openssl (~> 0.9.11)
12
12
  killbill (~> 7.0)
13
13
  monetize (~> 1.1.0)
14
14
  money (~> 6.5.1)
@@ -19,13 +19,13 @@ PATH
19
19
  GEM
20
20
  remote: https://rubygems.org/
21
21
  specs:
22
- actionpack (4.1.14)
23
- actionview (= 4.1.14)
24
- activesupport (= 4.1.14)
22
+ actionpack (4.1.14.1)
23
+ actionview (= 4.1.14.1)
24
+ activesupport (= 4.1.14.1)
25
25
  rack (~> 1.5.2)
26
26
  rack-test (~> 0.6.2)
27
- actionview (4.1.14)
28
- activesupport (= 4.1.14)
27
+ actionview (4.1.14.1)
28
+ activesupport (= 4.1.14.1)
29
29
  builder (~> 3.1)
30
30
  erubis (~> 2.7.0)
31
31
  active_utils (3.0.0)
@@ -36,17 +36,17 @@ GEM
36
36
  builder (>= 2.1.2, < 4.0.0)
37
37
  i18n (>= 0.6.9)
38
38
  nokogiri (~> 1.4)
39
- activemodel (4.1.14)
40
- activesupport (= 4.1.14)
39
+ activemodel (4.1.14.1)
40
+ activesupport (= 4.1.14.1)
41
41
  builder (~> 3.1)
42
- activerecord (4.1.14)
43
- activemodel (= 4.1.14)
44
- activesupport (= 4.1.14)
42
+ activerecord (4.1.14.1)
43
+ activemodel (= 4.1.14.1)
44
+ activesupport (= 4.1.14.1)
45
45
  arel (~> 5.0.0)
46
46
  activerecord-bogacs (0.4.1)
47
47
  activerecord-jdbc-adapter (1.3.19)
48
48
  activerecord (>= 2.2)
49
- activesupport (4.1.14)
49
+ activesupport (4.1.14.1)
50
50
  i18n (~> 0.6, >= 0.6.9)
51
51
  json (~> 1.7, >= 1.7.7)
52
52
  minitest (~> 5.1)
@@ -65,8 +65,9 @@ GEM
65
65
  diff-lcs (1.1.3)
66
66
  equalizer (0.0.11)
67
67
  erubis (2.7.0)
68
- ethon (0.8.0)
68
+ ethon (0.8.1)
69
69
  ffi (>= 1.3.0)
70
+ ffi (1.9.10)
70
71
  ffi (1.9.10-java)
71
72
  i18n (0.7.0)
72
73
  ice_nine (0.11.1)
@@ -77,22 +78,27 @@ GEM
77
78
  maven-tools (~> 1.0.10)
78
79
  ruby-maven (~> 3.3, >= 3.3.3)
79
80
  jdbc-mariadb (1.2.3)
81
+ jdbc-postgres (9.4.1206)
80
82
  jdbc-sqlite3 (3.8.11.2)
81
- jruby-openssl (0.9.12-java)
83
+ jruby-openssl (0.9.15-java)
84
+ json (1.8.3)
82
85
  json (1.8.3-java)
83
- killbill (7.0.0)
86
+ killbill (7.0.2)
84
87
  rack (>= 1.5.2)
85
88
  sinatra (~> 1.3.4)
86
89
  typhoeus (~> 0.6.9)
87
90
  tzinfo (~> 1.2.0)
88
91
  maven-tools (1.0.13)
89
92
  virtus (~> 1.0)
90
- minitest (5.8.3)
93
+ mini_portile2 (2.0.0)
94
+ minitest (5.8.4)
91
95
  monetize (1.1.0)
92
96
  money (~> 6.5.0)
93
97
  money (6.5.1)
94
98
  i18n (>= 0.6.4, <= 0.7.0)
95
- nokogiri (1.6.7.1-java)
99
+ nokogiri (1.6.7.2)
100
+ mini_portile2 (~> 2.0.0.rc2)
101
+ nokogiri (1.6.7.2-java)
96
102
  offsite_payments (2.1.0)
97
103
  actionpack (>= 3.2.20, < 5.0.0)
98
104
  active_utils (~> 3.0.0)
@@ -122,6 +128,7 @@ GEM
122
128
  rack (~> 1.4)
123
129
  rack-protection (~> 1.3)
124
130
  tilt (~> 1.3, >= 1.3.3)
131
+ thread_safe (0.3.5)
125
132
  thread_safe (0.3.5-java)
126
133
  tilt (1.4.1)
127
134
  typhoeus (0.6.9)
@@ -136,10 +143,12 @@ GEM
136
143
 
137
144
  PLATFORMS
138
145
  java
146
+ ruby
139
147
 
140
148
  DEPENDENCIES
141
149
  jbundler (~> 0.9.2)
142
150
  jdbc-mariadb (~> 1.1)
151
+ jdbc-postgres (~> 9.4)
143
152
  jdbc-sqlite3 (~> 3.7)
144
153
  killbill-paypal-express!
145
154
  rake (>= 10.0.0)
data/Jarfile.lock CHANGED
@@ -1,63 +1,63 @@
1
1
  ---
2
2
  :runtime:
3
- - io.dropwizard.metrics:metrics-core:jar:3.1.1
4
- - org.kill-bill.billing.plugin:killbill-plugin-api-catalog:jar:0.18
5
- - com.fasterxml.jackson.core:jackson-core:jar:2.4.3
3
+ - org.bouncycastle:bcprov-jdk15on:jar:1.50
4
+ - org.bouncycastle:bcpkix-jdk15on:jar:1.50
5
+ - org.apache.shiro:shiro-core:jar:1.2.3
6
6
  - joda-time:joda-time:jar:2.3
7
- - org.weakref:jmxutils:jar:1.18
8
- - org.kill-bill.billing.plugin:killbill-plugin-api-notification:jar:0.18
9
- - commons-beanutils:commons-beanutils:jar:1.8.3
10
- - org.kill-bill.billing:killbill-internal-api:jar:0.15.10
11
- - org.kill-bill.commons:killbill-xmlloader:jar:0.11
12
- - org.kill-bill.billing.plugin:killbill-plugin-api-entitlement:jar:0.18
13
- - com.google.inject:guice:jar:3.0
7
+ - net.sf.ehcache:ehcache:jar:2.9.1
8
+ - aopalliance:aopalliance:jar:1.0
9
+ - com.google.code.findbugs:annotations:jar:3.0.0
14
10
  - org.osgi:org.osgi.core:jar:5.0.0
11
+ - org.kill-bill.commons:killbill-concurrent:jar:0.11
15
12
  - org.slf4j:slf4j-api:jar:1.7.12
16
- - com.samskivert:jmustache:jar:1.5
17
- - org.kill-bill.billing:killbill-util:jar:tests:0.15.10
18
- - org.kill-bill.billing.plugin:killbill-plugin-api-currency:jar:0.18
19
- - org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:jar:1.16
20
- - com.h2database:h2:jar:1.4.186
21
- - javax.activation:activation:jar:1.1
22
- - org.skife.config:config-magic:jar:0.14
23
- - com.fasterxml.jackson.dataformat:jackson-dataformat-csv:jar:2.4.3
24
- - org.kill-bill.billing.plugin:killbill-plugin-api-control:jar:0.18
13
+ - org.kill-bill.commons:killbill-xmlloader:jar:0.11
14
+ - org.apache.shiro:shiro-guice:jar:1.2.3
15
+ - org.slf4j:jcl-over-slf4j:jar:1.7.12
16
+ - org.kill-bill.billing.plugin:killbill-plugin-api-invoice:jar:0.18
25
17
  - org.apache.commons:commons-email:jar:1.2
26
- - org.mockito:mockito-all:jar:1.10.19
18
+ - org.skife.config:config-magic:jar:0.14
27
19
  - antlr:antlr:jar:2.7.7
28
- - aopalliance:aopalliance:jar:1.0
29
- - com.fasterxml.jackson.core:jackson-annotations:jar:2.4.3
30
20
  - org.antlr:stringtemplate:jar:3.2.1
21
+ - org.apache.shiro:shiro-ehcache:jar:1.2.3
22
+ - org.joda:joda-money:jar:0.9
23
+ - org.jdbi:jdbi:jar:2.62
24
+ - com.fasterxml.jackson.core:jackson-annotations:jar:2.4.3
25
+ - com.fasterxml.jackson.dataformat:jackson-dataformat-csv:jar:2.4.3
26
+ - com.google.inject:guice:jar:3.0
27
+ - org.kill-bill.billing.plugin:killbill-plugin-api-currency:jar:0.18
28
+ - com.fasterxml.jackson.core:jackson-databind:jar:2.4.3
29
+ - org.apache.felix:org.apache.felix.framework:jar:4.4.1
30
+ - org.kill-bill.billing:killbill-platform-osgi:jar:0.15
31
+ - com.samskivert:jmustache:jar:1.5
32
+ - org.kill-bill.billing.plugin:killbill-plugin-api-notification:jar:0.18
33
+ - com.h2database:h2:jar:1.4.186
31
34
  - org.kill-bill.commons:killbill-clock:jar:0.11
32
- - javax.mail:mail:jar:1.4.1
35
+ - org.kill-bill.billing:killbill-internal-api:jar:0.15.10
36
+ - org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:jar:1.16
37
+ - com.fasterxml.jackson.datatype:jackson-datatype-joda:jar:2.4.3
33
38
  - org.kill-bill.billing:killbill-platform-base:jar:0.15
34
- - io.dropwizard.metrics:metrics-ehcache:jar:3.1.1
35
- - org.slf4j:jcl-over-slf4j:jar:1.7.12
36
- - org.jdbi:jdbi:jar:2.62
39
+ - com.fasterxml.jackson.core:jackson-core:jar:2.4.3
40
+ - com.google.guava:guava:jar:r09
41
+ - org.kill-bill.billing.plugin:killbill-plugin-api-entitlement:jar:0.18
37
42
  - org.kill-bill.billing:killbill-platform-api:jar:0.15
38
- - org.kill-bill.billing:killbill-platform-osgi:jar:0.15
39
- - org.bouncycastle:bcprov-jdk15on:jar:1.50
40
- - org.apache.felix:org.apache.felix.framework:jar:4.4.1
41
- - org.joda:joda-money:jar:0.9
42
- - org.kill-bill.commons:killbill-jdbi:jar:0.11
43
- - org.kill-bill.commons:killbill-embeddeddb-common:jar:0.11
44
- - org.apache.shiro:shiro-core:jar:1.2.3
45
- - org.bouncycastle:bcpkix-jdk15on:jar:1.50
46
- - org.kill-bill.billing:killbill-platform-osgi-api:jar:0.15
43
+ - javax.mail:mail:jar:1.4.1
44
+ - javax.activation:activation:jar:1.1
47
45
  - org.kill-bill.billing.plugin:killbill-plugin-api-payment:jar:0.18
48
- - com.fasterxml.jackson.core:jackson-databind:jar:2.4.3
49
- - com.google.guava:guava:jar:r09
50
46
  - org.kill-bill.commons:killbill-locker:jar:0.11
51
- - org.osgi:org.osgi.compendium:jar:5.0.0
52
- - org.kill-bill.commons:killbill-queue:jar:0.11
53
- - org.kill-bill.commons:killbill-concurrent:jar:0.11
54
- - javax.servlet:javax.servlet-api:jar:3.1.0
55
- - org.apache.shiro:shiro-ehcache:jar:1.2.3
56
- - javax.inject:javax.inject:jar:1
57
- - com.fasterxml.jackson.datatype:jackson-datatype-joda:jar:2.4.3
47
+ - io.dropwizard.metrics:metrics-core:jar:3.1.1
48
+ - org.kill-bill.billing:killbill-platform-osgi-api:jar:0.15
49
+ - org.weakref:jmxutils:jar:1.18
58
50
  - com.google.inject.extensions:guice-multibindings:jar:3.0
59
- - net.sf.ehcache:ehcache:jar:2.9.1
60
- - org.kill-bill.billing.plugin:killbill-plugin-api-invoice:jar:0.18
51
+ - org.kill-bill.billing:killbill-util:jar:tests:0.15.10
52
+ - javax.inject:javax.inject:jar:1
53
+ - commons-beanutils:commons-beanutils:jar:1.8.3
54
+ - org.kill-bill.billing.plugin:killbill-plugin-api-catalog:jar:0.18
55
+ - javax.servlet:javax.servlet-api:jar:3.1.0
61
56
  - org.kill-bill.billing:killbill-api:jar:0.32
62
- - org.apache.shiro:shiro-guice:jar:1.2.3
63
- - com.google.code.findbugs:annotations:jar:3.0.0
57
+ - io.dropwizard.metrics:metrics-ehcache:jar:3.1.1
58
+ - org.kill-bill.billing.plugin:killbill-plugin-api-control:jar:0.18
59
+ - org.kill-bill.commons:killbill-jdbi:jar:0.11
60
+ - org.kill-bill.commons:killbill-embeddeddb-common:jar:0.11
61
+ - org.mockito:mockito-all:jar:1.10.19
62
+ - org.osgi:org.osgi.compendium:jar:5.0.0
63
+ - org.kill-bill.commons:killbill-queue:jar:0.11
data/NEWS CHANGED
@@ -1,3 +1,6 @@
1
+ 4.1.0
2
+ Initial support for HPP flows (one-off payments)
3
+
1
4
  4.0.0
2
5
  Initial release for Kill Bill 0.16.x
3
6
 
data/README.md CHANGED
@@ -47,6 +47,110 @@ To go to production, create a `paypal_express.yml` configuration file under `/va
47
47
  Usage
48
48
  -----
49
49
 
50
+ ### One-off payments
51
+
52
+ Create a payment method for the account:
53
+
54
+ ```
55
+ curl -v \
56
+ -X POST \
57
+ -u admin:password \
58
+ -H 'X-Killbill-ApiKey: bob' \
59
+ -H 'X-Killbill-ApiSecret: lazar' \
60
+ -H 'X-Killbill-CreatedBy: admin' \
61
+ -H 'Content-Type: application/json' \
62
+ -d '{
63
+ "pluginName": "killbill-paypal-express",
64
+ "pluginInfo": {}
65
+ }' \
66
+ "http://127.0.0.1:8080/1.0/kb/accounts/<ACCOUNT_ID>/paymentMethods?isDefault=true"
67
+ ```
68
+
69
+ #### Without a pending payment
70
+
71
+ Generate the redirect URL using buildFormDescriptor (this will invoke `SetExpressCheckout`):
72
+
73
+ ```
74
+ curl -v \
75
+ -X POST \
76
+ -u admin:password \
77
+ -H 'X-Killbill-ApiKey: bob' \
78
+ -H 'X-Killbill-ApiSecret: lazar' \
79
+ -H 'X-Killbill-CreatedBy: admin' \
80
+ -H 'Content-Type: application/json' \
81
+ -d '{
82
+ "formFields": [{
83
+ "key": "amount",
84
+ "value": 10
85
+ },{
86
+ "key": "currency",
87
+ "value": "USD"
88
+ }]
89
+ }' \
90
+ "http://127.0.0.1:8080/1.0/kb/paymentGateways/hosted/form/<ACCOUNT_ID>"
91
+ ```
92
+
93
+ The customer should be redirected to the url specified in the `formUrl` entry of the response, e.g. https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-20G53990M6953444J.
94
+
95
+ Once the customer comes back from the PayPal flow, trigger the payment:
96
+
97
+ ```
98
+ curl -v \
99
+ -X POST \
100
+ -u admin:password \
101
+ -H 'X-Killbill-ApiKey: bob' \
102
+ -H 'X-Killbill-ApiSecret: lazar' \
103
+ -H 'X-Killbill-CreatedBy: admin' \
104
+ -H 'Content-Type: application/json' \
105
+ -d '{
106
+ "transactionType": "PURCHASE",
107
+ "amount": "10",
108
+ "currency": "USD"
109
+ }' \
110
+ "http://127.0.0.1:8080/1.0/kb/accounts/<ACCOUNT_ID>/payments"
111
+ ```
112
+
113
+ #### With a pending payment
114
+
115
+ Generate the redirect URL using buildFormDescriptor (this will invoke `SetExpressCheckout`):
116
+
117
+ ```
118
+ curl -v \
119
+ -X POST \
120
+ -u admin:password \
121
+ -H 'X-Killbill-ApiKey: bob' \
122
+ -H 'X-Killbill-ApiSecret: lazar' \
123
+ -H 'X-Killbill-CreatedBy: admin' \
124
+ -H 'Content-Type: application/json' \
125
+ -d '{
126
+ "formFields": [{
127
+ "key": "amount",
128
+ "value": 10
129
+ },{
130
+ "key": "currency",
131
+ "value": "USD"
132
+ }]
133
+ }' \
134
+ "http://127.0.0.1:8080/1.0/kb/paymentGateways/hosted/form/<ACCOUNT_ID>?pluginProperty=create_pending_payment=true"
135
+ ```
136
+
137
+ The customer should be redirected to the url specified in the `formUrl` entry of the response, e.g. https://www.paypal.com/cgi-bin/webscr?cmd=_express-checkout&token=EC-20G53990M6953444J.
138
+
139
+ Once the customer comes back from the PayPal flow, complete the payment (the payment id and external key are returned as part of the buildFormDescriptor call):
140
+
141
+ ```
142
+ curl -v \
143
+ -X PUT \
144
+ -u admin:password \
145
+ -H 'X-Killbill-ApiKey: bob' \
146
+ -H 'X-Killbill-ApiSecret: lazar' \
147
+ -H 'X-Killbill-CreatedBy: admin' \
148
+ -H 'Content-Type: application/json' \
149
+ "http://127.0.0.1:8080/1.0/kb/payments/<PAYMENT_ID>"
150
+ ```
151
+
152
+ ### Recurring payments via a billing agreement ID (BAID)
153
+
50
154
  Issue the following call to generate a Paypal token:
51
155
 
52
156
  ```
@@ -94,3 +198,22 @@ curl -v \
94
198
  }' \
95
199
  "http://127.0.0.1:8080/1.0/kb/accounts/13d26090-b8d7-11e2-9e96-0800200c9a66/paymentMethods?isDefault=true"
96
200
  ```
201
+
202
+ Plugin properties
203
+ -----------------
204
+
205
+ | Key | Description |
206
+ | ---------------------------: | ----------------------------------------------------------------- |
207
+ | skip_gw | If true, skip the call to PayPal |
208
+ | token | PayPal token to use |
209
+ | payer_id | PayPal Payer id to use |
210
+ | create_pending_payment | Create pending payment during buildFormDescriptor call |
211
+ | payment_processor_account_id | Config entry name of the merchant account to use |
212
+ | external_key_as_order_id | If true, set the payment external key as the PayPal order id |
213
+ | email | Purchaser email |
214
+ | address1 | Billing address first line |
215
+ | address2 | Billing address second line |
216
+ | city | Billing address city |
217
+ | zip | Billing address zip code |
218
+ | state | Billing address state |
219
+ | country | Billing address country |
data/VERSION CHANGED
@@ -1 +1 @@
1
- 4.0.0
1
+ 4.1.0
data/db/ddl.sql CHANGED
@@ -2,7 +2,7 @@ CREATE TABLE `paypal_express_payment_methods` (
2
2
  `id` int(11) NOT NULL AUTO_INCREMENT,
3
3
  `kb_payment_method_id` varchar(255) DEFAULT NULL,
4
4
  `paypal_express_payer_id` varchar(255) DEFAULT NULL,
5
- `paypal_express_token` varchar(255) NOT NULL,
5
+ `paypal_express_token` varchar(255) DEFAULT NULL,
6
6
  `token` varchar(255) DEFAULT NULL,
7
7
  `cc_first_name` varchar(255) DEFAULT NULL,
8
8
  `cc_last_name` varchar(255) DEFAULT NULL,
data/db/schema.rb CHANGED
@@ -1,10 +1,10 @@
1
1
  require 'active_record'
2
2
 
3
- ActiveRecord::Schema.define(:version => 20140410153635) do
3
+ ActiveRecord::Schema.define(:version => 20151008153635) do
4
4
  create_table "paypal_express_payment_methods", :force => true do |t|
5
5
  t.string "kb_payment_method_id" # NULL before Kill Bill knows about it
6
6
  t.string "paypal_express_payer_id" # NULL before the express checkout is completed
7
- t.string "paypal_express_token", :null => false, :unique => true
7
+ t.string "paypal_express_token"
8
8
  t.string "token" # paypal-express baid, NULL before the express checkout is completed
9
9
  t.string "cc_first_name"
10
10
  t.string "cc_last_name"
@@ -29,9 +29,8 @@ Gem::Specification.new do |s|
29
29
  s.add_dependency 'activerecord', '~> 4.1.0'
30
30
  if defined?(JRUBY_VERSION)
31
31
  s.add_dependency 'activerecord-bogacs', '~> 0.3'
32
- s.add_dependency 'activerecord-jdbc-adapter', '~> 1.3'
33
- # Required to avoid errors like java.lang.NoClassDefFoundError: org/bouncycastle/asn1/DERBoolean
34
- s.add_dependency 'jruby-openssl', '~> 0.9.6'
32
+ s.add_dependency 'activerecord-jdbc-adapter', '~> 1.3', '< 1.5'
33
+ s.add_dependency 'jruby-openssl', '~> 0.9.11'
35
34
  end
36
35
  s.add_dependency 'actionpack', '~> 4.1.0'
37
36
  s.add_dependency 'actionview', '~> 4.1.0'
@@ -46,6 +45,7 @@ Gem::Specification.new do |s|
46
45
  if defined?(JRUBY_VERSION)
47
46
  s.add_development_dependency 'jdbc-sqlite3', '~> 3.7'
48
47
  s.add_development_dependency 'jdbc-mariadb', '~> 1.1'
48
+ s.add_development_dependency 'jdbc-postgres', '~> 9.4'
49
49
  else
50
50
  s.add_development_dependency 'sqlite3', '~> 1.3.7'
51
51
  end
@@ -3,6 +3,7 @@ require 'action_controller'
3
3
  require 'active_record'
4
4
  require 'action_view'
5
5
  require 'active_merchant'
6
+ require 'active_merchant/billing/gateways/paypal/paypal_common_api'
6
7
  require 'active_support'
7
8
  require 'bigdecimal'
8
9
  require 'money'
@@ -16,6 +17,8 @@ require 'yaml'
16
17
  require 'killbill'
17
18
  require 'killbill/helpers/active_merchant'
18
19
 
20
+ require 'paypal_express/ext/active_merchant/active_merchant.rb'
21
+
19
22
  require 'paypal_express/api'
20
23
  require 'paypal_express/private_api'
21
24