Skip to content

Component Web

Introduction

The component-based checkout supports embedding PayKKa's checkout payment component into your checkout page to collect consumer payment information and supports multiple payment method combinations.

You can create your own checkout flow through the PayKKa Checkout UI component. The payment information entered by consumers is only transmitted within the component, which can reduce your PCI-DSS compliance costs.

To integrate Component/Drop-in, you need to provide your domain name to remove cross-origin restrictions

Supported Payment Methods

  • Visa
  • MasterCard
  • JCB
  • American Express
  • Discover
  • Diners Club
  • Apple Pay
  • Google Pay
  • WechatPay
  • Alipay+

Payment Process

Description of image
  1. Get your transaction key
  2. Get your Client key
  3. Prepare your notification webhook address, provide it in the request parameters, and notifications will be sent to the merchant at key payment nodes
  4. Prepare your redirect webhook address, provide it in the request parameters, and it will redirect after checkout payment is completed
  5. Initiate the request
  6. For frontend component integration method, see PayKKa Checkout UI Component
  7. Merchants can integrate the Query Session interface to get checkout results, or directly integrate the Query Transaction interface to get order results (if there is no final result, it means the consumer did not initiate a transaction)

API: Create Session

PayKKa's checkout (identifier: session_id) represents a payment intention in page form, and the final payment result is determined by the transaction (identifier: order_id) result. Therefore, you need to focus on the final status of the order to determine the payment result.

Checkout Query: Used to query the status and payment result of the checkout. If the consumer has not initiated payment, no transaction order will be generated.

Transaction Query: Used to query the payment result of the transaction order. After the order reaches its final state, it will be notified through webhook.

ApplePay 组件默认样式

Description of image

GooglePay 组件默认样式

Description of image

卡组件默认样式

Description of image

Adding Component

You can install the PayKKa Checkout UI npm package or embed it into HTML via CDN:

Install @paykka/card-checkout-ui:

npm i @paykka/card-checkout-ui

To properly display the component, you need to import the styles globally:

import '@paykka/card-checkout-ui/style.css'

Creating a PayKKaCheckout Instance

PayKKaCheckout Constructor Parameters

Parameters and events that can be passed when creating a PayKKaCheckout instance:

Required parameters are marked with *.

Name Description Type
*sessionIdCheckout ID, used to create the checkout.string
*clientKeyClient key.string
*envEnvironment configuration.
  • eu for European merchants.
  • hk for Hong Kong merchants.
  • sandbox for sandbox environment merchants.
localeCheckout text display language.
  • If not provided, browser language will be used. If browser language is not supported, en-GB will be used by default.
  • Currently supports the following 11 international languages, displayed in IETF BCP 47 format:
    • de-DE: German (Germany)
    • en-GB: English (United Kingdom)
    • es-ES: Spanish (Spain)
    • fr-FR: French (France)
    • ja-JP: Japanese (Japan)
    • ko-KR: Korean (South Korea)
    • pt-PT: Portuguese (Portugal)
    • ru-RU: Russian (Russia)
    • zh-CN: Chinese (China)
    • zh-HK: Chinese (Hong Kong)
    • zh-TW: Chinese (Taiwan)
string
hidePaymentButtonWhether to hide the payment button, defaults to false.
  • If the payment button is hidden, you need to manually call the component's payment method to make a payment.
boolean
threeDSFrame3DS configuration object, containing the following parameters:
  • modalWidth: 3DS popup width, defaults to adaptive if not provided. Pass number for units in px, pass string for custom units, minimum width is 350px.
  • modalHeight: 3DS popup height, defaults to adaptive if not provided. Pass number for units in px, pass string for custom units, minimum height is 500px.
ThreeDSFrameConfig
onPaymentMethodsReadyTriggered when the checkout has obtained available payment methods.
  • methods is the list of available payment methods.
  • If an empty array is returned, it means no payment methods are available, and the component will not be displayed.
  • When the checkout status is success or expired, an empty array will also be returned.
  • Currently supports the following 8 payment methods:
    • APPLE_PAY: Apple Pay
    • GOOGLE_PAY: Google Pay
    • VISA: Visa
    • MASTER_CARD: Master Card
    • JCB: JCB
    • AMEX: AMEX
    • DINERS_CLUB: Diners Club
    • DISCOVER: Discover
(methods: PaymentMethod[]) => void
onInitErrorTriggered when checkout initialization fails.
  • error is a PayKKaError instance, typically containing the following properties:
    • type: Error type.
    • message: Error message.
    • code: Error code, when an API error occurs, it will return a specific error code.
  • This callback will also be triggered when reinitializing after checkout status is success or expired.
(error: PayKKaError) => void
onSubmitGlobal event triggered when submitting the form.
  • formValidateError is the form validation error information.
  • Can be overridden by the same-named event defined in the Component.
(formValidateError?: Record<string, FormValidateError[]>) => void
onSuccessGlobal event triggered after successful payment.
  • returnUrl is the link to redirect to after payment is completed.
  • Can be overridden by the same-named event defined in the Component.
({returnUrl?: string}) => void
onTimeoutGlobal event triggered when payment times out.
  • Users can resubmit the form to make a payment.
  • Can be overridden by the same-named event defined in the Component.
