Comment on page
Android
Prebuilt checkout page
Custom payment flow
Pass a
customerId
to MoneyCollect and attach it to the customer. // Use your customerId
var customerId = "cus_1452880617225281538"
When creating a payment method, you can specify
customer parameters
to automatically attach the payment method to an existing customer.//RequestCreatePayment object
var testRequestPayment = TestRequestData.testRequestPayment
//RequestConfirmPayment object
var testConfirmPayment = TestRequestData.testConfirmPayment
//RequestPaymentMethod object
var testRequestPaymentMethod = TestRequestData.testRequestPaymentMethod
//support payment credit card
var testBankIvList = TestRequestData.testBankIvList
//customerId
var customerId = TestRequestData.customerId
//build Bundle object
var bundle = Bundle()
//pass currentPaymentModel
bundle.putSerializable(Constant.CURRENT_PAYMENT_MODEL,currentPaymentModel)
//pass RequestCreatePayment
bundle.putParcelable(Constant.CREATE_PAYMENT_REQUEST_TAG,testRequestPayment)
//pass RequestConfirmPayment
bundle.putParcelable(Constant.CONFIRM_PAYMENT_REQUEST_TAG,testConfirmPayment)
//pass customerId
bundle.putString(Constant.CUSTOMER_ID_TAG,TestRequestData.customerId)
//pass default RequestPaymentMethod
bundle?.putParcelable(Constant.CREATE_PAYMENT_METHOD_REQUEST_TAG,testRequestPaymentMethod)
//pass default supportBankList
bundle?.putSerializable(Constant.SUPPORT_BANK_LIST_TAG, testBankIvList)
//PayCardActivity contain SaveWithPaymentCardFragment and AddWithPaymentFragment,Support them to switch to each other
var intent = Intent(this, PayCardActivity::class.java)
intent.putExtra(CURRENT_PAYMENT_BUNDLE, bundle)
//start payment
startActivityLauncher.launch(intent)
TestRequestData details please refer to TestRequestData data class under MoneycollectSDK Demo.

- 1.Tap
Checkout
button to pay inHosted Payment Page
mode. - 2.In
Hosted payment page
,select the previously saved card or add a new card. - 3.Finally, tap the
Pay Now
button to complete the payment.

4.1 Select
Save this card for your future use
on the Add a new card page.var testRequestPayment = RequestCreatePayment(
// ...
paymentMethod = paymentMethodId,
preAuth = "n",
receiptEmail = email,
returnUrl = "http://localhost:8080/return",
setupFutureUsage = "on",
// ...
)
Select the payment card in the future, when
setupFutureUsage
set to on
.4.2 Click
Add a new card
.4.3 After creating a new payment method and attaching it to customer, the card details will be saved to customer.
private val startActivityLauncher: ActivityResultLauncher<Intent> =
registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
//selected paymentmethods's list
if (it.resultCode == Constant.PAYMENT_RESULT_CODE) {
var payment =
it.data?.getParcelableExtra<Payment>(Constant.PAYMENT_RESULT_PAYMENT)
if (payment != null) {
when (payment.status) {
Constant.PAYMENT_SUCCEEDED -> {
Log.e(TAG, Constant.PAYMENT_SUCCEEDED)
}
Constant.PAYMENT_FAILED -> {
payment?.errorMessage?.let { it1 ->
Log.e(TAG, it1)
}
}
Constant.PAYMENT_UN_CAPTURED -> {
Log.e(TAG, Constant.PAYMENT_UN_CAPTURED_MESSAGE)
}
Constant.PAYMENT_PENDING -> {
Log.e(TAG, Constant.PAYMENT_PENDING_MESSAGE)
}
Constant.PAYMENT_CANCELED -> {
Log.e(TAG, Constant.PAYMENT_CANCELED_MESSAGE)
}
else -> {
Log.e(TAG, Constant.PAYMENT_PENDING_MESSAGE)
}
}
}
}
}
Pass a
customerId
to MoneyCollect and attach it to the customer.// Use your customerId
var customerId = "cus_1452880617225281538"
When creating a payment method, you can specify
customer parameters
to automatically attach the payment method to an existing customer. //the address of create paymentmethod
var address = Address(
line1 = "123 Main Street",
line2 = "number456",
city = "Blackrock",
state = "Co. Dublin",
postalCode = "T37 F8HK",
country = "IE",
)
//the BillingDetails of create paymentmethod
var billingDetails = RequestPaymentMethod.BillingDetails(
address,
email = "[email protected]",
firstName = "John",
lastName = "Doe",
phone = "+18008675309"
)
//RequestPaymentMethod object
var testRequestPaymentMethod=RequestPaymentMethod(
"card",
billingDetails,
null
)
//support payment credit card
var testBankIvList= arrayListOf(
R.drawable.mc_card_visa,
R.drawable.mc_card_mastercard,
R.drawable.mc_card_ae,
R.drawable.mc_card_jcb,
R.drawable.mc_card_dinner,
R.drawable.mc_card_discover,
R.drawable.mc_card_maestro
)
//build Bundle
var bundle = Bundle()
//pass currentPaymentModel
bundle.putSerializable(Constant.CURRENT_PAYMENT_MODEL, MoneyCollectPaymentModel.ATTACH_PAYMENT_METHOD)
//pass customerId
bundle.putString(Constant.CUSTOMER_ID_TAG,customerId)
//pass default RequestPaymentMethod
bundle?.putParcelable(Constant.CREATE_PAYMENT_METHOD_REQUEST_TAG, testRequestPaymentMethod)
//pass default supportBankList
bundle?.putSerializable(Constant.SUPPORT_BANK_LIST_TAG,testBankIvList)
//SaveCardActivitycontain SaveCardFragment and AddCardFragment,Support them to switch to each other
var intent = Intent(this, SaveCardActivity::class.java)
intent.putExtra(Constant.CURRENT_PAYMENT_BUNDLE, bundle)
//start payment
startActivityLauncher.launch(intent)

