From ed52ff93b7310550eabcc1c05e0d0c5477c90f76 Mon Sep 17 00:00:00 2001 From: Christian Maier Date: Mon, 25 Nov 2024 16:10:12 +0100 Subject: [PATCH 1/4] Add customer info for gpay payment provider --- .../java/io/snabble/sdk/checkout/Checkout.kt | 10 ++++------ .../java/io/snabble/sdk/checkout/CheckoutApi.kt | 3 +++ .../io/snabble/sdk/googlepay/GooglePayHelper.kt | 16 +++++++++++++++- 3 files changed, 22 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt b/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt index 1478559ffb..9795cbbc23 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt @@ -391,10 +391,8 @@ class Checkout @JvmOverloads constructor( /** * Authorize a for one-time use payment requests, e.g. sending tokenized payment data of google pay. */ - fun authorizePayment(encryptedOrigin: String?) { - val authorizePaymentRequest = AuthorizePaymentRequest( - encryptedOrigin = encryptedOrigin - ) + fun authorizePayment(authPayRequest: AuthorizePaymentRequest?) { + val authorizePaymentRequest = authPayRequest ?: AuthorizePaymentRequest() storedAuthorizePaymentRequest = authorizePaymentRequest checkoutProcess?.let { checkoutProcess -> checkoutApi.authorizePayment(checkoutProcess, @@ -528,11 +526,11 @@ class Checkout @JvmOverloads constructor( if (authorizePaymentUrl != null) { if (authorizePaymentRequestFailed) { authorizePaymentRequestFailed = false - authorizePayment(storedAuthorizePaymentRequest?.encryptedOrigin) + authorizePayment(storedAuthorizePaymentRequest) } else { val storedAuthorizePaymentRequest = storedAuthorizePaymentRequest if (storedAuthorizePaymentRequest != null) { - authorizePayment(storedAuthorizePaymentRequest.encryptedOrigin) + authorizePayment(storedAuthorizePaymentRequest) } else { notifyStateChanged(CheckoutState.REQUEST_PAYMENT_AUTHORIZATION_TOKEN) } diff --git a/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt b/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt index 588897944e..cc0d15d4be 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt @@ -292,6 +292,9 @@ data class PaymentResult( data class AuthorizePaymentRequest( val encryptedOrigin: String? = null, + val name: String? = null, + val countryCode: String? = null, + val state: String? = null ) data class Check( diff --git a/core/src/main/java/io/snabble/sdk/googlepay/GooglePayHelper.kt b/core/src/main/java/io/snabble/sdk/googlepay/GooglePayHelper.kt index d6a7eef6b8..374a909aaa 100644 --- a/core/src/main/java/io/snabble/sdk/googlepay/GooglePayHelper.kt +++ b/core/src/main/java/io/snabble/sdk/googlepay/GooglePayHelper.kt @@ -20,6 +20,7 @@ import com.google.gson.JsonObject import io.snabble.sdk.PaymentMethod import io.snabble.sdk.Project import io.snabble.sdk.Snabble +import io.snabble.sdk.checkout.AuthorizePaymentRequest import io.snabble.sdk.utils.GsonHolder import io.snabble.sdk.utils.Logger @@ -219,7 +220,18 @@ class GooglePayHelper( project.checkout.abortError() } else { val base64Token = String(Base64.encode(token.toByteArray(), Base64.NO_WRAP)) - project.checkout.authorizePayment(base64Token) + val address: BillingAddress? = jsonPaymentData.get("paymentMethodData") + ?.asJsonObject?.get("info") + ?.asJsonObject?.get("billingAddress") + ?.let { GsonHolder.get().fromJson(it, BillingAddress::class.java) } + project.checkout.authorizePayment( + AuthorizePaymentRequest( + encryptedOrigin = base64Token, + name = address?.name, + countryCode = address?.countryCode, + state = address?.administrativeArea + ) + ) } } catch (e: Exception) { project.checkout.abortError() @@ -240,6 +252,8 @@ class GooglePayHelper( } } +private data class BillingAddress(val name: String?, val countryCode: String?, val administrativeArea: String?) + interface IsReadyToPayListener { fun isReadyToPay(isReadyToPay: Boolean) } From 82facd91d8a63635aa1499fb256415e1703db709 Mon Sep 17 00:00:00 2001 From: Christian Maier Date: Tue, 26 Nov 2024 14:36:16 +0100 Subject: [PATCH 2/4] Update CHANGELOG.md --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a94a1e1bc9..278f1e8b41 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,10 @@ All notable changes to this project will be documented in this file. ### Removed ### Fixed +## [0.80.0] +### Addded +* core: Add customer info needed for a Google Pay payment provider + ## [0.79.0] ### Added * core: Add the shop services from meta data to Shop class From bd72b2d8ad79cfd497c6a7679d44e8e0fb07f94c Mon Sep 17 00:00:00 2001 From: Christian Maier Date: Mon, 2 Dec 2024 12:27:58 +0100 Subject: [PATCH 3/4] WIP: Added logging interceptor for more insight --- core/build.gradle.kts | 2 ++ .../java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 1fad2eebdd..cb3e9b067c 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -93,4 +93,6 @@ dependencies { testImplementation(libs.squareup.okhttp3.mockwebserver) testImplementation(libs.koltin.reflect) testImplementation(libs.androidx.coreTesting) + + implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") } diff --git a/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt b/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt index 28bd188a60..d8a30152a5 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt @@ -10,8 +10,8 @@ import io.snabble.sdk.utils.* import okhttp3.* import okhttp3.MediaType.Companion.toMediaType import okhttp3.RequestBody.Companion.toRequestBody +import okhttp3.logging.HttpLoggingInterceptor import java.io.IOException -import java.lang.Exception import java.net.HttpURLConnection.HTTP_CONFLICT import java.net.HttpURLConnection.HTTP_FORBIDDEN import java.net.HttpURLConnection.HTTP_NOT_FOUND @@ -22,7 +22,11 @@ import java.util.concurrent.TimeUnit class DefaultCheckoutApi(private val project: Project, private val shoppingCart: ShoppingCart ) : CheckoutApi { - private val okHttpClient: OkHttpClient = project.okHttpClient + + private val okHttpClient: OkHttpClient = project.okHttpClient.newBuilder() + .addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY }) + .build() + private var call: Call? = null override fun cancel() { From d5765b7aee7003053177e9914177e71a39acf1bf Mon Sep 17 00:00:00 2001 From: Fabian Bender Date: Tue, 22 Apr 2025 11:54:12 +0200 Subject: [PATCH 4/4] remove logging interceptor --- .../main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt b/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt index 02414044bb..b48c964470 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt @@ -10,7 +10,6 @@ import io.snabble.sdk.utils.* import okhttp3.* import okhttp3.MediaType.Companion.toMediaType import okhttp3.RequestBody.Companion.toRequestBody -import okhttp3.logging.HttpLoggingInterceptor import java.io.IOException import java.net.HttpURLConnection.HTTP_CONFLICT import java.net.HttpURLConnection.HTTP_FORBIDDEN @@ -23,10 +22,7 @@ class DefaultCheckoutApi(private val project: Project, private val shoppingCart: ShoppingCart ) : CheckoutApi { - private val okHttpClient: OkHttpClient = project.okHttpClient.newBuilder() - .addInterceptor(HttpLoggingInterceptor().apply { level = HttpLoggingInterceptor.Level.BODY }) - .build() - + private val okHttpClient: OkHttpClient = project.okHttpClient private var call: Call? = null override fun cancel() {