diff --git a/AndroidSdk/build.gradle b/AndroidSdk/build.gradle index a2a8ea3..7f06df5 100644 --- a/AndroidSdk/build.gradle +++ b/AndroidSdk/build.gradle @@ -4,13 +4,11 @@ plugins { } android { - compileSdk 31 + compileSdk 33 defaultConfig { minSdk 21 - targetSdk 31 - versionCode 1 - versionName "2.0.0" + targetSdk 33 testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" @@ -37,6 +35,7 @@ android { viewBinding { enabled = true } + namespace 'com.recurly.androidsdk' } dependencies { diff --git a/AndroidSdk/src/main/AndroidManifest.xml b/AndroidSdk/src/main/AndroidManifest.xml index d36ae30..b9d7d40 100644 --- a/AndroidSdk/src/main/AndroidManifest.xml +++ b/AndroidSdk/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ - + diff --git a/AndroidSdk/src/main/java/com/recurly/androidsdk/data/network/TokenService.kt b/AndroidSdk/src/main/java/com/recurly/androidsdk/data/network/TokenService.kt index 3d5c7fd..935dde4 100644 --- a/AndroidSdk/src/main/java/com/recurly/androidsdk/data/network/TokenService.kt +++ b/AndroidSdk/src/main/java/com/recurly/androidsdk/data/network/TokenService.kt @@ -6,6 +6,8 @@ import com.recurly.androidsdk.data.model.tokenization.TokenizationResponse import com.recurly.androidsdk.data.network.core.RetrofitHelper import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext +import retrofit2.HttpException +import java.io.IOException class TokenService { @@ -23,37 +25,71 @@ class TokenService { */ suspend fun getToken(request: TokenizationRequest): TokenizationResponse { return withContext(Dispatchers.IO) { - val response = - retrofit.create(RecurlyApiClient::class.java).recurlyTokenization( - first_name = request.firstName, - last_name = request.lastName, - company = request.company, - address1 = request.addressOne, - address2 = request.addressTwo, - city = request.city, - state = request.state, - postal_code = request.postalCode, - country = request.country, - phone = request.phone, - vat_number = request.vatNumber, - tax_identifier = request.taxIdentifier, - tax_identifier_type = request.taxIdentifierType, - number = request.cardNumber, - month = request.expirationMonth, - year = request.expirationYear, - cvv = request.cvvCode, - version = request.sdkVersion, - key = request.publicKey, - deviceId = request.deviceId, - sessionId = request.sessionId + try { + val response = + retrofit.create(RecurlyApiClient::class.java).recurlyTokenization( + first_name = request.firstName, + last_name = request.lastName, + company = request.company, + address1 = request.addressOne, + address2 = request.addressTwo, + city = request.city, + state = request.state, + postal_code = request.postalCode, + country = request.country, + phone = request.phone, + vat_number = request.vatNumber, + tax_identifier = request.taxIdentifier, + tax_identifier_type = request.taxIdentifierType, + number = request.cardNumber, + month = request.expirationMonth, + year = request.expirationYear, + cvv = request.cvvCode, + version = request.sdkVersion, + key = request.publicKey, + deviceId = request.deviceId, + sessionId = request.sessionId + ) + + response.body() ?: TokenizationResponse( + "", "", ErrorRecurly( + errorCode = response.code().toString(), + errorMessage = response.message(), + fields = emptyList(), + details = emptyList() + ) + ) + } catch (exception: HttpException) { + exception.printStackTrace() + TokenizationResponse( + error = ErrorRecurly( + errorCode = exception.code().toString(), + errorMessage = exception.message(), + fields = listOf(exception.response()?.body().toString()), + details = emptyList(), + ) ) - response.body() ?: TokenizationResponse( - "", "", ErrorRecurly( - "", "", emptyList(), - emptyList() + } catch (ioException: IOException) { + ioException.printStackTrace() + TokenizationResponse( + error = ErrorRecurly( + errorCode = "recurly-client-android-internet-connection", + errorMessage = "Your internet connection appears to be offline", + fields = emptyList(), + details = emptyList(), + ) ) - ) + } catch (exception: Exception) { + exception.printStackTrace() + TokenizationResponse( + error = ErrorRecurly( + errorCode = "recurly-client-android-networking", + errorMessage = exception.localizedMessage ?: "", + fields = emptyList(), + details = emptyList(), + ) + ) + } } } - } \ No newline at end of file diff --git a/AndroidSdk/src/main/java/com/recurly/androidsdk/data/network/core/RetrofitHelper.kt b/AndroidSdk/src/main/java/com/recurly/androidsdk/data/network/core/RetrofitHelper.kt index b0736a8..8e4fb4d 100644 --- a/AndroidSdk/src/main/java/com/recurly/androidsdk/data/network/core/RetrofitHelper.kt +++ b/AndroidSdk/src/main/java/com/recurly/androidsdk/data/network/core/RetrofitHelper.kt @@ -1,6 +1,6 @@ package com.recurly.androidsdk.data.network.core -import okhttp3.OkHttpClient +import com.recurly.androidsdk.data.model.RecurlySessionData import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory @@ -10,10 +10,16 @@ internal object RetrofitHelper { * Builds the retrofit for its direct use * @return Retrofit */ - fun getRetrofit(): Retrofit{ + fun getRetrofit(): Retrofit { + val defaultURL = "https://api.recurly.com/" + val defaultURLEU = "https://api.eu.recurly.com/" + + val baseUrl = + if (RecurlySessionData.getPublicKey().startsWith("fra-")) defaultURLEU else defaultURL + return Retrofit.Builder() .client(OkHttpHelper.getOkHttpClient()) - .baseUrl("https://api.recurly.com/") + .baseUrl(baseUrl) .addConverterFactory(GsonConverterFactory.create()) .build() } diff --git a/app/build.gradle b/app/build.gradle index 4d53c9a..f1246d3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -4,12 +4,12 @@ plugins { } android { - compileSdk 31 + compileSdk 33 defaultConfig { applicationId "com.recurly.android" minSdk 21 - targetSdk 31 + targetSdk 33 versionCode 1 versionName "2.0.0" @@ -36,6 +36,7 @@ android { viewBinding { enabled = true } + namespace 'com.recurly.android' } dependencies { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cab5c48..69fd94b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ diff --git a/build.gradle b/build.gradle index 384e30b..01a3cab 100644 --- a/build.gradle +++ b/build.gradle @@ -5,8 +5,8 @@ buildscript { mavenCentral() } dependencies { - classpath "com.android.tools.build:gradle:7.2.2" - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.0" + classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21' classpath 'com.vanniktech:gradle-maven-publish-plugin:0.21.0' // NOTE: Do not place your application dependencies here; they belong