diff --git a/CHANGELOG.md b/CHANGELOG.md index ff1655af37..b28f1e2f84 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ All notable changes to this project will be documented in this file. ## UNRELEASED ### Added +* core: Add customer info needed for a Google Pay payment provider ### Changed ### Removed ### Fixed 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/Checkout.kt b/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt index 58825bf5bb..fa617f0481 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/Checkout.kt @@ -399,10 +399,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, @@ -545,11 +543,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 d48e57627b..d47e059bf7 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/CheckoutApi.kt @@ -310,6 +310,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/checkout/DefaultCheckoutApi.kt b/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt index 05a501b8c3..b48c964470 100644 --- a/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt +++ b/core/src/main/java/io/snabble/sdk/checkout/DefaultCheckoutApi.kt @@ -21,6 +21,7 @@ import java.util.concurrent.TimeUnit class DefaultCheckoutApi(private val project: Project, private val shoppingCart: ShoppingCart ) : CheckoutApi { + private val okHttpClient: OkHttpClient = project.okHttpClient private var call: Call? = null 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) }