yoomoney / yookassa-android-sdk

This library allows implementing payment acceptance into mobile apps on Android. It works as an extension to the YooMoney API.
https://yookassa.ru/developers/payment-forms/android-sdk
MIT License
39 stars 22 forks source link

Duplicate class found in modules checkout-4.1.0 and yookassa-android-sdk-5.0.1 #62

Closed ghost closed 3 years ago

ghost commented 3 years ago
  1. Собираю проект со след зависимостями:
repositories {
    maven { url 'https://dl.bintray.com/yandex-money/maven' }
    maven { url 'https://dl.bintray.com/yoomoney/maven' }
}

dependencies {
    implementation 'com.yandex.money:checkout:4.1.0'
    implementation 'ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1'
    implementation fileTree(dir: "libs", include: ["*.aar"])
}

так же у меня в app/libs лежит ThreatMetrix Android SDK 5.4-73.aar

Зависимости 'ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1' и ThreatMetrix Android SDK 5.4-73.aar были взяты из публичного репозитория вашего SDK, implementation 'com.yandex.money:checkout:4.1.0' был взят из инструкции с вашего сайта.

  1. Вот такую ошибку получаю
Duplicate class a.a.a.a.a.a.a found in modules jetified-checkout-4.1.0-runtime (com.yandex.money:checkout:4.1.0) and jetified-yookassa-android-sdk-5.0.1-runtime (ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1)
Duplicate class a.a.a.a.a.a.b found in modules jetified-checkout-4.1.0-runtime (com.yandex.money:checkout:4.1.0) and jetified-yookassa-android-sdk-5.0.1-runtime (ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1)
Duplicate class a.a.a.a.a.a.c found in modules jetified-checkout-4.1.0-runtime (com.yandex.money:checkout:4.1.0) and jetified-yookassa-android-sdk-5.0.1-runtime (ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1)
Duplicate class a.a.a.a.a.a.d found in modules jetified-checkout-4.1.0-runtime (com.yandex.money:checkout:4.1.0) and jetified-yookassa-android-sdk-5.0.1-runtime (ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1)
Duplicate class a.a.a.a.a.a.e found in modules jetified-checkout-4.1.0-runtime (com.yandex.money:checkout:4.1.0) and jetified-yookassa-android-sdk-5.0.1-runtime (ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1)
Duplicate class a.a.a.a.a.a.f found in modules jetified-checkout-4.1.0-runtime (com.yandex.money:checkout:4.1.0) and jetified-yookassa-android-sdk-5.0.1-runtime (ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1)
Duplicate class a.a.a.a.a.b.a found in modules jetified-checkout-4.1.0-runtime (com.yandex.money:checkout:4.1.0) and jetified-yookassa-android-sdk-5.0.1-runtime (ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1)
Duplicate class a.a.a.a.a.c.a found in modules jetified-checkout-4.1.0-runtime (com.yandex.money:checkout:4.1.0) and jetified-yookassa-android-sdk-5.0.1-runtime (ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1)
  1. СДК работает только подключить ThreatMetrix Android SDK 5.4-73.aar и 'com.yandex.money:checkout:4.1.0'. С testParametrs UI оплаты открывается и можно получить тестовый токен. Если testParameters не передавать - то работает так: image

Как сделать что бы всё заработало?

iskandarshabaev commented 3 years ago

Здравствуйте. Зависимость com.yandex.money:checkout:4.1.0 нужно удалить, теперь вместо неё ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1

ghost commented 3 years ago

@iskandarshabaev а почему нужно удалить checkout? Библиотека на сайте отличается от этой? Если удалить checkout и оставить ru.yoo.sdk.kassa.payments:yookassa-android-sdk:5.0.1, то приложение падает на вызове createTokenizeIntent:

java.lang.NoSuchMethodError: No static method createTokenizeIntent$default(Landroid/content/Context;Lru/yoo/sdk/kassa/payments/PaymentParameters;Lru/yoo/sdk/kassa/payments/TestParameters;Lru/yoo/sdk/kassa/payments/UiParameters;ILjava/lang/Object;)Landroid/content/Intent; in class Lru/yoo/sdk/kassa/payments/Checkout; or its super classes (declaration of 'ru.yoo.sdk.kassa.payments.Checkout' appears in /data/app/io.loudplay.android.app-YuV_hcGgjwxuGwwv3OSvNw==/base.apk!classes3.dex)

если использовать этот метод с помощью рефлексии то в итоге ничего не меняется, и сдк показывает вот это image

iskandarshabaev commented 3 years ago

@s7aycool Как вы вызываете метод createTokenizeIntent? С какими параметрами? Заменили в проекте названия пакетов com.yandex.money:checkout.* на ru.yoo.sdk.kassa.payments.*?

ghost commented 3 years ago

@iskandarshabaev все названия пакетов поменял на ru.yoo.sdk.kassa.payments.*

createTokenizeIntent вызываю следующим образом:

    fun startCheckout(amount: Amount, title: String) {
        val paymentParameters = PaymentParameters(
                amount = amount,
                title = title,
                subtitle = resources.getString(R.string.buy_hours),
                clientApplicationKey = "live_<our key>",
                shopId = "<our_shop_id>",
                savePaymentMethod = SavePaymentMethod.OFF,
                paymentMethodTypes = setOf(PaymentMethodType.BANK_CARD, PaymentMethodType.GOOGLE_PAY, PaymentMethodType.SBERBANK),
                gatewayId = "<our gateway id>",
                customReturnUrl = null,
                userPhoneNumber = null,
                authCenterClientId = null
        )

        val uiParams = UiParameters(true, ColorScheme(Color.rgb(0, 114, 245)))

        val intent = Checkout.createTokenizeIntent(
                context = requireContext(),
                paymentParameters = paymentParameters
        )

        startActivityForResult(intent, REQUEST_CODE_TOKENIZE)
      }
