Skip to content
This repository has been archived by the owner. It is now read-only.

Commit

Permalink
release 2.1.0
Browse files Browse the repository at this point in the history
  • Loading branch information
fessmax committed Apr 7, 2023
1 parent 4ae5ac1 commit 5ad52c3
Show file tree
Hide file tree
Showing 4 changed files with 115 additions and 2 deletions.
4 changes: 4 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ android {
versionCode 1
versionName "1.0"
multiDexEnabled true

manifestPlaceholders = [
YANDEX_CLIENT_ID: "baaa4b67539a4f479145b644a07cf30a"
]
}

buildTypes {
Expand Down
6 changes: 4 additions & 2 deletions sdk/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,8 @@ android {
minSdkVersion 23
targetSdkVersion 33

versionCode 4
versionName "2.1.0_no_yandex"
versionCode 5
versionName "2.1.0"

vectorDrawables.useSupportLibrary = true
multiDexEnabled true
Expand Down Expand Up @@ -86,6 +86,8 @@ dependencies {

implementation 'ru.tinkoff.decoro:decoro:1.5.1'

implementation 'com.yandex.pay:core:0.2.1'

implementation 'org.jsoup:jsoup:1.13.1'

implementation 'com.amplitude:analytics-android:1.0+'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ import com.google.android.gms.common.api.CommonStatusCodes
import com.google.android.gms.common.api.ResolvableApiException
import com.google.android.gms.wallet.PaymentData
import com.google.android.material.textfield.TextInputLayout
import com.yandex.pay.core.*
import com.yandex.pay.core.data.*
import com.yandex.pay.core.data.Amount
import com.yandex.pay.core.ui.YandexPayButton
import jp.wasabeef.glide.transformations.RoundedCornersTransformation
import ru.cloudtips.sdk.BuildConfig
import ru.cloudtips.sdk.R
Expand Down Expand Up @@ -64,6 +68,7 @@ class PaymentInfoFragment : Fragment(R.layout.fragment_payment_info), ClickableU
super.onAttach(context)
gPayClient = GPayClient(context)
listener = context as? IPaymentInfoListener
initYPayment()
}

override fun onDetach() {
Expand Down Expand Up @@ -115,6 +120,8 @@ class PaymentInfoFragment : Fragment(R.layout.fragment_payment_info), ClickableU
} else {
updateGooglePayButton(false)
}
updateYPayButton(YandexPayLib.isSupported)
amplitude.trackLayoutShow(data)
} else {
//TODO: show error
}
Expand Down Expand Up @@ -157,6 +164,12 @@ class PaymentInfoFragment : Fragment(R.layout.fragment_payment_info), ClickableU
viewModel.trackPayClick(PayType.GOOGLEPAY)
}
}
ypayButton.setOnClickListener(YandexPayButton.OnClickListener {
if (validatePayClick()) {
launchPaymentClick { requestYPayClick() }
viewModel.trackPayClick(PayType.YANDEXPAY)
}
})
}

private fun fillLogoView() = with(viewBinding) {
Expand Down Expand Up @@ -290,12 +303,96 @@ class PaymentInfoFragment : Fragment(R.layout.fragment_payment_info), ClickableU
listener?.onPaymentFailure(payType)
}

private fun updateYPayButton(available: Boolean) = with(viewBinding) {
ypayButton.visibility = if (available) View.VISIBLE else View.GONE
}

private fun initYPayment() {
if (YandexPayLib.isSupported) {
val environment: YandexPayEnvironment
val logging: Boolean
if (BuildConfig.DEBUG) {
environment = YandexPayEnvironment.SANDBOX
logging = true
} else {
environment = YandexPayEnvironment.PROD
logging = false
}
YandexPayLib.initialize(
requireContext(), YandexPayLibConfig(
environment = environment,
logging = logging,
locale = YandexPayLocale.RU,
merchantDetails = Merchant(
id = MerchantId.from(getString(R.string.ypay_merchant_id)),
name = getString(R.string.ypay_merchant_name),
url = getString(R.string.ypay_merchant_url)
)
)
)
}
}

private fun requestYPayClick() = with(viewBinding) {
ypayButton.isClickable = false
viewModel.getMerchantId().observe(viewLifecycleOwner) {
val publicId = it?.publicId ?: ""
val name = if (!nameTextView.text.isNullOrEmpty()) nameTextView.text.toString() else "CloudTips"
yandexPayLauncher.launch(
OrderDetails(
order = Order(
id = OrderID.from(name),
amount = Amount.from(getAmount().toString()),
label = name,
listOf()
),
paymentMethods = listOf(
PaymentMethod(
allowedAuthMethods = listOf(AuthMethod.PanOnly),
type = PaymentMethodType.Card,
gateway = Gateway.from("cloudpayments"),
allowedCardNetworks = listOf(CardNetwork.Visa, CardNetwork.MasterCard, CardNetwork.MIR),
gatewayMerchantId = GatewayMerchantID.from(publicId),
)
)
)
)
}
}

private val yandexPayLauncher = registerForActivityResult(OpenYandexPayContract()) { result: YandexPayResult ->
viewBinding.ypayButton.isClickable = true
when (result) {
is YandexPayResult.Success -> handleYPaySuccess(result.paymentToken)
is YandexPayResult.Failure -> when (result) {
is YandexPayResult.Failure.Validation -> handleYPayFailure(result.details.name)
is YandexPayResult.Failure.Internal -> handleYPayFailure(result.message)
}
YandexPayResult.Cancelled -> {}
}
}

private fun handleYPaySuccess(paymentToken: PaymentToken) {
val token = String(Base64.decode(paymentToken.toString(), Base64.DEFAULT))
showSpinner()
viewModel.launchYPayment(token).observe(viewLifecycleOwner) { response ->
hideSpinner()
handlePaymentResponse(response, PayType.YANDEXPAY)
}
}

private fun handleYPayFailure(message: String?) {
Log.w("loadPaymentData failed", String.format("Ya payment error: %s", message))
onPaymentFailure(PayType.YANDEXPAY)
}

override fun onAuthorizationCompleted(md: String, paRes: String, payType: PayType) {
showSpinner()
viewModel.postPayment3ds(md, paRes).observe(this) {
hideSpinner()
handlePaymentResponse(it, payType)
}

}

override fun onAuthorizationFailed(error: String?, payType: PayType) {
Expand Down
10 changes: 10 additions & 0 deletions sdk/src/main/res/layout/fragment_payment_info.xml
Original file line number Diff line number Diff line change
Expand Up @@ -539,6 +539,16 @@
android:layout_marginTop="24dp"
android:text="@string/link_edit_payment_page_bank_button" />

<com.yandex.pay.core.ui.YandexPayButton
android:id="@+id/ypay_button"
android:layout_width="match_parent"
android:layout_height="@dimen/button_height"
android:layout_marginHorizontal="16dp"
android:layout_marginTop="12dp"
android:visibility="gone"
app:yandexpay_color_scheme="dark"
app:yandexpay_corner_radius="@dimen/button_corner_radius" />

<FrameLayout
android:id="@+id/gpay_button"
android:layout_width="match_parent"
Expand Down

0 comments on commit 5ad52c3

Please sign in to comment.