Documentation
HOMEAPI ReferencePayment Demo
English
English
  • 📖Home
  • API Reference
  • Wallet
    • Activate Account
    • Multi-currency Balance
    • Global Collection Account
    • Payout
    • Account settings
  • Payment
    • Get started
    • Accept a payment
      • Hosted payment page
      • In-page checkout
      • iOS
      • Android
      • API-Direct
    • Save a card during payment
      • iOS
      • Android
    • Pre-authorize a payment
    • 3D secure authentication
      • iOS
      • Android
    • Subscriptions
      • Recurring
    • Add payment methods
      • Supported APM codes and attributes list
      • APM Integration Guide
    • After the payment
      • Webhook
      • Refunds
      • Response handling
    • About the APIs
      • Currencies
      • Payments
        • How payments work
  • Business Operation
    • MoneyCollect dashboard
      • Home
      • Mobile apps
    • Account
      • Your account
      • Multiple Accounts
      • Account security
    • Alternative payment methods
      • Apply for APMs from your dashboard
        • Google pay
    • Customers
      • Customer portal
    • Products & Prices
      • Pricing table
    • Invoicing
      • How invoicing works
      • Use the dashboard
        • Customers
        • Products and prices
        • Invoice page
      • Hosted Invoice Page
      • No-code quickstart guide
    • Subscriptions
      • Subscription status
      • Subscription settings
      • Create a subscription
    • Pricing
      • Reserves
      • Fees for APMs
    • Payouts
    • Financial reports
      • Select preferred report
      • Balance summary
      • Payout reconciliation
    • Partners
      • Partner pricing
    • Risk management
      • Disputes
        • How disputes work
        • Respond to disputes
          • Dispute reasons
        • Measuring disputes
      • Fraud
        • Monitoring programs
        • High risk merchant lists
        • Tools
        • Fraud prevention
    • Start a team
      • Teams
      • User roles
    • Startup incorporation
  • Developer tools
    • API-Keys
    • Libraries
    • Plugins
      • WooCommerce
      • Magento
        • Using Magento 2 Admin Panel
      • Shopify
        • MoneyCollect Payments App
        • Legacy Version
          • Credit Card Direct Payments App
          • Credit Card Redirected Payments App
          • Alternative Payment Methods App
      • Wix
      • SHOPLINE
      • SHOPLAZZA
      • Xshoppy
      • ShopBase
      • PrestaShop
      • OpenCart
      • AllValue
        • Using Allvalue Panel
Powered by GitBook
On this page
  1. Payment
  2. Save a card during payment

Android

1.Create a Customer

Pass a customerId to MoneyCollect and attach it to the customer.

   // Use your customerId 
   var customerId = "cus_1452880617225281538"

2.Construct data, and pay in PaymentSheet model

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.

3.Pay in Hosted Payment Page Mode

  1. Tap Checkoutbutton to pay in Hosted 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.Customer selects "save this card" during 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.

5.Return the payment result

 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)
                        }
                    }
                }
            }

        }

1.Create a Customer

Pass a customerId to MoneyCollect and attach it to the customer.

// Use your customerId 
   var customerId = "cus_1452880617225281538"

2.Construct data, and add payment methods with PaymentSheet customizable models

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 = "abc@moneycollect.com",
          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.Customer selects save this card for your future use during payment

3.1 Select Save this card for your future useon 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 whensetupFutureUsage 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.

4.Customer selects the card to make payment

Click on the Pay Now button to complete the transaction.

5.Return the payment result

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)
                    }
                })
PreviousiOSNextPre-authorize a payment

Last updated 3 years ago