tinkoff-mobile-tech / tinkoff-asdk-ios

Tinkoff Acquiring SDK
https://tinkoff.ru/kassa
45 stars 34 forks source link

бесконечная загрузка #235

Closed StIch0 closed 1 year ago

StIch0 commented 1 year ago
    let paymentStageConfiguration = AcquiringPaymentStageConfiguration(paymentStage: .finish(paymentId: paymentId))

    uiSdk.presentPaymentView(
      on: viewController,
      acquiringPaymentStageConfiguration: paymentStageConfiguration,
      configuration: acquiringViewConfiguration(
        cartItems: cartItems,
        email: email,
        phone: phone),
      tinkoffPayDelegate: nil)

      Добрый день. у меня paymentId создается на сервере 

      я его передаю как параметр в AcquiringPaymentStageConfiguration

      при вызове uiSdk.presentPaymentView получаю бесконечную загрузку 

Simulator Screen Shot - iPhone X - 2022-12-12 at 14 06 28

подскажите, в чем может быть ошибка ?

akhaman commented 1 year ago

Привет! Вероятно ошибка в переданных параметрах - не хватает аргумента customerKey (идентификатор покупателя в системе продавца).

Попробуй так:

let customerKey: String

 uiSdk.presentPaymentView(
      on: viewController,
      customerKey: customerKey,
      acquiringPaymentStageConfiguration: paymentStageConfiguration,
      configuration: acquiringViewConfiguration(
        cartItems: cartItems,
        email: email,
        phone: phone),
      tinkoffPayDelegate: nil)
StIch0 commented 1 year ago

@akhaman Спасибо помогло. но столкнулся с другой ошибкой. Error: The operation couldn’t be completed. (Запрашиваемое состояние транзакции является неверным. Изменение статуса недопустимо. error 4.)

не подскажете, в чем тут может быть ошибка ?

akhaman commented 1 year ago

Ошибка с бекенда эквайринга. Есть возможность прислать цепочку отправленных запросов и полученных ответов? Можно прям экспортировать сессию Charles / Proxyman или любым другим удобным способом. Передам коллегам

StIch0 commented 1 year ago

@akhaman притом, что paymentId создался на сервере 2090150772 let paymentStageConfiguration = AcquiringPaymentStageConfiguration(paymentStage: .finish(paymentId: paymentId))

URL https://securepay.tinkoff.ru/v2/GetCardList

URL | https://securepay.tinkoff.ru/v2/Check3dsVersion

request { "CardData": "GwovC0JkXW+L5hyTPCL544cIdGtluePq4X7\/lGqjnEj73O3JP4pv3MuUri\/A7X8LB6o7Lk6vF4igYD\/o9jE5ZZIKjSngsgXNFJN0IFXDCvC\/yMbwbI3fZhcSwj0SujzlmGfmJeEHQOklKoWxVLilS3bXS7wlb8\/mjTedsqzpzDzRbfo683zc4iQvqWCGzcZtqPV6\/72nHbj2uz6Cnivbn3DTRYWbTSs1qinm4t5+dzT7eR1k7Z5rZA68UZ36alxiBz+6PpiFXYB8HJHnWtYrsGdbMBmLNidcjs48xTRRag3GL0K7cvwOmmxAodeb1ZB3eWGwgOT\/Y2bq6IDQyR2swQ==", "PaymentId": "2090186400", "TerminalKey": "1668154831496DEMO", "Token": "52edf7fe368b10a4b241b4b4462a20a3e54e3ad3aff35cffa6a65afcc35fed2b" }

response { "Success": true, "ErrorCode": "0", "Message": "OK", "Version": "1" } -- | --

URL | https://securepay.tinkoff.ru/v2/FinishAuthorize

