diff --git a/CHANGELOG.md b/CHANGELOG.md index 52acf27d46..8cf4a27694 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Braintree Android SDK Release Notes +## unreleased + +* GooglePay + * Add `GooglePayCardNonce.getBin()` + ## 4.29.0 * PayPalNativeCheckout diff --git a/GooglePay/src/main/java/com/braintreepayments/api/GooglePayCardNonce.java b/GooglePay/src/main/java/com/braintreepayments/api/GooglePayCardNonce.java index 1092370580..727a918f34 100644 --- a/GooglePay/src/main/java/com/braintreepayments/api/GooglePayCardNonce.java +++ b/GooglePay/src/main/java/com/braintreepayments/api/GooglePayCardNonce.java @@ -20,6 +20,7 @@ public class GooglePayCardNonce extends PaymentMethodNonce { private static final String CARD_DETAILS_KEY = "details"; private static final String CARD_TYPE_KEY = "cardType"; + private static final String BIN_KEY = "bin"; private static final String LAST_TWO_KEY = "lastTwo"; private static final String LAST_FOUR_KEY = "lastFour"; private static final String IS_NETWORK_TOKENIZED_KEY = "isNetworkTokenized"; @@ -28,6 +29,7 @@ public class GooglePayCardNonce extends PaymentMethodNonce { private static final String PAYMENT_METHOD_DEFAULT_KEY = "default"; private final String cardType; + private final String bin; private final String lastTwo; private final String lastFour; private final String email; @@ -81,16 +83,18 @@ private static GooglePayCardNonce fromGooglePayJSON(JSONObject inputJson) throws PostalAddress shippingAddress = postalAddressFromJson(shippingAddressJson); BinData binData = BinData.fromJson(inputJson.optJSONObject(BIN_DATA_KEY)); + String bin = details.getString(BIN_KEY); String lastTwo = details.getString(LAST_TWO_KEY); String lastFour = details.getString(LAST_FOUR_KEY); String cardType = details.getString(CARD_TYPE_KEY); boolean isNetworkTokenized = details.optBoolean(IS_NETWORK_TOKENIZED_KEY, false); - return new GooglePayCardNonce(cardType, lastTwo, lastFour, email, isNetworkTokenized, billingAddress, shippingAddress, binData, nonce, isDefault); + return new GooglePayCardNonce(cardType, bin, lastTwo, lastFour, email, isNetworkTokenized, billingAddress, shippingAddress, binData, nonce, isDefault); } GooglePayCardNonce( String cardType, + String bin, String lastTwo, String lastFour, String email, @@ -103,6 +107,7 @@ private static GooglePayCardNonce fromGooglePayJSON(JSONObject inputJson) throws ) { super(nonce, isDefault); this.cardType = cardType; + this.bin = bin; this.lastTwo = lastTwo; this.lastFour = lastFour; this.email = email; @@ -146,6 +151,14 @@ public String getCardType() { return cardType; } + /** + * @return First six digits of card number. + */ + @NonNull + public String getBin() { + return bin; + } + /** * @return Last two digits of the user's underlying card, intended for display purposes. */ @@ -205,6 +218,7 @@ public BinData getBinData() { public void writeToParcel(Parcel dest, int flags) { super.writeToParcel(dest, flags); dest.writeString(cardType); + dest.writeString(bin); dest.writeString(lastTwo); dest.writeString(lastFour); dest.writeString(email); @@ -217,6 +231,7 @@ public void writeToParcel(Parcel dest, int flags) { private GooglePayCardNonce(Parcel in) { super(in); cardType = in.readString(); + bin = in.readString(); lastTwo = in.readString(); lastFour = in.readString(); email = in.readString(); diff --git a/GooglePay/src/test/java/com/braintreepayments/api/GooglePayCardNonceUnitTest.java b/GooglePay/src/test/java/com/braintreepayments/api/GooglePayCardNonceUnitTest.java index c3680d9fe3..b1ecbd5bbc 100644 --- a/GooglePay/src/test/java/com/braintreepayments/api/GooglePayCardNonceUnitTest.java +++ b/GooglePay/src/test/java/com/braintreepayments/api/GooglePayCardNonceUnitTest.java @@ -30,6 +30,7 @@ public void fromJson_createsGooglePayCardNonce() throws Exception { assertEquals("fake-google-pay-nonce", googlePayCardNonce.getString()); assertEquals("Visa", googlePayCardNonce.getCardType()); + assertEquals("123456", googlePayCardNonce.getBin()); assertEquals("11", googlePayCardNonce.getLastTwo()); assertEquals("1234", googlePayCardNonce.getLastFour()); assertEquals("android-user@example.com", googlePayCardNonce.getEmail()); diff --git a/TestUtils/src/main/java/com/braintreepayments/api/Fixtures.kt b/TestUtils/src/main/java/com/braintreepayments/api/Fixtures.kt index 41c2699ab0..8dd5a95df9 100644 --- a/TestUtils/src/main/java/com/braintreepayments/api/Fixtures.kt +++ b/TestUtils/src/main/java/com/braintreepayments/api/Fixtures.kt @@ -2302,7 +2302,7 @@ object Fixtures { }, "tokenizationData": { "type": "PAYMENT_GATEWAY", - "token": "{\"androidPayCards\":[{\"type\":\"AndroidPayCard\",\"nonce\":\"fake-google-pay-nonce\",\"description\":\"Google Pay\",\"details\":{\"cardType\":\"Visa\",\"lastTwo\":\"11\",\"lastFour\":\"1234\",\"isNetworkTokenized\":true},\"binData\":{\"prepaid\":\"Unknown\",\"healthcare\":\"Yes\",\"debit\":\"No\",\"durbinRegulated\":\"Unknown\",\"commercial\":\"Unknown\",\"payroll\":\"Unknown\",\"issuingBank\":\"Unknown\",\"countryOfIssuance\":\"Something\",\"productId\":\"123\"}}]}" + "token": "{\"androidPayCards\":[{\"type\":\"AndroidPayCard\",\"nonce\":\"fake-google-pay-nonce\",\"description\":\"Google Pay\",\"details\":{\"cardType\":\"Visa\",\"bin\":\"123456\",\"lastTwo\":\"11\",\"lastFour\":\"1234\",\"isNetworkTokenized\":true},\"binData\":{\"prepaid\":\"Unknown\",\"healthcare\":\"Yes\",\"debit\":\"No\",\"durbinRegulated\":\"Unknown\",\"commercial\":\"Unknown\",\"payroll\":\"Unknown\",\"issuingBank\":\"Unknown\",\"countryOfIssuance\":\"Something\",\"productId\":\"123\"}}]}" } } } @@ -2398,7 +2398,7 @@ object Fixtures { "description": "Visa •••• 1234", "tokenizationData": { "type": "PAYMENT_GATEWAY", - "token": "{\"androidPayCards\":[{\"type\":\"AndroidPayCard\",\"nonce\":\"d887f42c-bda5-091a-0798-af42d3ed173e\",\"description\":\"Google Pay\",\"consumed\":false,\"details\":{\"cardType\":\"Visa\",\"lastTwo\":\"34\",\"lastFour\":\"1234\"},\"binData\":{\"prepaid\":\"No\",\"healthcare\":\"No\",\"debit\":\"No\",\"durbinRegulated\":\"No\",\"commercial\":\"No\",\"payroll\":\"No\",\"issuingBank\":\"Issuing Bank USA\",\"countryOfIssuance\":\"USA\",\"productId\":\"A\"}}]}" + "token": "{\"androidPayCards\":[{\"type\":\"AndroidPayCard\",\"nonce\":\"d887f42c-bda5-091a-0798-af42d3ed173e\",\"description\":\"Google Pay\",\"consumed\":false,\"details\":{\"cardType\":\"Visa\",\"bin\":\"123456\",\"lastTwo\":\"34\",\"lastFour\":\"1234\"},\"binData\":{\"prepaid\":\"No\",\"healthcare\":\"No\",\"debit\":\"No\",\"durbinRegulated\":\"No\",\"commercial\":\"No\",\"payroll\":\"No\",\"issuingBank\":\"Issuing Bank USA\",\"countryOfIssuance\":\"USA\",\"productId\":\"A\"}}]}" }, "type": "CARD", "info": {