Updated on 2026-08-14

This commit is contained in:
Tangem 2020-09-01 10:21:18 +03:00
parent 12b5d855bd
commit 0b75473cb6
29 changed files with 617 additions and 75 deletions

View file

@ -0,0 +1,49 @@
package com.tangem.tap.network
import com.squareup.moshi.FromJson
import com.squareup.moshi.Moshi
import com.squareup.moshi.ToJson
import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import com.tangem.wallet.BuildConfig
import okhttp3.Interceptor
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Converter
import retrofit2.Retrofit
import retrofit2.converter.moshi.MoshiConverterFactory
import java.math.BigDecimal
fun createRetrofitInstance(
baseUrl: String,
interceptors: List<Interceptor> = emptyList(),
): Retrofit {
val okHttpBuilder = OkHttpClient.Builder()
interceptors.forEach { okHttpBuilder.addInterceptor(it) }
if (BuildConfig.DEBUG) okHttpBuilder.addInterceptor(createHttpLoggingInterceptor())
return Retrofit.Builder()
.baseUrl(baseUrl)
.addConverterFactory(createMoshiConverterFactory())
.client(okHttpBuilder.build())
.build()
}
fun createMoshiConverterFactory(): Converter.Factory = MoshiConverterFactory.create(createMoshi())
fun createMoshi(): Moshi = Moshi.Builder()
.add(BigDecimalAdapter)
.add(KotlinJsonAdapterFactory()).build()
private fun createHttpLoggingInterceptor(): HttpLoggingInterceptor {
val logging = HttpLoggingInterceptor()
logging.level = HttpLoggingInterceptor.Level.BODY
return logging
}
private object BigDecimalAdapter {
@FromJson
fun fromJson(string: String) = BigDecimal(string)
@ToJson
fun toJson(value: BigDecimal) = value.toString()
}

View file

@ -0,0 +1,26 @@
package com.tangem.tap.network.payid
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query
interface PayIdApi {
@GET(API_PAY_ID_TANGEM)
suspend fun getPayId(
@Query("cid") cardId: String,
@Query("key") publicKey: String
): PayIdResponse
@POST(API_PAY_ID_TANGEM)
suspend fun setPayId(
@Query("cid") cardId: String,
@Query("key") publicKey: String,
@Query("payid") payId: String,
@Query("address") address: String,
@Query("network") network: String
): SetPayIdResponse
companion object {
const val API_PAY_ID_TANGEM = "https://payid.tangem.com/"
}
}

View file

@ -0,0 +1,38 @@
package com.tangem.tap.network.payid
import com.squareup.moshi.JsonClass
import com.tangem.commands.common.network.Result
import com.tangem.commands.common.network.performRequest
import com.tangem.tap.network.createRetrofitInstance
import retrofit2.Retrofit
class PayIdService {
private val payIdApi: PayIdApi by lazy {
provideRetrofit()
.create(PayIdApi::class.java)
}
suspend fun getPayId(cardId: String, publicKey: String): Result<PayIdResponse> {
return performRequest { payIdApi.getPayId(cardId, publicKey) }
}
suspend fun setPayId(
cardId: String, publicKey: String, payId: String, address: String, network: String
): Result<SetPayIdResponse> {
return performRequest { payIdApi.setPayId(cardId, publicKey, payId, address, network) }
}
private fun provideRetrofit(): Retrofit = createRetrofitInstance("https://tangem.com/")
}
@JsonClass(generateAdapter = true)
data class PayIdResponse(
val payId: String
)
@JsonClass(generateAdapter = true)
data class SetPayIdResponse(
val success: Boolean
)