Skip to content

Commit 905cf38

Browse files
authored
Merge pull request #122 from oalders/add-subscores
Add device, emailLocalPart and shipping subscores
2 parents 8884803 + 90bfa99 commit 905cf38

4 files changed

Lines changed: 80 additions & 1 deletion

File tree

CHANGELOG.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,12 @@
11
CHANGELOG
22
=========
33

4+
* Added support for three new Factors outputs: `/subscores/device` (the risk
5+
associated with the device), `/subscores/email_local_part` (the risk
6+
associated with the part of the email address before the @ symbol) and
7+
`/subscores/shipping_address` (the risk associated with the shipping
8+
address).
9+
410
1.15.0
511
-------------------
612

src/main/java/com/maxmind/minfraud/response/Subscores.java

Lines changed: 65 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,16 @@ public final class Subscores {
1515
private final Double country;
1616
private final Double countryMismatch;
1717
private final Double cvvResult;
18+
private final Double device;
1819
private final Double emailAddress;
1920
private final Double emailDomain;
21+
private final Double emailLocalPart;
2022
private final Double emailTenure;
2123
private final Double ipTenure;
2224
private final Double issuerIdNumber;
2325
private final Double orderAmount;
2426
private final Double phoneNumber;
27+
private final Double shippingAddress;
2528
private final Double shippingAddressDistanceToIpLocation;
2629
private final Double timeOfDay;
2730

@@ -34,13 +37,16 @@ public Subscores(
3437
@JsonProperty("country") Double country,
3538
@JsonProperty("country_mismatch") Double countryMismatch,
3639
@JsonProperty("cvv_result") Double cvvResult,
40+
@JsonProperty("device") Double device,
3741
@JsonProperty("email_address") Double emailAddress,
3842
@JsonProperty("email_domain") Double emailDomain,
43+
@JsonProperty("email_local_part") Double emailLocalPart,
3944
@JsonProperty("email_tenure") Double emailTenure,
4045
@JsonProperty("ip_tenure") Double ipTenure,
4146
@JsonProperty("issuer_id_number") Double issuerIdNumber,
4247
@JsonProperty("order_amount") Double orderAmount,
4348
@JsonProperty("phone_number") Double phoneNumber,
49+
@JsonProperty("shipping_address") Double shippingAddress,
4450
@JsonProperty("shipping_address_distance_to_ip_location") Double shippingAddressDistanceToIpLocation,
4551
@JsonProperty("time_of_day") Double timeOfDay
4652
) {
@@ -52,20 +58,50 @@ public Subscores(
5258
this.country = country;
5359
this.countryMismatch = countryMismatch;
5460
this.cvvResult = cvvResult;
61+
this.device = device;
5562
this.emailAddress = emailAddress;
5663
this.emailDomain = emailDomain;
64+
this.emailLocalPart = emailLocalPart;
5765
this.emailTenure = emailTenure;
5866
this.ipTenure = ipTenure;
5967
this.issuerIdNumber = issuerIdNumber;
6068
this.orderAmount = orderAmount;
6169
this.phoneNumber = phoneNumber;
70+
this.shippingAddress = shippingAddress;
6271
this.shippingAddressDistanceToIpLocation = shippingAddressDistanceToIpLocation;
6372
this.timeOfDay = timeOfDay;
6473
}
6574

75+
// This method is for backwards compatibility. We should remove it when we
76+
// do a major release.
77+
public Subscores(
78+
Double avsResult,
79+
Double billingAddress,
80+
Double billingAddressDistanceToIpLocation,
81+
Double browser,
82+
Double chargeback,
83+
Double country,
84+
Double countryMismatch,
85+
Double cvvResult,
86+
Double emailAddress,
87+
Double emailDomain,
88+
Double emailTenure,
89+
Double ipTenure,
90+
Double issuerIdNumber,
91+
Double orderAmount,
92+
Double phoneNumber,
93+
Double shippingAddressDistanceToIpLocation,
94+
Double timeOfDay
95+
) {
96+
this(avsResult, billingAddress, billingAddressDistanceToIpLocation, browser, chargeback,
97+
country, countryMismatch, cvvResult, null, emailAddress, emailDomain, null, emailTenure,
98+
ipTenure, issuerIdNumber, orderAmount, phoneNumber, null, shippingAddressDistanceToIpLocation,
99+
timeOfDay);
100+
}
101+
66102
public Subscores() {
67103
this(null, null, null, null, null, null, null, null, null, null, null, null,
68-
null, null, null, null, null);
104+
null, null, null, null, null, null, null, null);
69105
}
70106

71107
/**
@@ -145,6 +181,15 @@ public Double getCvvResult() {
145181
return cvvResult;
146182
}
147183

184+
/**
185+
* @return The risk associated with the device. If present, this is a value in
186+
* the range 0.01 to 99.
187+
*/
188+
@JsonProperty("device")
189+
public Double getDevice() {
190+
return device;
191+
}
192+
148193
/**
149194
* @return The risk associated with the particular email address. If
150195
* present, this is a value in the range 0.01 to 99.
@@ -163,6 +208,16 @@ public Double getEmailDomain() {
163208
return emailDomain;
164209
}
165210

211+
/**
212+
* @return The risk associated with the email address local part (the part
213+
* of the email address before the @ symbol). If present, this is a value
214+
* in the range 0.01 to 99.
215+
*/
216+
@JsonProperty("email_local_part")
217+
public Double getEmailLocalPart() {
218+
return emailLocalPart;
219+
}
220+
166221
/**
167222
* @return The risk associated with the issuer ID number on the email
168223
* domain. If present, this is a value in the range 0.01 to 99.
@@ -218,6 +273,15 @@ public Double getPhoneNumber() {
218273
return phoneNumber;
219274
}
220275

276+
/**
277+
* @return The risk associated with the shipping address. If present, this is
278+
* a value in the range 0.01 to 99.
279+
*/
280+
@JsonProperty("shipping_address")
281+
public Double getShippingAddress() {
282+
return shippingAddress;
283+
}
284+
221285
/**
222286
* @return The risk associated with the distance between the shipping
223287
* address and the IP location for the given IP address. If present, this is

src/test/java/com/maxmind/minfraud/response/FactorsResponseTest.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,16 @@ public void testFactors() throws Exception {
2626
.put("country", 0.06)
2727
.put("country_mismatch", 0.07)
2828
.put("cvv_result", 0.08)
29+
.put("device", 0.18)
2930
.put("email_address", 0.09)
3031
.put("email_domain", 0.10)
32+
.put("email_local_part", 0.19)
3133
.put("email_tenure", 0.11)
3234
.put("ip_tenure", 0.12)
3335
.put("issuer_id_number", 0.13)
3436
.put("order_amount", 0.14)
3537
.put("phone_number", 0.15)
38+
.put("shipping_address", 0.2)
3639
.put("shipping_address_distance_to_ip_location", 0.16)
3740
.put("time_of_day", 0.17)
3841
.end()
@@ -52,13 +55,16 @@ public void testFactors() throws Exception {
5255
assertEquals("country", Double.valueOf(0.06), factors.getSubscores().getCountry());
5356
assertEquals("country_mismatch", Double.valueOf(0.07), factors.getSubscores().getCountryMismatch());
5457
assertEquals("cvv_result", Double.valueOf(0.08), factors.getSubscores().getCvvResult());
58+
assertEquals("device", Double.valueOf(0.18), factors.getSubscores().getDevice());
5559
assertEquals("email_address", Double.valueOf(0.09), factors.getSubscores().getEmailAddress());
5660
assertEquals("email_domain", Double.valueOf(0.10), factors.getSubscores().getEmailDomain());
61+
assertEquals("email_local_part", Double.valueOf(0.19), factors.getSubscores().getEmailLocalPart());
5762
assertEquals("email_tenure", Double.valueOf(0.11), factors.getSubscores().getEmailTenure());
5863
assertEquals("ip_tenure", Double.valueOf(0.12), factors.getSubscores().getIpTenure());
5964
assertEquals("issuer_id_number", Double.valueOf(0.13), factors.getSubscores().getIssuerIdNumber());
6065
assertEquals("order_amount", Double.valueOf(0.14), factors.getSubscores().getOrderAmount());
6166
assertEquals("phone_number", Double.valueOf(0.15), factors.getSubscores().getPhoneNumber());
67+
assertEquals("shipping_address", Double.valueOf(0.2), factors.getSubscores().getShippingAddress());
6268
assertEquals("shipping_address_distance_to_ip_location", Double.valueOf(0.16), factors.getSubscores().getShippingAddressDistanceToIpLocation());
6369
assertEquals("time_of_day", Double.valueOf(0.17), factors.getSubscores().getTimeOfDay());
6470
assertEquals("correct funnds remaining", Double.valueOf(1.20), factors.getFundsRemaining());

src/test/resources/test-data/factors-response.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,13 +156,16 @@
156156
"country": 0.06,
157157
"country_mismatch": 0.07,
158158
"cvv_result": 0.08,
159+
"device": 0.18,
159160
"email_address": 0.09,
160161
"email_domain": 0.10,
161162
"email_tenure": 0.11,
163+
"email_local_part": 0.19,
162164
"ip_tenure": 0.12,
163165
"issuer_id_number": 0.13,
164166
"order_amount": 0.14,
165167
"phone_number": 0.15,
168+
"shipping_address": 0.2,
166169
"shipping_address_distance_to_ip_location": 0.16,
167170
"time_of_day": 0.17
168171
},

0 commit comments

Comments
 (0)