3.1 Select
Save this card for your future use
on the Add a card
page.var testRequestPayment = RequestCreatePayment(
// ...
paymentMethod = paymentMethodId,
preAuth = "n",
receiptEmail = email,
returnUrl = "http://localhost:8080/return",
setupFutureUsage = "on",
// ...
)
You can use the payment card in the future when
setupFutureUsage
set to on
, otherwise setting to off
.3.2 Click
Add a card
.3.3 After creating a payment method and attaching the payment method to customer, the card details will be saved to the customer.

Click on the
Pay Now
button to complete the transaction.The payment result is obtained by calling the
confirmPayment
API for payment confirmation, and then the result data is passed to the component. moneyCollect.confirmPayment(requestConfirmPayment, payment.clientSecret,
object : ApiResultCallback<Payment> {
override fun onSuccess(result: Payment) {
isLoadingAnimStatus = false
viewBinding?.paymentCheckoutBtn?.setCardConfirmButtonStatus(true)
if (result.status.equals(Constant.PAYMENT_SUCCEEDED)) {
viewBinding?.paymentCheckoutBtn?.setMoneyCollectButtonViewContext(null)
viewBinding?.paymentCheckoutBtn?.setMoneyCollectButtonViewModel(moneyCollectPaymentModel)
viewBinding?.paymentCheckoutBtn?.showAnimByPaymentCompleteAndRefresh()
} else {
viewBinding?.paymentCheckoutBtn?.stopPaymentAnim()
}
when (result.status) {
Constant.PAYMENT_SUCCEEDED -> {
}
Constant.PAYMENT_FAILED -> {
viewBinding?.paymentErrorMessageTv?.setText(result.errorMessage)
}
Constant.PAYMENT_UN_CAPTURED -> {
viewBinding?.paymentErrorMessageTv?.setText(Constant.PAYMENT_UN_CAPTURED_MESSAGE)
}
Constant.PAYMENT_PENDING -> {
viewBinding?.paymentErrorMessageTv?.setText(Constant.PAYMENT_PENDING_MESSAGE)
}
Constant.PAYMENT_CANCELED -> {
viewBinding?.paymentErrorMessageTv?.setText(Constant.PAYMENT_CANCELED_MESSAGE)
}
else -> {
viewBinding?.paymentErrorMessageTv?.setText(Constant.PAYMENT_PENDING_MESSAGE)
}
}
}
override fun onError(e: Exception) {
isLoadingAnimStatus = false
viewBinding?.paymentCheckoutBtn?.stopPaymentAnim()
viewBinding?.paymentCheckoutBtn?.setCardConfirmButtonStatus(true)
viewBinding?.paymentErrorMessageTv?.visibility == View.VISIBLE
viewBinding?.paymentErrorMessageTv?.setText(e.message)
}
})
Last modified 1yr ago