--- title: "MOLPay online banking Android Component" description: "Add MOLPay online banking to an existing Components integration." url: "https://docs.adyen.com/payment-methods/molpay/android-component" source_url: "https://docs.adyen.com/payment-methods/molpay/android-component.md" canonical: "https://docs.adyen.com/payment-methods/molpay/android-component" last_modified: "2019-09-06T17:19:00+02:00" language: "en" --- # MOLPay online banking Android Component Add MOLPay online banking to an existing Components integration. **If you are using Android Components v5.0.0 or later:** This payment method requires no additional configuration. Follow the [Components integration guide](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components) and use the following module and Component names: * To [import the module](/online-payments/build-your-integration/sessions-flow/?platform=Android\&integration=Components#import): **molpay** * To [launch and show the Component](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components#launch-and-show): **MolpayComponent** Our MOLPay online banking Component renders MOLPay online banking in your payment form and collects your shopper's selected bank. When making a MOLPay online banking payment, you additionally need to: * [Handle the redirect](#handle-the-redirect). ## Requirements | Requirement | Description | | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Integration type** | Make sure that you have built an Advanced flow [Android Components integration](/online-payments/build-your-integration/advanced-flow/?platform=Android\&integration=Components). | | **Setup steps** | Before you begin, [add in your Customer Area](/payment-methods/add-payment-methods). | ## Show MOLPay online banking in your payment form To show MOLPay online banking Component in your payment form, you need to: 1. Specify in your [/paymentMethods](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods) request: | [countryCode](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods) | [amount.currency](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods#request-amount) | | -------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------- | | MY | MYR | | TH | THB | 2. Deserialize the response from the [/paymentMethods](https://docs.adyen.com/api-explorer/Checkout/latest/post/paymentMethods) call and get the object with `type`: **molpay\_ebanking\_fpx\_MY** or **molpay\_ebanking\_TH**. 3. Add the MOLPay online banking Component: a. Import the MOLPay online banking Component to your `build.gradle` file. ```groovy implementation "com.adyen.checkout:molpay:" ``` Check the [latest version on GitHub](https://github.com/Adyen/adyen-android). b. Create an `molpayConfiguration` object: ```kotlin val molpayConfiguration = MolpayConfiguration.Builder(context, "YOUR_CLIENT_KEY") // When you are ready to accept live payments, change the value to one of our live environments. .setEnvironment(Environment.TEST) .build() ``` c. Initialize the MOLPay Component. Pass the payment method object and the `molpayConfiguration` object. ```kotlin val molpayComponent = MolpayComponent.PROVIDER.get(this@YourActivity, paymentMethod, molpayConfiguration) ``` d. Add the MOLPay Component view to your layout. ```xml ``` e. Attach the Component to the view to start getting your shopper's payment details. ```kotlin molpaySpinnerView.attach(molpayComponent, this@YourActivity) ``` f. When shoppers enter their payment details, you start receiving updates. If `isValid` is true and the shopper proceeds to pay, pass the `paymentComponentState.data.paymentMethod` to your server and make a payment request. ```kotlin molpayComponent.observe(this) { paymentComponentState -> if (paymentComponentState?.isValid == true) { // When the shopper proceeds to pay, pass the `paymentComponentState.data` to your server to send a /payments request sendPayment(paymentComponentState.data) } } ``` ## Make a payment When the shopper proceeds to pay, the Component returns the `paymentComponentState.data.paymentMethod`. 1. Pass the `paymentComponentState.data.paymentMethod` to your server. 2. From your server, make a [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) request, specifying: * `paymentMethod.type`: The `paymentComponentState.data.paymentMethod` from your client app. * `returnURL`: URL to where the shopper should be redirected back to after they complete the payment. This URL can have a maximum of 1024 characters. Get this URL from the Component in the `RedirectComponent.getReturnUrl(context)`. #### curl ```bash curl https://checkout-test.adyen.com/v68/payments \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "merchantAccount":"ADYEN_MERCHANT_ACCOUNT", "reference":"YOUR_ORDER_NUMBER", "amount":{ "currency":"MYR", "value":1000 }, "{hint:paymentComponentData.paymentMethod from app}paymentMethod{/hint}":{ "type":"molpay_ebanking_fpx_MY", "issuer":"fpx_bkrm" }, "returnUrl":"adyencheckout://your.package.name" }' ``` #### Java ```java // Adyen Java API Library v27.0.0 import com.adyen.Client; import com.adyen.enums.Environment; import com.adyen.model.checkout.*; import java.time.OffsetDateTime; import java.util.*; import com.adyen.model.RequestOptions; import com.adyen.service.checkout.*; // For the live environment, additionally include your liveEndpointUrlPrefix. Client client = new Client("ADYEN_API_KEY", Environment.TEST); // Create the request object(s) Amount amount = new Amount() .currency("MYR") .value(1000L); MolPayDetails molPayDetails = new MolPayDetails() .type(MolPayDetails.TypeEnum.FPX_MY) .issuer("fpx_bkrm"); PaymentRequest paymentRequest = new PaymentRequest() .reference("YOUR_ORDER_NUMBER") .amount(amount) .merchantAccount("ADYEN_MERCHANT_ACCOUNT") .paymentMethod(new CheckoutPaymentMethod(molPayDetails)) .returnUrl("adyencheckout://your.package.name"); // Send the request PaymentsApi service = new PaymentsApi(client); PaymentResponse response = service.payments(paymentRequest, new RequestOptions().idempotencyKey("UUID")); ``` #### PHP ```php // Adyen PHP API Library v19.0.0 use Adyen\Client; use Adyen\Environment; use Adyen\Model\Checkout\Amount; use Adyen\Model\Checkout\CheckoutPaymentMethod; use Adyen\Model\Checkout\PaymentRequest; use Adyen\Service\Checkout\PaymentsApi; $client = new Client(); $client->setXApiKey("ADYEN_API_KEY"); // For the live environment, additionally include your liveEndpointUrlPrefix. $client->setEnvironment(Environment::TEST); // Create the request object(s) $amount = new Amount(); $amount ->setCurrency("MYR") ->setValue(1000); $checkoutPaymentMethod = new CheckoutPaymentMethod(); $checkoutPaymentMethod ->setType("fpx_MY") ->setIssuer("fpx_bkrm"); $paymentRequest = new PaymentRequest(); $paymentRequest ->setReference("YOUR_ORDER_NUMBER") ->setAmount($amount) ->setMerchantAccount("ADYEN_MERCHANT_ACCOUNT") ->setPaymentMethod($checkoutPaymentMethod) ->setReturnUrl("adyencheckout://your.package.name"); $requestOptions['idempotencyKey'] = 'UUID'; // Send the request $service = new PaymentsApi($client); $response = $service->payments($paymentRequest, $requestOptions); ``` #### C\# ```cs // Adyen .net API Library v17.0.0 using Adyen; using Environment = Adyen.Model.Environment; using Adyen.Model; using Adyen.Model.Checkout; using Adyen.Service.Checkout; // For the live environment, additionally include your liveEndpointUrlPrefix. var config = new Config() { XApiKey = "ADYEN_API_KEY", Environment = Environment.Test }; var client = new Client(config); // Create the request object(s) Amount amount = new Amount { Currency = "MYR", Value = 1000 }; MolPayDetails molPayDetails = new MolPayDetails { Type = MolPayDetails.TypeEnum.FpxMY, Issuer = "fpx_bkrm" }; PaymentRequest paymentRequest = new PaymentRequest { Reference = "YOUR_ORDER_NUMBER", Amount = amount, MerchantAccount = "ADYEN_MERCHANT_ACCOUNT", PaymentMethod = new CheckoutPaymentMethod(molPayDetails), ReturnUrl = "adyencheckout://your.package.name" }; // Send the request var service = new PaymentsService(client); var response = service.Payments(paymentRequest, requestOptions: new RequestOptions { IdempotencyKey = "UUID"}); ``` #### NodeJS (JavaScript) ```js // Adyen Node API Library v18.0.0 // Require the parts of the module you want to use const { Client, CheckoutAPI } = require('@adyen/api-library'); // Initialize the client object // For the live environment, additionally include your liveEndpointUrlPrefix. const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"}); // Create the request object(s) const paymentRequest = { merchantAccount: "ADYEN_MERCHANT_ACCOUNT", reference: "YOUR_ORDER_NUMBER", amount: { currency: "MYR", value: 1000 }, paymentMethod: { type: "molpay_ebanking_fpx_MY", issuer: "fpx_bkrm" }, returnUrl: "adyencheckout://your.package.name" } // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" }); ``` #### Go ```go // Adyen Go API Library v10.4.0 import ( "context" "github.com/adyen/adyen-go-api-library/v9/src/common" "github.com/adyen/adyen-go-api-library/v9/src/adyen" "github.com/adyen/adyen-go-api-library/v9/src/checkout" ) // For the live environment, additionally include your liveEndpointUrlPrefix. client := adyen.NewClient(&common.Config{ ApiKey: "ADYEN_API_KEY", Environment: common.TestEnv, }) // Create the request object(s) amount := checkout.Amount{ Currency: "MYR", Value: 1000, } molPayDetails := checkout.MolPayDetails{ Type: "molpay_ebanking_fpx_MY", Issuer: "fpx_bkrm", } paymentRequest := checkout.PaymentRequest{ Reference: "YOUR_ORDER_NUMBER", Amount: amount, MerchantAccount: "ADYEN_MERCHANT_ACCOUNT", PaymentMethod: checkout.MolPayDetailsAsCheckoutPaymentMethod(&molPayDetails), ReturnUrl: "adyencheckout://your.package.name", } // Send the request service := client.Checkout() req := service.PaymentsApi.PaymentsInput().IdempotencyKey("UUID").PaymentRequest(paymentRequest) res, httpRes, err := service.PaymentsApi.Payments(context.Background(), req) ``` #### Python ```py # Adyen Python API Library v12.5.1 import Adyen adyen = Adyen.Adyen() adyen.client.xapikey = "ADYEN_API_KEY" # For the live environment, additionally include your liveEndpointUrlPrefix. adyen.client.platform = "test" # The environment to use library in. # Create the request object(s) json_request = { "merchantAccount": "ADYEN_MERCHANT_ACCOUNT", "reference": "YOUR_ORDER_NUMBER", "amount": { "currency": "MYR", "value": 1000 }, "paymentMethod": { "type": "molpay_ebanking_fpx_MY", "issuer": "fpx_bkrm" }, "returnUrl": "adyencheckout://your.package.name" } # Send the request result = adyen.checkout.payments_api.payments(request=json_request, idempotency_key="UUID") ``` #### Ruby ```rb # Adyen Ruby API Library v9.5.1 require "adyen-ruby-api-library" adyen = Adyen::Client.new adyen.api_key = 'ADYEN_API_KEY' # For the live environment, additionally include your liveEndpointUrlPrefix. adyen.env = :test # Set to "live" for live environment # Create the request object(s) request_body = { :merchantAccount => 'ADYEN_MERCHANT_ACCOUNT', :reference => 'YOUR_ORDER_NUMBER', :amount => { :currency => 'MYR', :value => 1000 }, :paymentMethod => { :type => 'molpay_ebanking_fpx_MY', :issuer => 'fpx_bkrm' }, :returnUrl => 'adyencheckout://your.package.name' } # Send the request result = adyen.checkout.payments_api.payments(request_body, headers: { 'Idempotency-Key' => 'UUID' }) ``` #### NodeJS (TypeScript) ```ts // Adyen Node API Library v18.0.0 // Require the parts of the module you want to use import { Client, CheckoutAPI, Types } from "@adyen/api-library"; // Initialize the client object // For the live environment, additionally include your liveEndpointUrlPrefix. const client = new Client({apiKey: "ADYEN_API_KEY", environment: "TEST"}); // Create the request object(s) const amount: Types.checkout.Amount = { currency: "MYR", value: 1000 }; const molPayDetails: Types.checkout.MolPayDetails = { type: Types.checkout.MolPayDetails.TypeEnum.FpxMy, issuer: "fpx_bkrm" }; const paymentRequest: Types.checkout.PaymentRequest = { reference: "YOUR_ORDER_NUMBER", amount: amount, merchantAccount: "ADYEN_MERCHANT_ACCOUNT", paymentMethod: molPayDetails, returnUrl: "adyencheckout://your.package.name" }; // Send the request const checkoutAPI = new CheckoutAPI(client); const response = checkoutAPI.PaymentsApi.payments(paymentRequest, { idempotencyKey: "UUID" }); ``` In the [/payments](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments) response, check the `action` object for the information that you must use to redirect the shopper. **/payments response** ```json { "resultCode":"RedirectShopper", "action":{ "paymentMethodType":"molpay_ebanking_MY", "method":"GET", "url":"https://checkoutshopper-test.adyen.com/checkoutshopper/checkoutPaymentRedirect?redirectData=...", "type":"redirect" } } ``` 3. Pass the `action` object to your client app. You need this to initialize the Redirect Component. ## Handle the redirect 1. Use the [Redirect Component](/online-payments/build-your-integration/sessions-flow/?platform=Android\&integration=Components#handle-a-redirect) to redirect the shopper to the issuing bank's app or website. 2. After the shopper returns to your app, make a POST [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) request from your server, providing: * `details`: The `actionComponentData.details` object from the Redirect Component. **/payments/details request** ```bash curl https://checkout-test.adyen.com/v72/payments/details \ -H 'x-api-key: ADYEN_API_KEY' \ -H 'content-type: application/json' \ -d '{ "details": { "redirectResult": "eyJ0cmFuc1N0YXR1cyI6IlkifQ==" } }' ``` You receive a response containing: * `resultCode`: Use this to present the payment result to your shopper. * `pspReference`: Our unique identifier for the transaction. **/payments/details response** ```json { "resultCode": "Authorised", "pspReference": "PPKFQ89R6QRXGN82" } ``` ## Present the payment result Use the [resultCode](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details#responses-200-resultCode) that you received in the [/payments/details](https://docs.adyen.com/api-explorer/Checkout/latest/post/payments/details) response to present the payment result to your shopper. The `resultCode` values you can receive for MOLPay online banking are: | resultCode | Description | Action to take | | --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | **Authorised** | The payment was successful. | Inform the shopper that the payment has been successful. You will receive the funds in 2-3 days. | | **Cancelled** | The shopper cancelled the payment while on their bank's website. | Ask the shopper whether they want to continue with the order, or ask them to select a different payment method. | | **Error** | There was an error when the payment was being processed. | Inform the shopper that there was an error processing their payment. You'll receive a `refusalReason` in the same response, indicating the cause of the error. | | **Pending** or **Received** | The shopper has completed the payment but the final result is not yet known. It may take minutes or hours for the MOLPay online banking payments network to confirm this. | Inform the shopper that you have received their order, and are waiting for the payment to be completed. You will receive the final result of the payment in an [AUTHORISATION webhook](/development-resources/webhooks/webhook-types). | | **Refused** | The payment was refused by the shopper's bank. | Ask the shopper to try the payment again using a different payment method. | []()If the shopper failed to return to your website or app, wait for webhooks to know the outcome of the payment: | eventCode | success field | Description | Action to take | | ----------------- | ------------- | ----------------------------------------------- | ----------------------------------------------------------------------------------- | | **AUTHORISATION** | **false** | The transaction failed. | Cancel the order and inform the shopper that the payment failed. | | **AUTHORISATION** | **true** | The shopper successfully completed the payment. | Inform the shopper that the payment has been successful and proceed with the order. | ## Test and go live Using any issuer ID that is available for the MOLPay eBanking Component for the respective country/region, make MOLPay online banking test payments to test the different payment results. Check the status of the MOLPay test payments in your [Customer Area](https://ca-test.adyen.com/) > **Transactions** > **Payments**. Before you can accept live MOLPay payments, you need to [submit a request for MOLPay](/payment-methods/add-payment-methods) in your [live Customer Area](https://ca-live.adyen.com/). ## See also * [Android Components integration guide](/online-payments/build-your-integration/sessions-flow?platform=Android\&integration=Components) * [Webhooks](/development-resources/webhooks) * [Tokenization for recurring payments](/online-payments/tokenization) * [API Explorer](https://docs.adyen.com/api-explorer/#/CheckoutService/latest/overview)