@capacitor-community/stripe-terminal 6.0.0-1 → 6.0.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.
- package/CapacitorCommunityStripeTerminal.podspec +1 -1
- package/README.md +128 -32
- package/android/build.gradle +3 -3
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.java +116 -84
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminalPlugin.java +48 -12
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/TerminalEvent.kt +3 -1
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/TokenProvider.java +69 -35
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/helper/MetaData.java +0 -2
- package/android/src/main/java/com/getcapacitor/community/stripe/terminal/models/Executor.java +0 -2
- package/dist/docs.json +123 -12
- package/dist/esm/definitions.d.ts +26 -4
- package/dist/esm/definitions.js.map +1 -1
- package/dist/esm/events.enum.d.ts +5 -3
- package/dist/esm/events.enum.js +3 -1
- package/dist/esm/events.enum.js.map +1 -1
- package/dist/esm/web.d.ts +6 -2
- package/dist/esm/web.js +17 -5
- package/dist/esm/web.js.map +1 -1
- package/dist/plugin.cjs.js +20 -6
- package/dist/plugin.cjs.js.map +1 -1
- package/dist/plugin.js +20 -6
- package/dist/plugin.js.map +1 -1
- package/ios/Plugin/StripeTerminal.swift +110 -53
- package/ios/Plugin/StripeTerminalPlugin.m +4 -2
- package/ios/Plugin/StripeTerminalPlugin.swift +12 -4
- package/ios/Plugin/TerminalEvents.swift +3 -1
- package/package.json +8 -5
|
@@ -13,6 +13,6 @@ Pod::Spec.new do |s|
|
|
|
13
13
|
s.source_files = 'ios/Plugin/**/*.{swift,h,m,c,cc,mm,cpp}'
|
|
14
14
|
s.ios.deployment_target = '13.0'
|
|
15
15
|
s.dependency 'Capacitor'
|
|
16
|
-
s.dependency 'StripeTerminal', '~>
|
|
16
|
+
s.dependency 'StripeTerminal', '~> 3.4.0'
|
|
17
17
|
s.swift_version = '5.1'
|
|
18
18
|
end
|
package/README.md
CHANGED
|
@@ -5,8 +5,8 @@ We have confirmed that it works well in the demo project. Please refer to https:
|
|
|
5
5
|
|
|
6
6
|
- [x] Tap To Pay
|
|
7
7
|
- [x] Internet
|
|
8
|
-
- [
|
|
9
|
-
- [
|
|
8
|
+
- [x] Bluetooth
|
|
9
|
+
- [x] USB
|
|
10
10
|
|
|
11
11
|
## Install
|
|
12
12
|
|
|
@@ -27,8 +27,9 @@ Add permissions to your `android/app/src/main/AndroidManifest.xml` file:
|
|
|
27
27
|
+ <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
|
|
28
28
|
+ <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" />
|
|
29
29
|
+ <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" />
|
|
30
|
-
+ <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
|
31
30
|
+ <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
|
|
31
|
+
+ <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
|
|
32
|
+
+ <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
|
|
32
33
|
```
|
|
33
34
|
|
|
34
35
|
If used in conjunction with the `@capacitor-community/stripe` plugin, the following settings may be necessary
|
|
@@ -50,12 +51,14 @@ And update minSdkVersion to 26 And compileSdkVersion to 34 in your `android/app/
|
|
|
50
51
|
ext {
|
|
51
52
|
- minSdkVersion = 22
|
|
52
53
|
- compileSdkVersion = 33
|
|
53
|
-
+ minSdkVersion =
|
|
54
|
+
+ minSdkVersion = 30
|
|
54
55
|
+ compileSdkVersion = 34
|
|
55
56
|
```
|
|
56
57
|
|
|
57
58
|
## Usage
|
|
58
59
|
|
|
60
|
+
### use native http client for getting a token
|
|
61
|
+
|
|
59
62
|
```typescript
|
|
60
63
|
(async ()=> {
|
|
61
64
|
/**
|
|
@@ -69,26 +72,63 @@ And update minSdkVersion to 26 And compileSdkVersion to 34 in your `android/app/
|
|
|
69
72
|
await StripeTerminal.connectReader({
|
|
70
73
|
reader: readers[0],
|
|
71
74
|
});
|
|
72
|
-
|
|
75
|
+
// Collect payment intent
|
|
76
|
+
await StripeTerminal.collectPaymentMethod({ paymentIntent: "**************" });
|
|
77
|
+
// Process and confirm payment intent
|
|
78
|
+
await StripeTerminal.confirmPaymentIntent();
|
|
79
|
+
// disconnect reader
|
|
80
|
+
await StripeTerminal.disconnectReader();
|
|
73
81
|
});
|
|
74
82
|
```
|
|
75
83
|
|
|
84
|
+
### set string token
|
|
85
|
+
|
|
86
|
+
```typescript
|
|
87
|
+
(async ()=> {
|
|
88
|
+
// run before StripeTerminal.initialize
|
|
89
|
+
StripeTerminal.addListener(TerminalEventsEnum.RequestedConnectionToken, async () => {
|
|
90
|
+
const { token } = (await fetch("https://example.com/token")).json();
|
|
91
|
+
StripeTerminal.setConnectionToken({ token });
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
(async ()=> {
|
|
95
|
+
await StripeTerminal.initialize({ isTest: true })
|
|
96
|
+
const { readers } = await StripeTerminal.discoverReaders({
|
|
97
|
+
type: TerminalConnectTypes.TapToPay,
|
|
98
|
+
locationId: "**************",
|
|
99
|
+
});
|
|
100
|
+
await StripeTerminal.connectReader({
|
|
101
|
+
reader: readers[0],
|
|
102
|
+
});
|
|
103
|
+
// Collect payment intent
|
|
104
|
+
await StripeTerminal.collectPaymentMethod({ paymentIntent: "**************" });
|
|
105
|
+
// Process and confirm payment intent
|
|
106
|
+
await StripeTerminal.confirmPaymentIntent();
|
|
107
|
+
// disconnect reader
|
|
108
|
+
await StripeTerminal.disconnectReader();
|
|
109
|
+
});
|
|
110
|
+
````
|
|
111
|
+
|
|
76
112
|
## API
|
|
77
113
|
|
|
78
114
|
<docgen-index>
|
|
79
115
|
|
|
80
116
|
* [`initialize(...)`](#initialize)
|
|
81
117
|
* [`discoverReaders(...)`](#discoverreaders)
|
|
118
|
+
* [`setConnectionToken(...)`](#setconnectiontoken)
|
|
82
119
|
* [`connectReader(...)`](#connectreader)
|
|
83
120
|
* [`getConnectedReader()`](#getconnectedreader)
|
|
84
121
|
* [`disconnectReader()`](#disconnectreader)
|
|
85
122
|
* [`cancelDiscoverReaders()`](#canceldiscoverreaders)
|
|
86
|
-
* [`
|
|
87
|
-
* [`
|
|
123
|
+
* [`collectPaymentMethod(...)`](#collectpaymentmethod)
|
|
124
|
+
* [`cancelCollectPaymentMethod()`](#cancelcollectpaymentmethod)
|
|
125
|
+
* [`confirmPaymentIntent()`](#confirmpaymentintent)
|
|
88
126
|
* [`addListener(TerminalEventsEnum.Loaded, ...)`](#addlistenerterminaleventsenumloaded)
|
|
127
|
+
* [`addListener(TerminalEventsEnum.RequestedConnectionToken, ...)`](#addlistenerterminaleventsenumrequestedconnectiontoken)
|
|
89
128
|
* [`addListener(TerminalEventsEnum.DiscoveredReaders, ...)`](#addlistenerterminaleventsenumdiscoveredreaders)
|
|
90
129
|
* [`addListener(TerminalEventsEnum.ConnectedReader, ...)`](#addlistenerterminaleventsenumconnectedreader)
|
|
91
|
-
* [`addListener(TerminalEventsEnum.
|
|
130
|
+
* [`addListener(TerminalEventsEnum.ConfirmedPaymentIntent, ...)`](#addlistenerterminaleventsenumconfirmedpaymentintent)
|
|
131
|
+
* [`addListener(TerminalEventsEnum.CollectedPaymentIntent, ...)`](#addlistenerterminaleventsenumcollectedpaymentintent)
|
|
92
132
|
* [`addListener(TerminalEventsEnum.Canceled, ...)`](#addlistenerterminaleventsenumcanceled)
|
|
93
133
|
* [`addListener(TerminalEventsEnum.Failed, ...)`](#addlistenerterminaleventsenumfailed)
|
|
94
134
|
* [Interfaces](#interfaces)
|
|
@@ -103,12 +143,12 @@ And update minSdkVersion to 26 And compileSdkVersion to 34 in your `android/app/
|
|
|
103
143
|
### initialize(...)
|
|
104
144
|
|
|
105
145
|
```typescript
|
|
106
|
-
initialize(options: { tokenProviderEndpoint
|
|
146
|
+
initialize(options: { tokenProviderEndpoint?: string; isTest: boolean; }) => Promise<void>
|
|
107
147
|
```
|
|
108
148
|
|
|
109
|
-
| Param | Type
|
|
110
|
-
| ------------- |
|
|
111
|
-
| **`options`** | <code>{ tokenProviderEndpoint
|
|
149
|
+
| Param | Type |
|
|
150
|
+
| ------------- | ----------------------------------------------------------------- |
|
|
151
|
+
| **`options`** | <code>{ tokenProviderEndpoint?: string; isTest: boolean; }</code> |
|
|
112
152
|
|
|
113
153
|
--------------------
|
|
114
154
|
|
|
@@ -128,6 +168,19 @@ discoverReaders(options: { type: TerminalConnectTypes; locationId?: string; }) =
|
|
|
128
168
|
--------------------
|
|
129
169
|
|
|
130
170
|
|
|
171
|
+
### setConnectionToken(...)
|
|
172
|
+
|
|
173
|
+
```typescript
|
|
174
|
+
setConnectionToken(options: { token: string; }) => Promise<void>
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
| Param | Type |
|
|
178
|
+
| ------------- | ------------------------------- |
|
|
179
|
+
| **`options`** | <code>{ token: string; }</code> |
|
|
180
|
+
|
|
181
|
+
--------------------
|
|
182
|
+
|
|
183
|
+
|
|
131
184
|
### connectReader(...)
|
|
132
185
|
|
|
133
186
|
```typescript
|
|
@@ -170,10 +223,10 @@ cancelDiscoverReaders() => Promise<void>
|
|
|
170
223
|
--------------------
|
|
171
224
|
|
|
172
225
|
|
|
173
|
-
###
|
|
226
|
+
### collectPaymentMethod(...)
|
|
174
227
|
|
|
175
228
|
```typescript
|
|
176
|
-
|
|
229
|
+
collectPaymentMethod(options: { paymentIntent: string; }) => Promise<void>
|
|
177
230
|
```
|
|
178
231
|
|
|
179
232
|
| Param | Type |
|
|
@@ -183,10 +236,19 @@ collect(options: { paymentIntent: string; }) => Promise<void>
|
|
|
183
236
|
--------------------
|
|
184
237
|
|
|
185
238
|
|
|
186
|
-
###
|
|
239
|
+
### cancelCollectPaymentMethod()
|
|
187
240
|
|
|
188
241
|
```typescript
|
|
189
|
-
|
|
242
|
+
cancelCollectPaymentMethod() => Promise<void>
|
|
243
|
+
```
|
|
244
|
+
|
|
245
|
+
--------------------
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
### confirmPaymentIntent()
|
|
249
|
+
|
|
250
|
+
```typescript
|
|
251
|
+
confirmPaymentIntent() => Promise<void>
|
|
190
252
|
```
|
|
191
253
|
|
|
192
254
|
--------------------
|
|
@@ -208,6 +270,22 @@ addListener(eventName: TerminalEventsEnum.Loaded, listenerFunc: () => void) => P
|
|
|
208
270
|
--------------------
|
|
209
271
|
|
|
210
272
|
|
|
273
|
+
### addListener(TerminalEventsEnum.RequestedConnectionToken, ...)
|
|
274
|
+
|
|
275
|
+
```typescript
|
|
276
|
+
addListener(eventName: TerminalEventsEnum.RequestedConnectionToken, listenerFunc: () => void) => Promise<PluginListenerHandle>
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
| Param | Type |
|
|
280
|
+
| ------------------ | ------------------------------------------------------------------------------------------ |
|
|
281
|
+
| **`eventName`** | <code><a href="#terminaleventsenum">TerminalEventsEnum.RequestedConnectionToken</a></code> |
|
|
282
|
+
| **`listenerFunc`** | <code>() => void</code> |
|
|
283
|
+
|
|
284
|
+
**Returns:** <code>Promise<<a href="#pluginlistenerhandle">PluginListenerHandle</a>></code>
|
|
285
|
+
|
|
286
|
+
--------------------
|
|
287
|
+
|
|
288
|
+
|
|
211
289
|
### addListener(TerminalEventsEnum.DiscoveredReaders, ...)
|
|
212
290
|
|
|
213
291
|
```typescript
|
|
@@ -240,16 +318,32 @@ addListener(eventName: TerminalEventsEnum.ConnectedReader, listenerFunc: () => v
|
|
|
240
318
|
--------------------
|
|
241
319
|
|
|
242
320
|
|
|
243
|
-
### addListener(TerminalEventsEnum.
|
|
321
|
+
### addListener(TerminalEventsEnum.ConfirmedPaymentIntent, ...)
|
|
322
|
+
|
|
323
|
+
```typescript
|
|
324
|
+
addListener(eventName: TerminalEventsEnum.ConfirmedPaymentIntent, listenerFunc: () => void) => Promise<PluginListenerHandle>
|
|
325
|
+
```
|
|
326
|
+
|
|
327
|
+
| Param | Type |
|
|
328
|
+
| ------------------ | ---------------------------------------------------------------------------------------- |
|
|
329
|
+
| **`eventName`** | <code><a href="#terminaleventsenum">TerminalEventsEnum.ConfirmedPaymentIntent</a></code> |
|
|
330
|
+
| **`listenerFunc`** | <code>() => void</code> |
|
|
331
|
+
|
|
332
|
+
**Returns:** <code>Promise<<a href="#pluginlistenerhandle">PluginListenerHandle</a>></code>
|
|
333
|
+
|
|
334
|
+
--------------------
|
|
335
|
+
|
|
336
|
+
|
|
337
|
+
### addListener(TerminalEventsEnum.CollectedPaymentIntent, ...)
|
|
244
338
|
|
|
245
339
|
```typescript
|
|
246
|
-
addListener(eventName: TerminalEventsEnum.
|
|
340
|
+
addListener(eventName: TerminalEventsEnum.CollectedPaymentIntent, listenerFunc: () => void) => Promise<PluginListenerHandle>
|
|
247
341
|
```
|
|
248
342
|
|
|
249
|
-
| Param | Type
|
|
250
|
-
| ------------------ |
|
|
251
|
-
| **`eventName`** | <code><a href="#terminaleventsenum">TerminalEventsEnum.
|
|
252
|
-
| **`listenerFunc`** | <code>() => void</code>
|
|
343
|
+
| Param | Type |
|
|
344
|
+
| ------------------ | ---------------------------------------------------------------------------------------- |
|
|
345
|
+
| **`eventName`** | <code><a href="#terminaleventsenum">TerminalEventsEnum.CollectedPaymentIntent</a></code> |
|
|
346
|
+
| **`listenerFunc`** | <code>() => void</code> |
|
|
253
347
|
|
|
254
348
|
**Returns:** <code>Promise<<a href="#pluginlistenerhandle">PluginListenerHandle</a>></code>
|
|
255
349
|
|
|
@@ -322,15 +416,17 @@ addListener(eventName: TerminalEventsEnum.Failed, listenerFunc: () => void) => P
|
|
|
322
416
|
|
|
323
417
|
#### TerminalEventsEnum
|
|
324
418
|
|
|
325
|
-
| Members
|
|
326
|
-
|
|
|
327
|
-
| **`Loaded`**
|
|
328
|
-
| **`DiscoveredReaders`**
|
|
329
|
-
| **`CancelDiscoveredReaders`**
|
|
330
|
-
| **`ConnectedReader`**
|
|
331
|
-
| **`DisconnectedReader`**
|
|
332
|
-
| **`
|
|
333
|
-
| **`
|
|
334
|
-
| **`
|
|
419
|
+
| Members | Value |
|
|
420
|
+
| ------------------------------ | ----------------------------------------------- |
|
|
421
|
+
| **`Loaded`** | <code>'terminalLoaded'</code> |
|
|
422
|
+
| **`DiscoveredReaders`** | <code>'terminalDiscoveredReaders'</code> |
|
|
423
|
+
| **`CancelDiscoveredReaders`** | <code>'terminalCancelDiscoveredReaders'</code> |
|
|
424
|
+
| **`ConnectedReader`** | <code>'terminalConnectedReader'</code> |
|
|
425
|
+
| **`DisconnectedReader`** | <code>'terminalDisconnectedReader'</code> |
|
|
426
|
+
| **`ConfirmedPaymentIntent`** | <code>'terminalConfirmedPaymentIntent'</code> |
|
|
427
|
+
| **`CollectedPaymentIntent`** | <code>'terminalCollectedPaymentIntent'</code> |
|
|
428
|
+
| **`Canceled`** | <code>'terminalCanceled'</code> |
|
|
429
|
+
| **`Failed`** | <code>'terminalFailed'</code> |
|
|
430
|
+
| **`RequestedConnectionToken`** | <code>'terminalRequestedConnectionToken'</code> |
|
|
335
431
|
|
|
336
432
|
</docgen-api>
|
package/android/build.gradle
CHANGED
|
@@ -7,11 +7,11 @@ ext {
|
|
|
7
7
|
playServicesWalletVersion = project.hasProperty('playServicesWalletVersion') ? rootProject.ext.playServicesWalletVersion : '19.2.+'
|
|
8
8
|
volleyVersion = project.hasProperty('volleyVersion') ? rootProject.ext.volleyVersion : '1.2.1'
|
|
9
9
|
stripeterminalLocalmobileVersion = project.hasProperty('stripeterminalLocalmobileVersion') ? rootProject.ext.stripeterminalLocalmobileVersion : '3.0.+'
|
|
10
|
-
stripeterminalCoreVersion = project.hasProperty('stripeterminalCoreVersion') ? rootProject.ext.stripeterminalCoreVersion : '3.
|
|
10
|
+
stripeterminalCoreVersion = project.hasProperty('stripeterminalCoreVersion') ? rootProject.ext.stripeterminalCoreVersion : '3.4.+'
|
|
11
11
|
}
|
|
12
12
|
|
|
13
13
|
buildscript {
|
|
14
|
-
ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '1.
|
|
14
|
+
ext.kotlin_version = project.hasProperty("kotlin_version") ? rootProject.ext.kotlin_version : '1.8.20'
|
|
15
15
|
repositories {
|
|
16
16
|
google()
|
|
17
17
|
mavenCentral()
|
|
@@ -27,7 +27,7 @@ apply plugin: 'kotlin-android'
|
|
|
27
27
|
|
|
28
28
|
android {
|
|
29
29
|
namespace "com.getcapacitor.community.stripe.terminal"
|
|
30
|
-
|
|
30
|
+
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 34
|
|
31
31
|
defaultConfig {
|
|
32
32
|
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 22
|
|
33
33
|
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 34
|
package/android/src/main/java/com/getcapacitor/community/stripe/terminal/StripeTerminal.java
CHANGED
|
@@ -7,12 +7,10 @@ import android.bluetooth.BluetoothAdapter;
|
|
|
7
7
|
import android.content.Context;
|
|
8
8
|
import android.content.pm.PackageManager;
|
|
9
9
|
import android.util.Log;
|
|
10
|
-
|
|
11
10
|
import androidx.annotation.NonNull;
|
|
12
11
|
import androidx.annotation.Nullable;
|
|
13
12
|
import androidx.core.app.ActivityCompat;
|
|
14
13
|
import androidx.core.util.Supplier;
|
|
15
|
-
|
|
16
14
|
import com.getcapacitor.JSArray;
|
|
17
15
|
import com.getcapacitor.JSObject;
|
|
18
16
|
import com.getcapacitor.PluginCall;
|
|
@@ -26,6 +24,7 @@ import com.stripe.stripeterminal.external.callable.DiscoveryListener;
|
|
|
26
24
|
import com.stripe.stripeterminal.external.callable.PaymentIntentCallback;
|
|
27
25
|
import com.stripe.stripeterminal.external.callable.ReaderCallback;
|
|
28
26
|
import com.stripe.stripeterminal.external.callable.ReaderListener;
|
|
27
|
+
import com.stripe.stripeterminal.external.callable.ReaderReconnectionListener;
|
|
29
28
|
import com.stripe.stripeterminal.external.callable.TerminalListener;
|
|
30
29
|
import com.stripe.stripeterminal.external.models.CardPresentDetails;
|
|
31
30
|
import com.stripe.stripeterminal.external.models.CollectConfiguration;
|
|
@@ -42,29 +41,30 @@ import com.stripe.stripeterminal.external.models.Reader;
|
|
|
42
41
|
import com.stripe.stripeterminal.external.models.ReaderSoftwareUpdate;
|
|
43
42
|
import com.stripe.stripeterminal.external.models.TerminalException;
|
|
44
43
|
import com.stripe.stripeterminal.log.LogLevel;
|
|
45
|
-
|
|
46
|
-
import org.jetbrains.annotations.NotNull;
|
|
47
|
-
|
|
48
44
|
import java.util.ArrayList;
|
|
49
45
|
import java.util.List;
|
|
50
46
|
import java.util.Objects;
|
|
47
|
+
import org.jetbrains.annotations.NotNull;
|
|
51
48
|
|
|
52
49
|
public class StripeTerminal extends Executor {
|
|
53
50
|
|
|
51
|
+
private TokenProvider tokenProvider;
|
|
54
52
|
private Cancelable discoveryCancelable;
|
|
55
53
|
private Cancelable collectCancelable;
|
|
56
54
|
private List<Reader> readers;
|
|
57
55
|
private String locationId;
|
|
58
56
|
private PluginCall collectCall;
|
|
57
|
+
private PluginCall confirmPaymentIntentCall;
|
|
59
58
|
private final JSObject emptyObject = new JSObject();
|
|
60
59
|
private Boolean isTest;
|
|
61
60
|
private TerminalConnectTypes terminalConnectType;
|
|
61
|
+
private PaymentIntent paymentIntentInstance;
|
|
62
62
|
|
|
63
63
|
public StripeTerminal(
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
64
|
+
Supplier<Context> contextSupplier,
|
|
65
|
+
Supplier<Activity> activitySupplier,
|
|
66
|
+
BiConsumer<String, JSObject> notifyListenersFunction,
|
|
67
|
+
String pluginLogTag
|
|
68
68
|
) {
|
|
69
69
|
super(contextSupplier, activitySupplier, notifyListenersFunction, pluginLogTag, "StripeTerminalExecutor");
|
|
70
70
|
this.contextSupplier = contextSupplier;
|
|
@@ -77,21 +77,21 @@ public class StripeTerminal extends Executor {
|
|
|
77
77
|
BluetoothAdapter bluetooth = BluetoothAdapter.getDefaultAdapter();
|
|
78
78
|
if (!bluetooth.isEnabled()) {
|
|
79
79
|
if (
|
|
80
|
-
|
|
81
|
-
|
|
80
|
+
ActivityCompat.checkSelfPermission(this.contextSupplier.get(), Manifest.permission.BLUETOOTH_CONNECT) ==
|
|
81
|
+
PackageManager.PERMISSION_GRANTED
|
|
82
82
|
) {
|
|
83
83
|
bluetooth.enable();
|
|
84
84
|
}
|
|
85
85
|
}
|
|
86
86
|
|
|
87
87
|
this.activitySupplier.get()
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
88
|
+
.runOnUiThread(
|
|
89
|
+
() -> {
|
|
90
|
+
TerminalApplicationDelegate.onCreate((Application) this.contextSupplier.get().getApplicationContext());
|
|
91
|
+
notifyListeners(TerminalEnumEvent.Loaded.getWebEventName(), emptyObject);
|
|
92
|
+
call.resolve();
|
|
93
|
+
}
|
|
94
|
+
);
|
|
95
95
|
TerminalListener listener = new TerminalListener() {
|
|
96
96
|
@Override
|
|
97
97
|
public void onUnexpectedReaderDisconnect(@NonNull Reader reader) {
|
|
@@ -100,24 +100,32 @@ public class StripeTerminal extends Executor {
|
|
|
100
100
|
|
|
101
101
|
@Override
|
|
102
102
|
public void onConnectionStatusChange(@NonNull ConnectionStatus status) {
|
|
103
|
-
|
|
103
|
+
// TODO: Listenerを追加
|
|
104
104
|
}
|
|
105
105
|
|
|
106
106
|
@Override
|
|
107
107
|
public void onPaymentStatusChange(@NonNull PaymentStatus status) {
|
|
108
|
-
|
|
108
|
+
// TODO: Listenerを追加
|
|
109
109
|
}
|
|
110
110
|
};
|
|
111
111
|
LogLevel logLevel = LogLevel.VERBOSE;
|
|
112
|
-
|
|
112
|
+
this.tokenProvider =
|
|
113
|
+
new TokenProvider(this.contextSupplier, call.getString("tokenProviderEndpoint", ""), this.notifyListenersFunction);
|
|
113
114
|
if (!Terminal.isInitialized()) {
|
|
114
|
-
Terminal.initTerminal(this.contextSupplier.get().getApplicationContext(), logLevel, tokenProvider, listener);
|
|
115
|
+
Terminal.initTerminal(this.contextSupplier.get().getApplicationContext(), logLevel, this.tokenProvider, listener);
|
|
115
116
|
}
|
|
116
117
|
Terminal.getInstance();
|
|
117
118
|
}
|
|
118
119
|
|
|
119
|
-
public void
|
|
120
|
-
|
|
120
|
+
public void setConnectionToken(PluginCall call) {
|
|
121
|
+
this.tokenProvider.setConnectionToken(call);
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
public void onDiscoverReaders(final PluginCall call) {
|
|
125
|
+
if (
|
|
126
|
+
ActivityCompat.checkSelfPermission(this.contextSupplier.get(), Manifest.permission.ACCESS_FINE_LOCATION) !=
|
|
127
|
+
PackageManager.PERMISSION_GRANTED
|
|
128
|
+
) {
|
|
121
129
|
Log.d(this.logTag, "android.permission.ACCESS_FINE_LOCATION permission is not granted.");
|
|
122
130
|
call.reject("android.permission.ACCESS_FINE_LOCATION permission is not granted.");
|
|
123
131
|
return;
|
|
@@ -134,7 +142,10 @@ public class StripeTerminal extends Executor {
|
|
|
134
142
|
} else if (Objects.equals(call.getString("type"), TerminalConnectTypes.Usb.getWebEventName())) {
|
|
135
143
|
config = new DiscoveryConfiguration.UsbDiscoveryConfiguration(0, this.isTest);
|
|
136
144
|
this.terminalConnectType = TerminalConnectTypes.Usb;
|
|
137
|
-
} else if (
|
|
145
|
+
} else if (
|
|
146
|
+
Objects.equals(call.getString("type"), TerminalConnectTypes.Bluetooth.getWebEventName()) ||
|
|
147
|
+
Objects.equals(call.getString("type"), TerminalConnectTypes.Simulated.getWebEventName())
|
|
148
|
+
) {
|
|
138
149
|
config = new DiscoveryConfiguration.BluetoothDiscoveryConfiguration(0, this.isTest);
|
|
139
150
|
this.terminalConnectType = TerminalConnectTypes.Bluetooth;
|
|
140
151
|
} else {
|
|
@@ -156,21 +167,23 @@ public class StripeTerminal extends Executor {
|
|
|
156
167
|
call.resolve(new JSObject().put("readers", readersJSObject));
|
|
157
168
|
};
|
|
158
169
|
discoveryCancelable =
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
170
|
+
Terminal
|
|
171
|
+
.getInstance()
|
|
172
|
+
.discoverReaders(
|
|
173
|
+
config,
|
|
174
|
+
discoveryListener,
|
|
175
|
+
new Callback() {
|
|
176
|
+
@Override
|
|
177
|
+
public void onSuccess() {
|
|
178
|
+
Log.d(logTag, "Finished discovering readers");
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
@Override
|
|
182
|
+
public void onFailure(@NonNull TerminalException ex) {
|
|
183
|
+
Log.d(logTag, ex.getLocalizedMessage());
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
);
|
|
174
187
|
}
|
|
175
188
|
|
|
176
189
|
public void connectReader(final PluginCall call) {
|
|
@@ -229,53 +242,53 @@ public class StripeTerminal extends Executor {
|
|
|
229
242
|
}
|
|
230
243
|
|
|
231
244
|
LocalMobileConnectionConfiguration config = new LocalMobileConnectionConfiguration(
|
|
232
|
-
this.locationId
|
|
245
|
+
this.locationId,
|
|
246
|
+
true,
|
|
247
|
+
this.localMobileReaderReconnectionListener
|
|
233
248
|
);
|
|
234
|
-
Terminal
|
|
235
|
-
.getInstance()
|
|
236
|
-
.connectLocalMobileReader(
|
|
237
|
-
this.readers.get(reader.getInteger("index")),
|
|
238
|
-
config,
|
|
239
|
-
this.readerCallback(call)
|
|
240
|
-
);
|
|
249
|
+
Terminal.getInstance().connectLocalMobileReader(this.readers.get(reader.getInteger("index")), config, this.readerCallback(call));
|
|
241
250
|
}
|
|
242
251
|
|
|
252
|
+
ReaderReconnectionListener localMobileReaderReconnectionListener = new ReaderReconnectionListener() {
|
|
253
|
+
@Override
|
|
254
|
+
public void onReaderReconnectStarted(@NonNull Reader reader, @NonNull Cancelable cancelReconnect) {
|
|
255
|
+
// 1. Notified at the start of a reconnection attempt
|
|
256
|
+
// Use cancelable to stop reconnection at any time
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
@Override
|
|
260
|
+
public void onReaderReconnectSucceeded(@NonNull Reader reader) {
|
|
261
|
+
// 2. Notified when reader reconnection succeeds
|
|
262
|
+
// App is now connected
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
@Override
|
|
266
|
+
public void onReaderReconnectFailed(@NonNull Reader reader) {
|
|
267
|
+
// 3. Notified when reader reconnection fails
|
|
268
|
+
// App is now disconnected
|
|
269
|
+
}
|
|
270
|
+
};
|
|
271
|
+
|
|
243
272
|
private void connectInternetReader(final PluginCall call) {
|
|
244
273
|
JSObject reader = call.getObject("reader");
|
|
245
274
|
InternetConnectionConfiguration config = new InternetConnectionConfiguration();
|
|
246
|
-
Terminal
|
|
247
|
-
.getInstance()
|
|
248
|
-
.connectInternetReader(
|
|
249
|
-
this.readers.get(reader.getInteger("index")),
|
|
250
|
-
config,
|
|
251
|
-
this.readerCallback(call)
|
|
252
|
-
);
|
|
275
|
+
Terminal.getInstance().connectInternetReader(this.readers.get(reader.getInteger("index")), config, this.readerCallback(call));
|
|
253
276
|
}
|
|
254
277
|
|
|
255
278
|
private void connectUsbReader(final PluginCall call) {
|
|
256
279
|
JSObject reader = call.getObject("reader");
|
|
257
280
|
UsbConnectionConfiguration config = new UsbConnectionConfiguration(this.locationId);
|
|
258
281
|
Terminal
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
this.readers.get(reader.getInteger("index")),
|
|
262
|
-
config,
|
|
263
|
-
this.readerListener(),
|
|
264
|
-
this.readerCallback(call)
|
|
265
|
-
);
|
|
282
|
+
.getInstance()
|
|
283
|
+
.connectUsbReader(this.readers.get(reader.getInteger("index")), config, this.readerListener(), this.readerCallback(call));
|
|
266
284
|
}
|
|
267
285
|
|
|
268
286
|
private void connectBluetoothReader(final PluginCall call) {
|
|
269
287
|
JSObject reader = call.getObject("reader");
|
|
270
288
|
BluetoothConnectionConfiguration config = new BluetoothConnectionConfiguration(this.locationId);
|
|
271
289
|
Terminal
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
this.readers.get(reader.getInteger("index")),
|
|
275
|
-
config,
|
|
276
|
-
this.readerListener(),
|
|
277
|
-
this.readerCallback(call)
|
|
278
|
-
);
|
|
290
|
+
.getInstance()
|
|
291
|
+
.connectBluetoothReader(this.readers.get(reader.getInteger("index")), config, this.readerListener(), this.readerCallback(call));
|
|
279
292
|
}
|
|
280
293
|
|
|
281
294
|
public void cancelDiscoverReaders(final PluginCall call) {
|
|
@@ -299,7 +312,7 @@ public class StripeTerminal extends Executor {
|
|
|
299
312
|
}
|
|
300
313
|
}
|
|
301
314
|
|
|
302
|
-
public void
|
|
315
|
+
public void collectPaymentMethod(final PluginCall call) {
|
|
303
316
|
if (call.getString("paymentIntent") == null) {
|
|
304
317
|
call.reject("The value of paymentIntent is not set correctly.");
|
|
305
318
|
return;
|
|
@@ -308,7 +321,7 @@ public class StripeTerminal extends Executor {
|
|
|
308
321
|
Terminal.getInstance().retrievePaymentIntent(call.getString("paymentIntent"), createPaymentIntentCallback);
|
|
309
322
|
}
|
|
310
323
|
|
|
311
|
-
public void
|
|
324
|
+
public void cancelCollectPaymentMethod(final PluginCall call) {
|
|
312
325
|
if (this.collectCancelable == null || this.collectCancelable.isCompleted()) {
|
|
313
326
|
call.resolve();
|
|
314
327
|
return;
|
|
@@ -334,9 +347,7 @@ public class StripeTerminal extends Executor {
|
|
|
334
347
|
private final PaymentIntentCallback createPaymentIntentCallback = new PaymentIntentCallback() {
|
|
335
348
|
@Override
|
|
336
349
|
public void onSuccess(@NonNull PaymentIntent paymentIntent) {
|
|
337
|
-
CollectConfiguration collectConfig = new CollectConfiguration.Builder()
|
|
338
|
-
.updatePaymentIntent(true)
|
|
339
|
-
.build();
|
|
350
|
+
CollectConfiguration collectConfig = new CollectConfiguration.Builder().updatePaymentIntent(true).build();
|
|
340
351
|
collectCancelable = Terminal.getInstance().collectPaymentMethod(paymentIntent, collectPaymentMethodCallback, collectConfig);
|
|
341
352
|
}
|
|
342
353
|
|
|
@@ -347,20 +358,19 @@ public class StripeTerminal extends Executor {
|
|
|
347
358
|
}
|
|
348
359
|
};
|
|
349
360
|
|
|
350
|
-
// Step 3 - we've collected the payment method, so it's time to process the payment
|
|
351
361
|
private final PaymentIntentCallback collectPaymentMethodCallback = new PaymentIntentCallback() {
|
|
352
362
|
@Override
|
|
353
363
|
public void onSuccess(PaymentIntent paymentIntent) {
|
|
354
364
|
collectCancelable = null;
|
|
355
|
-
|
|
365
|
+
paymentIntentInstance = paymentIntent;
|
|
366
|
+
notifyListeners(TerminalEnumEvent.CollectedPaymentIntent.getWebEventName(), emptyObject);
|
|
356
367
|
|
|
357
368
|
PaymentMethod pm = paymentIntent.getPaymentMethod();
|
|
358
|
-
CardPresentDetails card = pm.getCardPresentDetails() != null
|
|
359
|
-
? pm.getCardPresentDetails()
|
|
360
|
-
: pm.getInteracPresentDetails();
|
|
369
|
+
CardPresentDetails card = pm.getCardPresentDetails() != null ? pm.getCardPresentDetails() : pm.getInteracPresentDetails();
|
|
361
370
|
|
|
362
371
|
if (card != null) {
|
|
363
|
-
collectCall.resolve(
|
|
372
|
+
collectCall.resolve(
|
|
373
|
+
new JSObject()
|
|
364
374
|
.put("brand", card.getBrand())
|
|
365
375
|
.put("cardholderName", card.getCardholderName())
|
|
366
376
|
.put("country", card.getCountry())
|
|
@@ -373,7 +383,6 @@ public class StripeTerminal extends Executor {
|
|
|
373
383
|
.put("last4", card.getLast4())
|
|
374
384
|
.put("networks", card.getNetworks())
|
|
375
385
|
.put("readMethod", card.getReadMethod())
|
|
376
|
-
|
|
377
386
|
);
|
|
378
387
|
} else {
|
|
379
388
|
collectCall.resolve();
|
|
@@ -388,6 +397,31 @@ public class StripeTerminal extends Executor {
|
|
|
388
397
|
}
|
|
389
398
|
};
|
|
390
399
|
|
|
400
|
+
public void confirmPaymentIntent(final PluginCall call) {
|
|
401
|
+
if (this.paymentIntentInstance == null) {
|
|
402
|
+
call.reject("PaymentIntent not found for confirmPaymentIntent. Use collect method first and try again.");
|
|
403
|
+
return;
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
this.confirmPaymentIntentCall = call;
|
|
407
|
+
Terminal.getInstance().confirmPaymentIntent(this.paymentIntentInstance, confirmPaymentMethodCallback);
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
private final PaymentIntentCallback confirmPaymentMethodCallback = new PaymentIntentCallback() {
|
|
411
|
+
@Override
|
|
412
|
+
public void onSuccess(PaymentIntent paymentIntent) {
|
|
413
|
+
notifyListeners(TerminalEnumEvent.ConfirmedPaymentIntent.getWebEventName(), emptyObject);
|
|
414
|
+
paymentIntentInstance = null;
|
|
415
|
+
confirmPaymentIntentCall.resolve();
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
@Override
|
|
419
|
+
public void onFailure(TerminalException exception) {
|
|
420
|
+
notifyListeners(TerminalEnumEvent.Failed.getWebEventName(), emptyObject);
|
|
421
|
+
confirmPaymentIntentCall.reject(exception.getLocalizedMessage());
|
|
422
|
+
}
|
|
423
|
+
};
|
|
424
|
+
|
|
391
425
|
private ReaderCallback readerCallback(final PluginCall call) {
|
|
392
426
|
return new ReaderCallback() {
|
|
393
427
|
@Override
|
|
@@ -422,9 +456,7 @@ public class StripeTerminal extends Executor {
|
|
|
422
456
|
}
|
|
423
457
|
|
|
424
458
|
@Override
|
|
425
|
-
public void onReportLowBatteryWarning() {
|
|
426
|
-
|
|
427
|
-
}
|
|
459
|
+
public void onReportLowBatteryWarning() {}
|
|
428
460
|
|
|
429
461
|
@Override
|
|
430
462
|
public void onReportAvailableUpdate(@NotNull ReaderSoftwareUpdate update) {
|