Terminal.getInstance().clearCachedCredentials();
und ich trenne den Leser
Es ist nicht möglich, das Terminal zu initialisieren, wenn ich es versuche zu Terminal.initTerminal(), dann wird Ausnahme/Fehler angezeigt:
java.lang.IllegalStateException: Sie können initTerminal nur aufrufen, bevor Sie die Terminalinstanz anfordern erstmals. Wenn Sie versuchen, das Konto in Ihrer App zu wechseln, lesen Sie die Dokumentation zur Methode „clearCachedCredentials“.
Ich weiß nicht, ob dies ein Problem darstellt oder ob Stripe uns das Ändern von Konten innerhalb der App nicht zulässt.
Ich würde gerne wissen, ob es eine Möglichkeit gibt, das Verbindungstoken zu aktualisieren. Wenn es jemand weiß, dann lasst es mich bitte wissen. Ich habe viel Zeit damit verbracht. Vielen Dank
Ich habe es gesehen: https://github.com/stripe/stripe-termin ... /issues/88. aber ich kann das Problem nicht lösen
Mein Code =
Code: Select all
private fun initializeTerminal(idUserAppInstitution: Int, token: String, result: MethodChannel.Result) {
// Set the token globally in ApiClient
ApiClient.setToken(token)
val tokenProvider = TokenProvider(idUserAppInstitution)
if (!Terminal.isInitialized()) {
try {
// Initialize the terminal, passing the idUserAppInstitution to TokenProvider
Terminal.initTerminal(applicationContext, LogLevel.VERBOSE, tokenProvider, TerminalEventListener())
terminalInitialized = true
result.success("Stripe Initialized")
} catch (e: TerminalException) {
terminalInitialized = false
result.error("INITIALIZATION_ERROR", "Error initializing Terminal: ${e.message}", null)
}
} else {
terminalInitialized = true
result.success("Stripe Already Initialized")
}
}
package com.example.np_casse
import android.util.Log // Import the Log class for debugging purposes
import com.stripe.stripeterminal.external.callable.ConnectionTokenCallback
import com.stripe.stripeterminal.external.callable.ConnectionTokenProvider
import com.stripe.stripeterminal.external.models.ConnectionTokenException
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response
class TokenProvider(private val idUserAppInstitution: Int) : ConnectionTokenProvider {
// Override the fetchConnectionToken method
override fun fetchConnectionToken(callback: ConnectionTokenCallback) {
// Use ApiClient directly to get the service
val backendService = ApiClient.service
// Call the getConnectionToken method from the BackendService
backendService.getConnectionToken(idUserAppInstitution).enqueue(object : Callback {
override fun onResponse(call: Call, response: Response) {
if (response.isSuccessful) {
val connectionToken = response.body()
if (connectionToken != null && connectionToken.secret != null) {
// Log the response for debugging
Log.d("TokenProvider", "Successfully fetched connection token: ${connectionToken.secret}")
callback.onSuccess(connectionToken.secret)
} else {
val errorMessage = "Response body or secret is null"
Log.e("TokenProvider", errorMessage)
callback.onFailure(ConnectionTokenException(errorMessage))
}
} else {
// Capture detailed error info from the response
val errorMessage = response.errorBody()?.string() ?: "Unknown error"
val statusCode = response.code()
Log.e("TokenProvider", "Error fetching connection token. Status: $statusCode, Error: $errorMessage")
callback.onFailure(ConnectionTokenException("Failed to fetch connection token: $errorMessage"))
}
}
override fun onFailure(call: Call, t: Throwable) {
// Handle network or other failures
Log.e("TokenProvider", "Network failure: ${t.message}", t)
callback.onFailure(ConnectionTokenException("Failed to fetch connection token: ${t.message}"))
}
})
}
}