request { "CardData": "Ulegy2p+u\/9nrYwgoWQMoplI43Zo1tp4YCzDj0o68nqxXBSj4rFClx8dSWfD2jn7nnAcW0629o\/0bEtRssp10OeZ3kk2HeF4nsaY9QAA4zGqp2VOipqDT2\/fm0ltYHnIb8RGC\/27mQt+3f8OEq8wpqMH2qlFGre2o8QOV0e0msWXP12U3+64NwxmMgRO+MGUO5zeu4ZkeQgn7XNEj7TWK4tzDe5XDFYTE8+G8tCIqlU0T46GsnacU9+9kKkTrAbZpjVcsr\/PKiW\/2+zaWTKJBPwMHYks32FN5xTOxcuv35GGq+WSPQ3g9SAJ0uCA8f0W+ZLvgP7B\/6UpB1IE\/nXt9Q==", "InfoEmail": "loluich@gmail.com", "PaymentId": "2090186400", "SendEmail": true, "TerminalKey": "1668154831496DEMO", "Token": "1ed55023ae34747ecfe753ec9ac1dd9f60d12504ba56e2ec65664828a1114988" }

response { "Success": false, "ErrorCode": "4", "Message": "Запрашиваемое состояние транзакции является неверным.", "Details": "Изменение статуса недопустимо." } -- | --

akhaman commented 1 year ago

@StIch0 Тут в рамках одного сообщения разные paymentId:

притом, что paymentId создался на сервере 2090150772

"PaymentId": "2090186400"

Может в этом причина?

StIch0 commented 1 year ago

@akhaman может быть но я передаю в AcquiringPaymentStageConfiguration paymentId с сервера let paymentStageConfiguration = AcquiringPaymentStageConfiguration(paymentStage: .finish(paymentId: paymentId))

         uiSdk.presentPaymentView(
      on: viewController,
      customerKey: userId,
      acquiringPaymentStageConfiguration: paymentStageConfiguration,
      configuration: acquiringViewConfiguration(
        cartItems: cartItems,
        email: email,
        phone: phone)
    )
    { result in
      self.responseReviewing(result,
                             resolver: resolve,
                             rejecter: reject)
    }
  }
akhaman commented 1 year ago

Окей, выясняем

StIch0 commented 1 year ago

tinkoff.txt

@akhaman если что отправляю сессию тут цепочки из 2 разных заказов

akhaman commented 1 year ago

Еще разбираемся)

Есть возможность прислать сюда скринкаст с воспроизведением этой проблемы?

И еще вопрос, коллеги на андроиде тоже сталкиваются с этой проблемой или она только на iOS?

StIch0 commented 1 year ago

@akhaman на Андройд такая же проблема там также прокидываю paymentId

tinkoffAcquiring?.openPaymentScreen( this.currentActivity!!, paymentOptions, 1, SelectCardAndPayState((paymentId.toLong())) )

        return PaymentOptions()
            .setOptions {
                orderOptions {
                    orderId = id
                    amount = Money.ofCoins((totalPrice*100).toLong())
                    title = "Оплата"
                    description = desc
                    recurrentPayment = false
                    receipt = myReceipt
                }
                customerOptions {
                    customerKey = userId
                    checkType = CheckType.NO.toString()
                    email = userEmail
                }
                featuresOptions {
                    localizationSource = AsdkSource(Language.RU)
                    handleCardListErrorInSdk = false
                    useSecureKeyboard = true
                    validateExpiryDate = false
                    cameraCardScanner = null
                    fpsEnabled = false
                    tinkoffPayEnabled = false
                    darkThemeMode = DarkThemeMode.AUTO
                    userCanSelectCard = false
                    duplicateEmailToReceipt = false
                    emailRequired = true

                }
                asdkState = SelectCardAndPayState(paymentId.toLong());
            }

https://user-images.githubusercontent.com/21060259/207182921-8b9c8c84-821c-4e43-97bb-b224c6510c04.mp4

akhaman commented 1 year ago

Описанная выше ошибка вероятно связана с беком, мобильный SDK получает некорректный ответ в v2/FinishAuthorize

Направь пожалуйста обращение в поддержку, ребята разберутся

StIch0 commented 1 year ago

@akhaman хорошо, спасибо написал в поддержку прикрепил ссылку на этот issues

akhaman commented 1 year ago

Хорошо. Этот issue я закрываю, поскольку он был изначально связан с проблемой бесконечной загрузки, а ее мы решили. Если появятся новые вопросы/проблемы с мобильным SDK, заведи новое обращение)