killbill-stripe 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 +4 -4
- data/Gemfile.lock +21 -21
- data/Jarfile +10 -10
- data/Jarfile.lock +55 -55
- data/NEWS +6 -0
- data/README.md +54 -8
- data/VERSION +1 -1
- data/killbill-stripe.gemspec +2 -1
- data/lib/stripe.rb +3 -0
- data/lib/stripe/api.rb +64 -20
- data/lib/stripe/application.rb +32 -6
- data/lib/stripe/ext/active_merchant/active_merchant.rb +42 -0
- data/lib/stripe/models/response.rb +14 -0
- data/lib/stripe/private_api.rb +56 -0
- data/pom.xml +1 -1
- data/spec/stripe/base_plugin_spec.rb +52 -4
- data/spec/stripe/remote/connect_spec.rb +133 -0
- data/spec/stripe/remote/integration_spec.rb +16 -0
- metadata +70 -71
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e0cda4e3c446746c694b4366902447a04c5e4866
|
4
|
+
data.tar.gz: 57e193eb8e5e7c812239398e8aec10fca5763b94
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 044f52bfe5b64b23b624a943dc292624e9d2bfe04d653070806a5415874afd3dc893ed64e457a1ccbae20f4fa9f05007a5a6a31d3ce72f9ef0f11833fc05791e
|
7
|
+
data.tar.gz: de10c6649729229eed9e9f5cb2539229fea2d69e92f7e8de2b1f6f1a046150a43fdba28fefdf1856e01c5e4d8808ced58b311fbeef512057ea11063760d75904
|
data/Gemfile.lock
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
killbill-stripe (4.
|
4
|
+
killbill-stripe (4.1.0)
|
5
5
|
actionpack (~> 4.1.0)
|
6
6
|
actionview (~> 4.1.0)
|
7
|
-
activemerchant (~> 1.
|
7
|
+
activemerchant (~> 1.55.0)
|
8
8
|
activerecord (~> 4.1.0)
|
9
9
|
activerecord-bogacs (~> 0.3)
|
10
10
|
activerecord-jdbc-adapter (~> 1.3, < 1.5)
|
@@ -19,34 +19,34 @@ PATH
|
|
19
19
|
GEM
|
20
20
|
remote: https://rubygems.org/
|
21
21
|
specs:
|
22
|
-
actionpack (4.1.
|
23
|
-
actionview (= 4.1.
|
24
|
-
activesupport (= 4.1.
|
22
|
+
actionpack (4.1.16)
|
23
|
+
actionview (= 4.1.16)
|
24
|
+
activesupport (= 4.1.16)
|
25
25
|
rack (~> 1.5.2)
|
26
26
|
rack-test (~> 0.6.2)
|
27
|
-
actionview (4.1.
|
28
|
-
activesupport (= 4.1.
|
27
|
+
actionview (4.1.16)
|
28
|
+
activesupport (= 4.1.16)
|
29
29
|
builder (~> 3.1)
|
30
30
|
erubis (~> 2.7.0)
|
31
31
|
active_utils (3.0.0)
|
32
32
|
activesupport (>= 3.2)
|
33
33
|
i18n
|
34
|
-
activemerchant (1.
|
34
|
+
activemerchant (1.55.0)
|
35
35
|
activesupport (>= 3.2.14, < 5.0.0)
|
36
36
|
builder (>= 2.1.2, < 4.0.0)
|
37
37
|
i18n (>= 0.6.9)
|
38
38
|
nokogiri (~> 1.4)
|
39
|
-
activemodel (4.1.
|
40
|
-
activesupport (= 4.1.
|
39
|
+
activemodel (4.1.16)
|
40
|
+
activesupport (= 4.1.16)
|
41
41
|
builder (~> 3.1)
|
42
|
-
activerecord (4.1.
|
43
|
-
activemodel (= 4.1.
|
44
|
-
activesupport (= 4.1.
|
42
|
+
activerecord (4.1.16)
|
43
|
+
activemodel (= 4.1.16)
|
44
|
+
activesupport (= 4.1.16)
|
45
45
|
arel (~> 5.0.0)
|
46
46
|
activerecord-bogacs (0.5.0)
|
47
|
-
activerecord-jdbc-adapter (1.3.
|
47
|
+
activerecord-jdbc-adapter (1.3.21)
|
48
48
|
activerecord (>= 2.2)
|
49
|
-
activesupport (4.1.
|
49
|
+
activesupport (4.1.16)
|
50
50
|
i18n (~> 0.6, >= 0.6.9)
|
51
51
|
json (~> 1.7, >= 1.7.7)
|
52
52
|
minitest (~> 5.1)
|
@@ -65,9 +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.9.
|
68
|
+
ethon (0.9.1)
|
69
69
|
ffi (>= 1.3.0)
|
70
|
-
ffi (1.9.
|
70
|
+
ffi (1.9.14-java)
|
71
71
|
i18n (0.7.0)
|
72
72
|
ice_nine (0.11.2)
|
73
73
|
jar-dependencies (0.3.4)
|
@@ -81,19 +81,19 @@ GEM
|
|
81
81
|
jdbc-sqlite3 (3.8.11.2)
|
82
82
|
jruby-openssl (0.9.17-java)
|
83
83
|
json (1.8.3-java)
|
84
|
-
killbill (8.
|
84
|
+
killbill (8.3.0)
|
85
85
|
rack (>= 1.5.2)
|
86
86
|
sinatra (~> 1.3.4)
|
87
87
|
typhoeus (~> 0.6.9)
|
88
88
|
tzinfo (~> 1.2.0)
|
89
89
|
maven-tools (1.1.6)
|
90
90
|
virtus (~> 1.0)
|
91
|
-
minitest (5.9.
|
91
|
+
minitest (5.9.1)
|
92
92
|
monetize (1.1.0)
|
93
93
|
money (~> 6.5.0)
|
94
94
|
money (6.5.1)
|
95
95
|
i18n (>= 0.6.4, <= 0.7.0)
|
96
|
-
nokogiri (1.6.8-java)
|
96
|
+
nokogiri (1.6.8.1-java)
|
97
97
|
offsite_payments (2.1.0)
|
98
98
|
actionpack (>= 3.2.20, < 5.0.0)
|
99
99
|
active_utils (~> 3.0.0)
|
@@ -148,4 +148,4 @@ DEPENDENCIES
|
|
148
148
|
rspec (~> 2.12.0)
|
149
149
|
|
150
150
|
BUNDLED WITH
|
151
|
-
1.
|
151
|
+
1.11.2
|
data/Jarfile
CHANGED
@@ -1,12 +1,12 @@
|
|
1
|
-
jar 'org.kill-bill.billing:killbill-api', '0.
|
2
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-currency', '0.
|
3
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-invoice', '0.
|
4
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-notification', '0.
|
5
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-payment', '0.
|
6
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-control', '0.
|
7
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-catalog', '0.
|
8
|
-
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-entitlement', '0.
|
9
|
-
jar 'org.kill-bill.billing:killbill-util:tests', '0.17.
|
10
|
-
jar 'org.kill-bill.billing:killbill-util', '0.17.
|
1
|
+
jar 'org.kill-bill.billing:killbill-api', '0.50'
|
2
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-currency', '0.23'
|
3
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-invoice', '0.23'
|
4
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-notification', '0.23'
|
5
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-payment', '0.23'
|
6
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-control', '0.23'
|
7
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-catalog', '0.23'
|
8
|
+
jar 'org.kill-bill.billing.plugin:killbill-plugin-api-entitlement', '0.23'
|
9
|
+
jar 'org.kill-bill.billing:killbill-util:tests', '0.17.8'
|
10
|
+
jar 'org.kill-bill.billing:killbill-util', '0.17.8'
|
11
11
|
jar 'org.mockito:mockito-all', '1.10.19'
|
12
12
|
jar 'javax.servlet:javax.servlet-api', '3.1.0'
|
data/Jarfile.lock
CHANGED
@@ -1,66 +1,66 @@
|
|
1
1
|
---
|
2
2
|
:runtime:
|
3
|
-
-
|
4
|
-
- org.javassist:javassist:jar:3.19.0-GA
|
5
|
-
- org.apache.shiro:shiro-core:jar:1.2.3
|
3
|
+
- io.dropwizard.metrics:metrics-core:jar:3.1.1
|
6
4
|
- joda-time:joda-time:jar:2.3
|
7
|
-
- org.
|
8
|
-
-
|
9
|
-
-
|
10
|
-
- com.google.
|
5
|
+
- org.weakref:jmxutils:jar:1.18
|
6
|
+
- commons-beanutils:commons-beanutils:jar:1.8.3
|
7
|
+
- org.kill-bill.billing:killbill-platform-api:jar:0.34
|
8
|
+
- com.google.inject:guice:jar:3.0
|
11
9
|
- org.osgi:org.osgi.core:jar:5.0.0
|
12
|
-
-
|
13
|
-
-
|
14
|
-
-
|
15
|
-
- org.
|
16
|
-
- org.
|
17
|
-
-
|
18
|
-
- org.
|
10
|
+
- com.fasterxml.jackson.core:jackson-databind:jar:2.4.5
|
11
|
+
- org.kill-bill.billing.plugin:killbill-plugin-api-currency:jar:0.23
|
12
|
+
- com.samskivert:jmustache:jar:1.5
|
13
|
+
- org.kill-bill.billing:killbill-util:jar:tests:0.17.8
|
14
|
+
- org.kill-bill.commons:killbill-clock:jar:0.20
|
15
|
+
- com.fasterxml.jackson.dataformat:jackson-dataformat-csv:jar:2.4.5
|
16
|
+
- org.kill-bill.billing:killbill-platform-osgi-api:jar:0.34
|
17
|
+
- org.kill-bill.billing.plugin:killbill-plugin-api-entitlement:jar:0.23
|
18
|
+
- org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:jar:1.16
|
19
|
+
- com.h2database:h2:jar:1.4.186
|
20
|
+
- com.fasterxml.jackson.datatype:jackson-datatype-joda:jar:2.4.5
|
21
|
+
- javax.activation:activation:jar:1.1
|
22
|
+
- org.kill-bill.billing:killbill-internal-api:jar:0.17.8
|
23
|
+
- org.javassist:javassist:jar:3.19.0-GA
|
19
24
|
- org.skife.config:config-magic:jar:0.14
|
25
|
+
- org.apache.commons:commons-email:jar:1.2
|
26
|
+
- org.mockito:mockito-all:jar:1.10.19
|
20
27
|
- antlr:antlr:jar:2.7.7
|
21
|
-
-
|
22
|
-
-
|
23
|
-
- org.
|
24
|
-
- org.joda:joda-money:jar:0.9
|
25
|
-
- org.jdbi:jdbi:jar:2.62
|
28
|
+
- aopalliance:aopalliance:jar:1.0
|
29
|
+
- com.zaxxer:HikariCP-java6:jar:2.3.7
|
30
|
+
- org.slf4j:slf4j-api:jar:1.7.21
|
26
31
|
- com.fasterxml.jackson.core:jackson-annotations:jar:2.4.3
|
27
|
-
-
|
28
|
-
- com.google.inject:guice:jar:3.0
|
29
|
-
- com.fasterxml.jackson.core:jackson-databind:jar:2.4.3
|
30
|
-
- org.kill-bill.billing.plugin:killbill-plugin-api-entitlement:jar:0.19
|
31
|
-
- org.apache.felix:org.apache.felix.framework:jar:4.4.1
|
32
|
-
- org.kill-bill.billing:killbill-api:jar:0.34
|
33
|
-
- com.samskivert:jmustache:jar:1.5
|
34
|
-
- org.kill-bill.commons:killbill-queue:jar:0.16
|
35
|
-
- com.h2database:h2:jar:1.4.186
|
36
|
-
- org.kill-bill.commons:killbill-jdbi:jar:0.16
|
37
|
-
- org.kill-bill.billing:killbill-platform-osgi-api:jar:0.27
|
32
|
+
- org.antlr:stringtemplate:jar:3.2.1
|
38
33
|
- org.slf4j:jcl-over-slf4j:jar:1.7.21
|
39
|
-
- org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:jar:1.16
|
40
|
-
- org.kill-bill.commons:killbill-embeddeddb-common:jar:0.16
|
41
|
-
- org.kill-bill.billing:killbill-util:jar:0.17.0
|
42
|
-
- com.fasterxml.jackson.datatype:jackson-datatype-joda:jar:2.4.3
|
43
|
-
- org.kill-bill.billing:killbill-internal-api:jar:0.17.0
|
44
|
-
- org.kill-bill.commons:killbill-concurrent:jar:0.16
|
45
|
-
- com.fasterxml.jackson.core:jackson-core:jar:2.4.3
|
46
|
-
- com.google.guava:guava:jar:r09
|
47
34
|
- javax.mail:mail:jar:1.4.1
|
48
|
-
- org.kill-bill.billing.plugin:killbill-plugin-api-notification:jar:0.19
|
49
|
-
- javax.activation:activation:jar:1.1
|
50
|
-
- org.kill-bill.commons:killbill-xmlloader:jar:0.16
|
51
|
-
- io.dropwizard.metrics:metrics-core:jar:3.1.1
|
52
|
-
- org.kill-bill.billing:killbill-platform-osgi:jar:0.27
|
53
|
-
- org.kill-bill.commons:killbill-clock:jar:0.16
|
54
|
-
- org.weakref:jmxutils:jar:1.18
|
55
|
-
- com.google.inject.extensions:guice-multibindings:jar:3.0
|
56
|
-
- javax.inject:javax.inject:jar:1
|
57
|
-
- org.slf4j:slf4j-api:jar:1.7.21
|
58
|
-
- commons-beanutils:commons-beanutils:jar:1.8.3
|
59
|
-
- javax.servlet:javax.servlet-api:jar:3.1.0
|
60
35
|
- io.dropwizard.metrics:metrics-ehcache:jar:3.1.1
|
61
|
-
- org.kill-bill.
|
62
|
-
- org.
|
63
|
-
-
|
64
|
-
- org.
|
65
|
-
- org.
|
36
|
+
- org.kill-bill.billing:killbill-platform-osgi:jar:0.34
|
37
|
+
- org.jdbi:jdbi:jar:2.62
|
38
|
+
- com.fasterxml.jackson.core:jackson-core:jar:2.4.5
|
39
|
+
- org.bouncycastle:bcpkix-jdk15on:jar:1.54
|
40
|
+
- org.apache.felix:org.apache.felix.framework:jar:4.4.1
|
41
|
+
- org.joda:joda-money:jar:0.9
|
42
|
+
- org.kill-bill.billing.plugin:killbill-plugin-api-payment:jar:0.23
|
43
|
+
- org.kill-bill.billing:killbill-util:jar:0.17.8
|
44
|
+
- org.bouncycastle:bcprov-jdk15on:jar:1.54
|
45
|
+
- org.apache.shiro:shiro-core:jar:1.2.3
|
46
|
+
- org.kill-bill.billing:killbill-platform-base:jar:0.34
|
47
|
+
- org.kill-bill.billing.plugin:killbill-plugin-api-control:jar:0.23
|
48
|
+
- org.kill-bill.commons:killbill-jdbi:jar:0.20
|
49
|
+
- com.google.guava:guava:jar:r09
|
50
|
+
- org.kill-bill.commons:killbill-queue:jar:0.20
|
66
51
|
- org.osgi:org.osgi.compendium:jar:5.0.0
|
52
|
+
- org.kill-bill.commons:killbill-xmlloader:jar:0.20
|
53
|
+
- javax.servlet:javax.servlet-api:jar:3.1.0
|
54
|
+
- org.apache.shiro:shiro-ehcache:jar:1.2.3
|
55
|
+
- javax.inject:javax.inject:jar:1
|
56
|
+
- org.kill-bill.billing.plugin:killbill-plugin-api-invoice:jar:0.23
|
57
|
+
- org.kill-bill.billing:killbill-api:jar:0.50
|
58
|
+
- com.google.inject.extensions:guice-multibindings:jar:3.0
|
59
|
+
- net.sf.ehcache:ehcache:jar:2.9.1
|
60
|
+
- org.kill-bill.commons:killbill-locker:jar:0.20
|
61
|
+
- org.kill-bill.commons:killbill-embeddeddb-common:jar:0.20
|
62
|
+
- org.apache.shiro:shiro-guice:jar:1.2.3
|
63
|
+
- org.kill-bill.commons:killbill-concurrent:jar:0.20
|
64
|
+
- org.kill-bill.billing.plugin:killbill-plugin-api-catalog:jar:0.23
|
65
|
+
- org.kill-bill.billing.plugin:killbill-plugin-api-notification:jar:0.23
|
66
|
+
- com.google.code.findbugs:annotations:jar:3.0.0
|
data/NEWS
CHANGED
data/README.md
CHANGED
@@ -5,15 +5,17 @@ Plugin to use [Stripe](https://stripe.com/) as a gateway.
|
|
5
5
|
|
6
6
|
Release builds are available on [Maven Central](http://search.maven.org/#search%7Cga%7C1%7Cg%3A%22org.kill-bill.billing.plugin.ruby%22%20AND%20a%3A%22stripe-plugin%22) with coordinates `org.kill-bill.billing.plugin.ruby:stripe-plugin`.
|
7
7
|
|
8
|
+
A full end-to-end integration demo is available [here](https://github.com/killbill/killbill-stripe-demo).
|
9
|
+
|
8
10
|
Kill Bill compatibility
|
9
11
|
-----------------------
|
10
12
|
|
11
13
|
| Plugin version | Kill Bill version | Stripe version |
|
12
14
|
| -------------: | -----------------: | --------------------------------------------------------: |
|
13
|
-
| 1.
|
14
|
-
| 2.
|
15
|
-
| 3.
|
16
|
-
| 4.
|
15
|
+
| 1.x.y | 0.14.z | [2015-02-18](https://stripe.com/docs/upgrades#2015-02-18) |
|
16
|
+
| 2.x.y | 0.15.z | [2015-02-18](https://stripe.com/docs/upgrades#2015-02-18) |
|
17
|
+
| 3.x.y | 0.16.z | [2015-02-18](https://stripe.com/docs/upgrades#2015-02-18) |
|
18
|
+
| 4.x.y | 0.17.z | [2015-02-18](https://stripe.com/docs/upgrades#2015-02-18) |
|
17
19
|
|
18
20
|
Requirements
|
19
21
|
------------
|
@@ -33,7 +35,9 @@ curl -v \
|
|
33
35
|
-H 'Content-Type: text/plain' \
|
34
36
|
-d ':stripe:
|
35
37
|
:api_secret_key: "your-secret-key"
|
36
|
-
:api_publishable_key: "your-publishable-key"
|
38
|
+
:api_publishable_key: "your-publishable-key"
|
39
|
+
:fees_amount: "default-fees-amount-for-connect"
|
40
|
+
:fees_percent: "default-fees-percent-for-connect"' \
|
37
41
|
http://127.0.0.1:8080/1.0/kb/tenants/uploadPluginConfig/killbill-stripe
|
38
42
|
```
|
39
43
|
|
@@ -42,6 +46,9 @@ To get your credentials:
|
|
42
46
|
1. Go to [stripe.com](http://stripe.com/) and create an account. This account will be used as a sandbox environment for testing.
|
43
47
|
2. In your Stripe account, click on **Your Account** (top right), then click on **Account Settings** and then on the **API Keys** tab. Write down your keys.
|
44
48
|
|
49
|
+
For Connect, you can configure a default fees amount (`fees_amount`) or percentage (`fees_percent`, such as .3 for 30%). These can be modified on a per request basis by passing the plugin property `fees_amount` or `fees_percent`.
|
50
|
+
You'll also need to add a row to the `stripe_application_fees` table and add a percent (such as .3 for 30%) to the `application_fee` field.
|
51
|
+
|
45
52
|
To go to production, create a `stripe.yml` configuration file under `/var/tmp/bundles/plugins/ruby/killbill-stripe/x.y.z/` containing the following:
|
46
53
|
|
47
54
|
```
|
@@ -54,7 +61,7 @@ Usage
|
|
54
61
|
|
55
62
|
You would typically implement [Stripe.js](https://stripe.com/docs/stripe.js) to tokenize credit cards.
|
56
63
|
|
57
|
-
After receiving the token from Stripe,
|
64
|
+
After receiving the token from Stripe, create a Kill Bill payment method associated with it as such:
|
58
65
|
|
59
66
|
```
|
60
67
|
curl -v \
|
@@ -73,15 +80,49 @@ curl -v \
|
|
73
80
|
}]
|
74
81
|
}
|
75
82
|
}' \
|
76
|
-
"http://127.0.0.1:8080/1.0/kb/accounts
|
83
|
+
"http://127.0.0.1:8080/1.0/kb/accounts/<KB_ACCOUNT_ID>/paymentMethods?isDefault=true"
|
77
84
|
```
|
78
85
|
|
79
86
|
An example implementation is exposed at:
|
80
87
|
|
81
88
|
```
|
82
|
-
http://127.0.0.1:8080/plugins/killbill-stripe?kb_account_id
|
89
|
+
http://127.0.0.1:8080/plugins/killbill-stripe?kb_account_id=<KB_ACCOUNT_ID>&kb_tenant_id=<KB_TENANT_ID>
|
83
90
|
```
|
84
91
|
|
92
|
+
After entering you credit card, this demo page will:
|
93
|
+
|
94
|
+
* Tokenize it in Stripe (JS call)
|
95
|
+
* Call Kill Bill during the redirect to create a payment method for that token
|
96
|
+
* Output the result of the tokenization call
|
97
|
+
|
98
|
+
### Connect
|
99
|
+
|
100
|
+
Managed accounts must first have their own account in Kill Bill. Then, create them in Stripe using `POST /plugins/killbill-stripe/accounts`:
|
101
|
+
|
102
|
+
```
|
103
|
+
curl -v -X POST \
|
104
|
+
-d '{
|
105
|
+
"legal_entity": {
|
106
|
+
"address": {
|
107
|
+
"city": "San Francisco",
|
108
|
+
"country": "US"
|
109
|
+
},
|
110
|
+
"dob": {
|
111
|
+
"day": 31,
|
112
|
+
"month": 12,
|
113
|
+
"year": 1969
|
114
|
+
},
|
115
|
+
"first_name": "Jane",
|
116
|
+
"last_name": "Doe"",
|
117
|
+
"type": "individual"
|
118
|
+
}' \
|
119
|
+
http://127.0.0.1:8080/plugins/killbill-stripe/accounts?kb_account_id=<KB_ACCOUNT_ID>&kb_tenant_id=<KB_TENANT_ID>
|
120
|
+
```
|
121
|
+
|
122
|
+
When charging customers, you can now pass the Kill Bill account id of the managed account as the `destination` plugin property.
|
123
|
+
|
124
|
+
See the [Stripe documentation](https://stripe.com/docs/connect/managed-accounts#creating-a-managed-account) for more details.
|
125
|
+
|
85
126
|
Plugin properties
|
86
127
|
-----------------
|
87
128
|
|
@@ -111,3 +152,8 @@ Plugin properties
|
|
111
152
|
| payment_instrument_name | ApplePay tokenization attribute |
|
112
153
|
| payment_network | ApplePay tokenization attribute |
|
113
154
|
| transaction_identifier | ApplePay tokenization attribute |
|
155
|
+
| destination | [Connect] KB account id of the receiving account |
|
156
|
+
| fees_amount | [Connect] Amount in cents of fees to collect |
|
157
|
+
| fees_percent | [Connect] Percentage amount of fees to collect |
|
158
|
+
| reverse_transfer | [Connect] True if the transfer should be reversed when refunding |
|
159
|
+
| refund_application_fee | [Connect] True if fees should be refunded when refunding |
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
4.
|
1
|
+
4.1.0
|
data/killbill-stripe.gemspec
CHANGED
@@ -34,7 +34,8 @@ Gem::Specification.new do |s|
|
|
34
34
|
end
|
35
35
|
s.add_dependency 'actionpack', '~> 4.1.0'
|
36
36
|
s.add_dependency 'actionview', '~> 4.1.0'
|
37
|
-
|
37
|
+
# 1.56.0 and above requires Ruby 2.0
|
38
|
+
s.add_dependency 'activemerchant', '~> 1.55.0'
|
38
39
|
s.add_dependency 'offsite_payments', '~> 2.1.0'
|
39
40
|
s.add_dependency 'monetize', '~> 1.1.0'
|
40
41
|
s.add_dependency 'money', '~> 6.5.1'
|
data/lib/stripe.rb
CHANGED
@@ -16,9 +16,12 @@ require 'yaml'
|
|
16
16
|
require 'killbill'
|
17
17
|
require 'killbill/helpers/active_merchant'
|
18
18
|
|
19
|
+
require 'stripe/ext/active_merchant/active_merchant'
|
20
|
+
|
19
21
|
require 'stripe/api'
|
20
22
|
require 'stripe/private_api'
|
21
23
|
|
22
24
|
require 'stripe/models/payment_method'
|
23
25
|
require 'stripe/models/response'
|
24
26
|
require 'stripe/models/transaction'
|
27
|
+
|
data/lib/stripe/api.rb
CHANGED
@@ -1,3 +1,4 @@
|
|
1
|
+
include Killbill::Plugin::ActiveMerchant
|
1
2
|
module Killbill #:nodoc:
|
2
3
|
module Stripe #:nodoc:
|
3
4
|
class PaymentPlugin < ::Killbill::Plugin::ActiveMerchant::PaymentPlugin
|
@@ -25,10 +26,8 @@ module Killbill #:nodoc:
|
|
25
26
|
def authorize_payment(kb_account_id, kb_payment_id, kb_payment_transaction_id, kb_payment_method_id, amount, currency, properties, context)
|
26
27
|
pm = @payment_method_model.from_kb_payment_method_id(kb_payment_method_id, context.tenant_id)
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
:customer => pm.stripe_customer_id
|
31
|
-
}
|
29
|
+
options = {}
|
30
|
+
populate_defaults(pm, amount, properties, context, options)
|
32
31
|
|
33
32
|
properties = merge_properties(properties, options)
|
34
33
|
super(kb_account_id, kb_payment_id, kb_payment_transaction_id, kb_payment_method_id, amount, currency, properties, context)
|
@@ -45,10 +44,8 @@ module Killbill #:nodoc:
|
|
45
44
|
def purchase_payment(kb_account_id, kb_payment_id, kb_payment_transaction_id, kb_payment_method_id, amount, currency, properties, context)
|
46
45
|
pm = @payment_method_model.from_kb_payment_method_id(kb_payment_method_id, context.tenant_id)
|
47
46
|
|
48
|
-
|
49
|
-
|
50
|
-
:customer => pm.stripe_customer_id
|
51
|
-
}
|
47
|
+
options = {}
|
48
|
+
populate_defaults(pm, amount, properties, context, options)
|
52
49
|
|
53
50
|
properties = merge_properties(properties, options)
|
54
51
|
super(kb_account_id, kb_payment_id, kb_payment_transaction_id, kb_payment_method_id, amount, currency, properties, context)
|
@@ -74,6 +71,12 @@ module Killbill #:nodoc:
|
|
74
71
|
# Pass extra parameters for the gateway here
|
75
72
|
options = {}
|
76
73
|
|
74
|
+
reverse_transfer = find_value_from_properties(properties, :reverse_transfer)
|
75
|
+
options[:reverse_transfer] = ::Killbill::Plugin::ActiveMerchant::Utils.normalize(reverse_transfer)
|
76
|
+
|
77
|
+
refund_application_fee = find_value_from_properties(properties, :refund_application_fee)
|
78
|
+
options[:refund_application_fee] = ::Killbill::Plugin::ActiveMerchant::Utils.normalize(refund_application_fee)
|
79
|
+
|
77
80
|
properties = merge_properties(properties, options)
|
78
81
|
super(kb_account_id, kb_payment_id, kb_payment_transaction_id, kb_payment_method_id, amount, currency, properties, context)
|
79
82
|
end
|
@@ -97,10 +100,11 @@ module Killbill #:nodoc:
|
|
97
100
|
def add_payment_method(kb_account_id, kb_payment_method_id, payment_method_props, set_default, properties, context)
|
98
101
|
# Do we have a customer for that account already?
|
99
102
|
stripe_customer_id = find_value_from_properties(payment_method_props.properties, :customer) || StripePaymentMethod.stripe_customer_id_from_kb_account_id(kb_account_id, context.tenant_id)
|
103
|
+
email = find_value_from_properties(payment_method_props.properties, :email) || @kb_apis.account_user_api.get_account_by_id(kb_account_id, @kb_apis.create_context(context.tenant_id)).email
|
100
104
|
|
101
105
|
# Pass extra parameters for the gateway here
|
102
106
|
options = {
|
103
|
-
:email =>
|
107
|
+
:email => email,
|
104
108
|
# This will either update the current customer if present, or create a new one
|
105
109
|
:customer => stripe_customer_id,
|
106
110
|
# Magic field, see also private_api.rb (works only when creating an account)
|
@@ -182,26 +186,66 @@ module Killbill #:nodoc:
|
|
182
186
|
super(kb_account_id, descriptor_fields, properties, context)
|
183
187
|
end
|
184
188
|
|
185
|
-
def process_notification(
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
+
def process_notification(notification_json, properties, context)
|
190
|
+
notification = JSON.parse(notification_json)
|
191
|
+
gw_response = ::ActiveMerchant::Billing::Response.new(true,
|
192
|
+
nil,
|
193
|
+
notification,
|
194
|
+
:test => !notification['livemode'],
|
195
|
+
:authorization => notification['request'],
|
196
|
+
:avs_result => nil,
|
197
|
+
:cvv_result => nil,
|
198
|
+
:emv_authorization => nil,
|
199
|
+
:error_code => nil)
|
200
|
+
save_response_and_transaction(gw_response, "webhook.#{notification['type']}".to_sym, nil, context.tenant_id, nil)
|
189
201
|
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
end
|
202
|
+
gw_notification = ::Killbill::Plugin::Model::GatewayNotification.new
|
203
|
+
gw_notification.kb_payment_id = nil
|
204
|
+
gw_notification.status = 200
|
205
|
+
gw_notification.headers = {}
|
206
|
+
gw_notification.properties = []
|
207
|
+
gw_notification
|
197
208
|
end
|
198
209
|
|
199
210
|
private
|
200
211
|
|
212
|
+
def before_gateways(kb_transaction, last_transaction, payment_source, amount_in_cents, currency, options, context)
|
213
|
+
super(kb_transaction, last_transaction, payment_source, amount_in_cents, currency, options, context)
|
214
|
+
options[:idempotency_key] ||= kb_transaction.external_key
|
215
|
+
end
|
216
|
+
|
201
217
|
def get_payment_source(kb_payment_method_id, properties, options, context)
|
202
218
|
return nil if options[:customer_id]
|
203
219
|
super(kb_payment_method_id, properties, options, context)
|
204
220
|
end
|
221
|
+
|
222
|
+
def populate_defaults(pm, amount, properties, context, options)
|
223
|
+
options[:customer] ||= pm.stripe_customer_id
|
224
|
+
options[:destination] ||= get_destination(properties, context)
|
225
|
+
options[:application_fee] ||= get_application_fee(amount, properties) unless options[:destination].nil?
|
226
|
+
end
|
227
|
+
|
228
|
+
def get_destination(properties, context)
|
229
|
+
stripe_account_id = find_value_from_properties(properties, :destination)
|
230
|
+
if stripe_account_id.nil?
|
231
|
+
config(context.tenant_id)[:stripe][:stripe_destination]
|
232
|
+
elsif stripe_account_id =~ /[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}/
|
233
|
+
# Stripe doesn't use UUIDs - assume the destination is a Kill Bill account id
|
234
|
+
::Killbill::Stripe::StripeResponse.managed_stripe_account_id_from_kb_account_id(stripe_account_id, context.tenant_id)
|
235
|
+
else
|
236
|
+
stripe_account_id
|
237
|
+
end
|
238
|
+
end
|
239
|
+
|
240
|
+
def get_application_fee(amount, properties)
|
241
|
+
fees_amount = find_value_from_properties(properties, :fees_amount)
|
242
|
+
return fees_amount unless fees_amount.nil?
|
243
|
+
|
244
|
+
fees_percent = find_value_from_properties(properties, :fees_percent)
|
245
|
+
return (fees_percent * amount * 100).to_i unless fees_percent.nil?
|
246
|
+
|
247
|
+
config(context.tenant_id)[:stripe][:fees_amount] || (config(context.tenant_id)[:stripe][:fees_percent].to_f * amount * 100)
|
248
|
+
end
|
205
249
|
end
|
206
250
|
end
|
207
251
|
end
|