iskandarshabaev commented 3 years ago

@s7aycool Попробуйте передать все параметры для этого метода:

Checkout.createTokenizeIntent(
    context = requireContext(),
    paymentParameters = paymentParameters,
    testParameters = TestParameters(),
    uiParameters = uiParams
)
iskandarshabaev commented 3 years ago

В ближайшем релизе исправим падение c java.lang.NoSuchMethodError при вызове Checkout.createTokenizeIntent() без передачи параметров testParameters и uiParameters.

ghost commented 3 years ago

Так если я передам testParameters токен станет тестовым,верно?

пн, 7 дек. 2020 г. в 19:47, iskandarshabaev notifications@github.com:

В ближайшем релизе исправим падение c java.lang.NoSuchMethodError при вызове Checkout.createTokenizeIntent() без передачи параметров testParameters и uiParameters.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub https://github.com/yoomoney/yookassa-android-sdk/issues/62#issuecomment-740039392, or unsubscribe https://github.com/notifications/unsubscribe-auth/AOIZNMY7YX3LVYEGT46RXZLSTUBJ3ANCNFSM4UKWN36Q .

iskandarshabaev commented 3 years ago

@s7aycool Нет, токен тестовым от этого не станет. Если вы передадите просто TestParameters() с дефолтным конструктором, то никаких моков, логов и тестовых токенов не будет.

ghost commented 3 years ago

@iskandarshabaev попробовал передавать таким образом:

Checkout.createTokenizeIntent(
    context = requireContext(),
    paymentParameters = paymentParameters,
    testParameters = TestParameters(),
    uiParameters = uiParams
)

результат: image

что может быть не так? Возможно у нас в личном кабинете что-то не так оформлено?

iskandarshabaev commented 3 years ago

@s7aycool Пришлите пожалуйста логи при запуске Checkout.createTokenizeIntent Вы подставляете свои значения в параметры?:

ghost commented 3 years ago

Да, подставляю свои значения.

Лог:

D/YooKassa.SDK: Load payment option list: invoke with PaymentOptionAmountInputModel(amount=Amount(value=100, currency=RUB))
D/YooKassa.SDK: Load payment option list: progress: PaymentOptionListProgressViewModel(showLogo=true)
D/YooKassa.SDK: Load payment option list: error: null
 a.a.a.a.a.e.g.f
     at a.a.a.a.a.e.g.b.a(:17)
     at a.a.a.a.a.e.g.b.invoke(Unknown Source:2)
     at a.a.a.a.a.a.s0.i0.invoke(Unknown Source:2)
     at a.a.a.a.a.d.k$b.invoke(:7)
     at a.a.a.a.a.d.c.run(Unknown Source:2)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
     at java.lang.Thread.run(Thread.java:929)
 D/YooKassa.SDK: Load payment option list: viewModel: PaymentOptionListFailViewModel(error=Нет доступных способов оплаты, showLogo=true)
iskandarshabaev commented 3 years ago

@s7aycool Напишите пожалуйста нам на b2b_support@yoomoney.ru Укажите в письме ваш shopId и что не получается загрузить список платежей. Посмотрим на беках логи и поймём что не так.

ghost commented 3 years ago

@iskandarshabaev Спасибо! Отправил вам письмо с темой "Yoomoney SDK Android: нет доступных способов оплаты"

ghost commented 3 years ago

@iskandarshabaev поддержка ваша ответила очень быстро и помогла всё решить, спасибо! Проблема была в gatewayId. Было бы конечно удобно увидеть эту ошибку сразу в логах

iskandarshabaev commented 3 years ago

@s7aycool Рады помочь. Про gateway подумаем что можно сделать, спасибо за идею.

labrador116 commented 3 years ago

@iskandarshabaev Не использую авторизацию и не принимаю платежи с кошелька Ю-мани

2020-12-10 13:56:48.941 11211-11211/ru.liber4.liberation E/AndroidRuntime: FATAL EXCEPTION: main Process: ru.liber4.liberation, PID: 11211 java.lang.NoClassDefFoundError: Failed resolution of: Lcom/threatmetrix/TrustDefender/TrustDefender; at a.a.a.a.a.a.e.a(:7) at ru.yoo.sdk.kassa.payments.impl.CheckoutActivity.a(:23) at ru.yoo.sdk.kassa.payments.impl.CheckoutActivity.onCreate(:2) at android.app.Activity.performCreate(Activity.java:7893) at android.app.Activity.performCreate(Activity.java:7880) at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1307) at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3283) at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3457) at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2044) at android.os.Handler.dispatchMessage(Handler.java:107) at android.os.Looper.loop(Looper.java:224) at android.app.ActivityThread.main(ActivityThread.java:7562) at java.lang.reflect.Method.invoke(Native Method) at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:539) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)

Пришел сбер и посыпались проблемы

iskandarshabaev commented 3 years ago

@labrador116 Кажется не хватает либы ThreatMetrix Android SDK 5.4-73.aar. Вы её положили в libs? Тут есть небольшая инструкция https://github.com/yoomoney/yookassa-android-sdk#подключение-через-gradle