-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathSiftClient.java
More file actions
195 lines (167 loc) · 6.72 KB
/
SiftClient.java
File metadata and controls
195 lines (167 loc) · 6.72 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
package com.siftscience;
import com.siftscience.model.ApplyDecisionFieldSet;
import com.siftscience.model.DecisionStatusFieldSet;
import com.siftscience.model.GetDecisionFieldSet;
import com.siftscience.model.LabelFieldSet;
import com.siftscience.model.ScoreFieldSet;
import com.siftscience.model.UnlabelFieldSet;
import com.siftscience.model.UserScoreFieldSet;
import com.siftscience.model.WorkflowStatusFieldSet;
import com.siftscience.model.GetMerchantFieldSet;
import com.siftscience.model.CreateMerchantFieldSet;
import com.siftscience.model.UpdateMerchantFieldSet;
import com.siftscience.model.GetMerchantsFieldSet;
import com.siftscience.model.VerificationSendFieldSet;
import com.siftscience.model.VerificationResendFieldSet;
import com.siftscience.model.VerificationCheckFieldSet;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
/**
* Use a SiftClient to access all supported Sift Science APIs. It may be used concurrently from
* different threads.
*
* Usage:
*
* SiftClient client = new SiftClient("YOUR_API_KEY");
* EventRequest txEventRequest = client.buildRequest(
* new TransactionFieldSet()
* .setUserId("some_user_id")
* .setAmount(506790000L)
* .setCurrencyCode("USD")
* .setTransactionType("$sale")
* ... );
* try {
* EventResponse txEventResponse = txEventRequest.send();
* } catch (SiftException e) {
* ... handle validation and unexpected server errors.
* }
*
* txEventResponse.isOk(); // true;
* txEventResponse.getApiErrorMessage(); // "OK";
*
* FieldSet requestFields = txEventResponse.getRequestBody();
* EventResponseBody responseFields = txEventResponse.getBody();
*
*/
public class SiftClient {
private final String accountId;
private final String apiKey;
private final HttpClient httpClient;
private HttpUrl baseUrl = HttpUrl.parse("https://api.sift.com");
public SiftClient(String apiKey, String accountId) {
this(apiKey, accountId, new OkHttpClient());
}
public SiftClient(String apiKey, String accountId, OkHttpClient okHttpClient) {
assertNotNull(apiKey, "API key must not be null");
assertNotNull(okHttpClient, "Http Client must not be null");
this.apiKey = apiKey;
this.accountId = accountId;
this.httpClient = new HttpClient(okHttpClient);
}
/**
* Used for testing to stub the endpoint
* @param apiKey
* @param accountId
* @param baseUrl
*/
public SiftClient(String apiKey, String accountId, HttpUrl baseUrl) {
this(apiKey, accountId, new OkHttpClient());
this.baseUrl = baseUrl;
}
public SiftClient(String apiKey, String accountId, HttpUrl baseUrl, OkHttpClient okHttpClient) {
this(apiKey, accountId, okHttpClient);
this.baseUrl = baseUrl;
}
public String getApiKey() {
return apiKey;
}
public String getAccountId() {
return accountId;
}
public void enqueueRequests() {
httpClient.enqueueRequests();
}
public EventRequest buildRequest(FieldSet fields) {
setupApiKey(fields);
return new EventRequest(baseUrl, getAccountId(), httpClient, fields);
}
public ApplyDecisionRequest buildRequest(ApplyDecisionFieldSet fields) {
assertAccountIdIsNotNull();
setupApiKey(fields);
return new ApplyDecisionRequest(baseUrl, getAccountId(), httpClient, fields);
}
public GetDecisionsRequest buildRequest(GetDecisionFieldSet fields) {
assertAccountIdIsNotNull();
setupApiKey(fields);
return new GetDecisionsRequest(baseUrl, getAccountId(), httpClient, fields);
}
public DecisionStatusRequest buildRequest(DecisionStatusFieldSet fields) {
assertAccountIdIsNotNull();
setupApiKey(fields);
return new DecisionStatusRequest(baseUrl, getAccountId(), httpClient, fields);
}
public LabelRequest buildRequest(LabelFieldSet fields) {
setupApiKey(fields);
return new LabelRequest(baseUrl, getAccountId(), httpClient, fields);
}
public UnlabelRequest buildRequest(UnlabelFieldSet fields) {
setupApiKey(fields);
return new UnlabelRequest(baseUrl, getAccountId(), httpClient, fields);
}
public ScoreRequest buildRequest(ScoreFieldSet fields) {
setupApiKey(fields);
return new ScoreRequest(baseUrl, getAccountId(), httpClient, fields);
}
public UserScoreRequest buildRequest(UserScoreFieldSet fields) {
setupApiKey(fields);
return new UserScoreRequest(baseUrl, getAccountId(), httpClient, fields);
}
public WorkflowStatusRequest buildRequest(WorkflowStatusFieldSet fields) {
assertAccountIdIsNotNull();
setupApiKey(fields);
return new WorkflowStatusRequest(baseUrl, getAccountId(), httpClient, fields);
}
public GetMerchantsRequest buildRequest(GetMerchantsFieldSet fields) {
assertAccountIdIsNotNull();
setupApiKey(fields);
return new GetMerchantsRequest(baseUrl, getAccountId(), httpClient, fields);
}
public GetMerchantRequest buildRequest(GetMerchantFieldSet fields) {
assertAccountIdIsNotNull();
setupApiKey(fields);
return new GetMerchantRequest(baseUrl, getAccountId(), httpClient, fields);
}
public CreateMerchantRequest buildRequest(CreateMerchantFieldSet fields) {
assertAccountIdIsNotNull();
setupApiKey(fields);
return new CreateMerchantRequest(baseUrl, getAccountId(), httpClient, fields);
}
public UpdateMerchantRequest buildRequest(UpdateMerchantFieldSet fields, String merchantId) {
assertAccountIdIsNotNull();
setupApiKey(fields);
return new UpdateMerchantRequest(baseUrl, getAccountId(), httpClient, fields, merchantId);
}
public VerificationSendRequest buildRequest(VerificationSendFieldSet fields) {
setupApiKey(fields);
return new VerificationSendRequest(baseUrl, getAccountId(), httpClient, fields);
}
public VerificationResendRequest buildRequest(VerificationResendFieldSet fields) {
setupApiKey(fields);
return new VerificationResendRequest(baseUrl, getAccountId(), httpClient, fields);
}
public VerificationCheckRequest buildRequest(VerificationCheckFieldSet fields) {
setupApiKey(fields);
return new VerificationCheckRequest(baseUrl, getAccountId(), httpClient, fields);
}
private void setupApiKey(FieldSet fields) {
fields.setApiKey(getApiKey());
}
private void assertAccountIdIsNotNull() {
assertNotNull(getAccountId(), "Account ID must not be null");
}
private void assertNotNull(Object value, String message) {
if (value == null) {
throw new IllegalArgumentException(message);
}
}
}