From dca0e86ec726eb2e66d3549f41ca2c284f2f7964 Mon Sep 17 00:00:00 2001 From: sshropshire Date: Tue, 7 Feb 2023 13:20:47 -0600 Subject: [PATCH] Fix Samsung Pay error. --- .../java/com/braintreepayments/api/SamsungPayNonce.java | 8 +++++++- .../braintreepayments/api/SamsungPayNonceUnitTest.java | 3 +++ .../src/main/java/com/braintreepayments/api/Fixtures.kt | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/SamsungPay/src/main/java/com/braintreepayments/api/SamsungPayNonce.java b/SamsungPay/src/main/java/com/braintreepayments/api/SamsungPayNonce.java index 5b47bd13ca..96e80b4021 100644 --- a/SamsungPay/src/main/java/com/braintreepayments/api/SamsungPayNonce.java +++ b/SamsungPay/src/main/java/com/braintreepayments/api/SamsungPayNonce.java @@ -1,6 +1,7 @@ package com.braintreepayments.api; import android.os.Parcel; +import android.text.TextUtils; import androidx.annotation.NonNull; @@ -36,7 +37,12 @@ static SamsungPayNonce fromJSON(JSONObject inputJson) throws JSONException { JSONObject details = paymentMethod.getJSONObject("details"); String cardType = details.getString("brand"); - String last4 = details.getString("last4"); + + String last4 = details.optString("last4"); + if (TextUtils.isEmpty(last4)) { + // fallback to source card last 4; throws when fallback not present + last4 = details.getString("sourceCardLast4"); + } // This is a hack to get around the mismatch between the GraphQL API version used in // the Braintree Android SDK and the API version used by Samsung to tokenize. Samsung's diff --git a/SamsungPay/src/test/java/com/braintreepayments/api/SamsungPayNonceUnitTest.java b/SamsungPay/src/test/java/com/braintreepayments/api/SamsungPayNonceUnitTest.java index 045b9b3250..80c175772c 100644 --- a/SamsungPay/src/test/java/com/braintreepayments/api/SamsungPayNonceUnitTest.java +++ b/SamsungPay/src/test/java/com/braintreepayments/api/SamsungPayNonceUnitTest.java @@ -6,7 +6,10 @@ import org.json.JSONException; import org.json.JSONObject; import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +@RunWith(RobolectricTestRunner.class) public class SamsungPayNonceUnitTest { @Test diff --git a/TestUtils/src/main/java/com/braintreepayments/api/Fixtures.kt b/TestUtils/src/main/java/com/braintreepayments/api/Fixtures.kt index d34db8c504..41c2699ab0 100644 --- a/TestUtils/src/main/java/com/braintreepayments/api/Fixtures.kt +++ b/TestUtils/src/main/java/com/braintreepayments/api/Fixtures.kt @@ -2497,7 +2497,7 @@ object Fixtures { // language=JSON const val SAMSUNG_PAY_RESPONSE_V1 = """ { - "data": "{\n \"data\": {\n \"tokenizeSamsungPayCard\": {\n \"singleUseToken\": {\n \"id\": \"tokensam_bf_v8s9hv_2htw4m_nh4f45_y3hsft_wty\",\n \"details\": {\n \"brand\": \"Mastercard\",\n \"brandCode\": \"MASTERCARD\",\n \"last4\": \"1798\",\n \"expirationYear\": \"2020\",\n \"expirationMonth\": \"12\",\n \"binData\": {\n \"commercial\": \"UNKNOWN\",\n \"countryOfIssuance\": \"US\",\n \"debit\": \"NO\",\n \"durbinRegulated\": \"UNKNOWN\",\n \"healthcare\": \"YES\",\n \"issuingBank\": null,\n \"payroll\": \"UNKNOWN\",\n \"prepaid\": \"UNKNOWN\",\n \"productId\": \"123\"\n },\n \"origin\": {\n \"type\": \"SAMSUNG_PAY\",\n \"details\": {\n \"bin\": \"411111\"\n }\n }\n }\n }\n }\n },\n \"extensions\": {\n \"requestId\": \"9eaf90d9-4e8a-4883-96c4-01c02bb0a4e5\"\n }\n}", + "data": "{\n \"data\": {\n \"tokenizeSamsungPayCard\": {\n \"singleUseToken\": {\n \"id\": \"tokensam_bf_v8s9hv_2htw4m_nh4f45_y3hsft_wty\",\n \"details\": {\n \"brand\": \"Mastercard\",\n \"brandCode\": \"MASTERCARD\",\n \"sourceCardLast4\": \"1798\",\n \"expirationYear\": \"2020\",\n \"expirationMonth\": \"12\",\n \"binData\": {\n \"commercial\": \"UNKNOWN\",\n \"countryOfIssuance\": \"US\",\n \"debit\": \"NO\",\n \"durbinRegulated\": \"UNKNOWN\",\n \"healthcare\": \"YES\",\n \"issuingBank\": null,\n \"payroll\": \"UNKNOWN\",\n \"prepaid\": \"UNKNOWN\",\n \"productId\": \"123\"\n },\n \"origin\": {\n \"type\": \"SAMSUNG_PAY\",\n \"details\": {\n \"bin\": \"411111\"\n }\n }\n }\n }\n }\n },\n \"extensions\": {\n \"requestId\": \"9eaf90d9-4e8a-4883-96c4-01c02bb0a4e5\"\n }\n}", "reference":"tokensam_bf_v8s9hv_2htw4m_nh4f45_y3hsft_wty", "status":"AUTHORIZED", "payment_last4_dpan":"1798",