Я получил эту ошибку после того, как справился с приведенной ниже ошибкой в ssl handshake
ps: я знаю, что это не исправление и я могу принять все сертификаты, но сейчас мне нужно просто получить приложение работает
javax.net.ssl.SSLException: SSL handshake aborted: ssl=0x67a9e670: I/O error during system call, Connection reset by peer
Использую модификацию и охттп и php для бэкэнда
implementation "com.squareup.retrofit2:retrofit:$retrofit_version"
implementation "com.squareup.retrofit2:converter-gson:$retrofit_version"
implementation 'com.squareup.okhttp3:logging-interceptor:3.12.0'
Я пробовал следующее:
изменить RequestSuccessful на void, и это фактически делает ошибку исчезающей, и я получил ответ об успешном завершении, но по некоторым причинам нет влияния на сервер или базу данных
передать paymentId
непосредственно к payCash
без конструкции PayCashRequest
, но обнаружил необходимость сделать его парой значений ключей для бэкэнда
функции запроса
private fun payCash() {
val balance = SessionManager(this).getBalance()
val tk = TokenManager(this).loadToken().asBearerToken()
if (tripPrice <= balance) {
// cashProgressBar.show()
Timber.i("the request is ${PayCashRequest(paymentId.toString())}")
cashProgressBar?.show()
RetrofitClient.getInstance().api.payCash(
PayCashRequest(paymentId.toString()),
TokenManager(this).loadToken().asBearerToken()
).enqueue(object : Callback<RequestSuccessful> {
override fun onFailure(call: Call<RequestSuccessful>, t: Throwable) {
Timber.i("trowableerror ${t.message} and ${t.cause} stack trace {${t.stackTrace.iterator()}}")
cashProgressBar.gone()
paymentRootView.errorSnackBar(R.string.something_went_wrong)
}
override fun onResponse(
call: Call<RequestSuccessful>,
response: Response<RequestSuccessful>
) {
cashProgressBar.gone()
if (response.isSuccessful) {
Timber.i("Respnse is Done")
startActivity(Intent(applicationContext, BookingActivity::class.java))
finish()
} else if (response.code() == 302) {
val sessionManager: SessionManager by inject()
sessionManager.logoutUser(false)
} else {
Timber.i("error ${response.code()}")
paymentRootView.errorSnackBar(R.string.you_don_t_have_enouph_blanace)
}
}
})
} else {
Timber.i("error no enouch cash here ")
paymentRootView.errorSnackBar(R.string.you_don_t_have_enouph_blanace)
}
}
Okhttp клиент Builder
private fun okHttpClient(): OkHttpClient.Builder {
if (com.adeeela.BuildConfig.DEBUG) {
loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY
} else {
loggingInterceptor.level = HttpLoggingInterceptor.Level.NONE
}
return OkHttpClient.Builder().addInterceptor(loggingInterceptor)
// .addInterceptor(authInterceptor(token))
.followRedirects(false)
.followSslRedirects(false)
.readTimeout(30, TimeUnit.SECONDS)
.connectTimeout(30, TimeUnit.SECONDS)
.retryOnConnectionFailure(false)
.apply {
val trustManager by lazy {
val trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm())
trustManagerFactory.init(null as KeyStore?)
trustManagerFactory.trustManagers.first { it is X509TrustManager } as X509TrustManager
}
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP_MR1) {
try {
val sc = SSLContext.getInstance(TlsVersion.TLS_1_1.javaName())
sc.init(null, WebAccess.trustAllCerts, null)
sslSocketFactory(MySslFactory(sc.socketFactory), trustManager)
val cs = ConnectionSpec.Builder(ConnectionSpec.MODERN_TLS)
.tlsVersions(*MySslFactory.ALLOWED_TLS_VERSIONS)
.build()
val specs = ArrayList<ConnectionSpec>()
specs.add(cs)
specs.add(ConnectionSpec.COMPATIBLE_TLS)
specs.add(ConnectionSpec.CLEARTEXT)
connectionSpecs(specs)
} catch (exc: Exception) {
Log.e("OkHttpTLSCompat", "Error while setting TLS 1.1 and 1.2", exc)
}
}
}
}