() => void
onExpiredGlobal event triggered when the session expires or becomes invalid, or when the component is called again after successful payment.
  • Can be overridden by the same-named event defined in the Component.
() => void
onErrorGlobal event triggered after payment failure.
  • error is a PayKKaError instance, typically containing the following properties:
    • type: Error type.
    • message: Error message.
    • code: Error code, when an API error occurs, it will return a specific error code.
  • Users can resubmit the form to make a payment.
  • Can be overridden by the same-named event defined in the Component.
(error: PayKKaError) => void

Here's a usage example:

import { PayKKaCheckout } from '@paykka/card-checkout-ui'
// Create PayKKaCheckout instance
const paykkaCheckout = new PayKKaCheckout({
  sessionId: 'xxx',
  clientKey: 'xxx',
  env: 'eu',
  locale: 'en-GB',
  hidePaymentButton: false,
  threeDSFrame: {
    modalWidth: '350px',
    modalHeight: '500px',
  },
  onPaymentMethodsReady: (methods) => {
    console.log('Supported payment methods', methods)
  },
  onInitError: (error) => {
    console.log('Initialization error', error)
  },
  onSubmit: (formValidateError) => {
    console.log('Form submission global event', formValidateError)
  },
  onSuccess: ({ returnUrl }) => {
    console.log('Payment success global event', returnUrl)
  },
  onTimeout: () => {
    console.log('Payment timeout global event')
  },
  onExpired: () => {
    console.log('Session expired or invalid global event')
  },
  onError: () => {
    console.log('Payment failure global event')
  }
})

Creating a Card Component Instance

Card Component Constructor Parameters

Here is an example using the Card component:

Step 1: Create DOM Element

Create a DOM element in your checkout page that will be used to render the Card component.

<div id="card-container"></div>

It is strongly recommended not to create this DOM element inside an iframe element, as this may prevent the checkout from functioning properly.

Step 2: Import Card and Create Instance

import { PayKKaCheckout, Card } from '@paykka/card-checkout-ui'

// Steps to create PayKKaCheckout instance omitted here

const checkoutCard = paykkaCheckout.create(Card, {
  /** Card component constructor parameters */
  onSubmit: formValidateError => {
    console.log('Form submission event', formValidateError)
  },
  onSuccess: ({ returnUrl }) => {
    console.log('Payment success event', returnUrl)
  },
  onTimeout: () => {
    console.log('Payment timeout event')
  },
  onExpired: () => {
    console.log('Session expired or invalid event')
  },
  onError: () => {
    console.log('Payment failure event')
  }
})

Step 3: Mount Component

const container = document.querySelector('#card-container')
checkoutCard.mount(container)

If you are using JavaScript frameworks such as Angular, Vue, React, etc., please ensure that the DOM has been rendered before mounting, and do not re-render the element.

Purchase and Recurring

If your payment requirements involve recurring charges from customers' bank cards or e-wallets at regular intervals (such as monthly, yearly, or custom time intervals) without requiring manual authorization each time, you can use PayKKa's recurring payment feature.

Integration Method

  1. Currently, PayKKa's recurring payment feature requires the merchant to initiate it periodically
  2. For the first recurring payment, PayKKa needs to store the card information of the cardholder, and subsequent recurring payments only need to provide the cardholder's token
  3. For subsequent recurring payments, only the cardholder's token needs to be provided, without repeating card information

First recurring request example Create Session

{
  "merchant_id": "18356675194960",
  "payment_type": "RECURRING",
  "authorisation_type": "FINAL_AUTH",
  "capture_method": "AUTOMATIC",
  "trans_id": "m3246749195217",
  "expire_time": "2025-05-05T17:17:24+08:00",
  "session_mode": "DROP_IN",
  "display_locale": "fr-FR",
  "currency": "HKD",
  "amount": "800",
  "return_url": "https://url",
  "mit": false,
  "payment": {
    "store_payment_method": true,
    "token_usage": "SUBSCRIPTION",
    "shopper_reference": "854f5baaf0a735139c583c4cea14d14c"
  },
  "goods": [
    // Product information
  ],
  "bill": {
    // Billing information
  },
  "shipping": {
    // Shipping information, required for physical goods
  },
  "customer": {
    // Consumer/customer information
  }
}

Subsequent recurring request example Initiate Transaction

{
  "merchant_id": "18356675194960",
  "payment_type": "RECURRING",
  "authorisation_type": "FINAL_AUTH",
  "capture_method": "AUTOMATIC",
  "trans_id": "m3246749195217",
  "currency": "HKD",
  "amount": "800",
  "mit": true,
  "recurring_agreement_id": "RA4264524535435435",
  "payment": {
    "payment_method": "BANKCARD",
    "shopper_reference": "558b5cb1b8cbcc8496062155c69cf2ab",
    "token": "TK20231435132143229"
  }
}

3DS Processing

The checkout product does not require you to handle 3DS authentication. PayKKa will automatically perform intelligent security detection and processing of payments. You only need to focus on the payment results.

Validity Period

The maximum validity period for the checkout is 24 hours. After expiration, payment cannot be continued.

If payment is not initiated before expiration, there will be no notification, and the checkout status will be status=EXPIRED

Error Code

See Transaction Error Code

Result Notification

Reference Webhook