juspay / juspay/hyperswitch-web

[WEB-SDK] - Add Payment Method with Dynamic Field Rendering - Oxxo

Open
#673 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
ReScript
Stars
124
Forks
135
Avg merge
1d 4h
Merged PRs (30d)
19

Description

The [Hyperswitch SDK](https://docs.hyperswitch.io/hyperswitch-cloud/integration-guide) is a versatile tool built to streamline payment integration for developers. It simplifies the process of adding multiple payment methods, allowing you to quickly implement support for various gateways without the need to manually integrate each one. With Hyperswitch, you can efficiently manage payments across platforms, reducing complexity and boosting development speed.

### Getting started

1. Get familiar with [ReScript](https://rescript-lang.org/docs/manual/latest/introduction).
2. Check the [README.md](https://github.com/juspay/hyperswitch-web/blob/main/README.md) for project structure and setup instructions.
3. To setup locally, follow these steps

```bash
# Clone repository
cd hyperswitch-web
yarn install
yarn run server # This starts the mock server
yarn run re:start # In another terminal

# Start Demo App in another terminal
cd hyperswitch-react-demo-app
yarn install
yarn run start # This starts the demo app
```

### **Description:**

We are looking to implement a new payment method in our WebSDK that supports dynamic field rendering. The goal is to allow the backend to define the fields required for the payment method and have the frontend WebSDK render these fields dynamically based on the response.

This feature should be flexible enough to handle different payment methods, each potentially requiring different types of input fields (e.g., text fields, dropdowns, checkboxes, etc.).

---

## Requirements:

1. **Payment Method Integration Details**:

In this section, we provide details on the payment call response and the confirm call payload for the newly integrated payment method. Ensure you have configured the payment method at [Hyperswitch Dashboard](https://app.hyperswitch.io/dashboard/login) correctly. The backend already includes support for this payment method, so no additional configuration is needed.

Payment Method List Response for Online Banking Poland -

```json
{
"payment_method_type": "online_banking_poland",
"payment_experience": null,
"card_networks": null,
"bank_names": [
{
"bank_name": [
"bank_nowy_s_a",
"credit_agricole",
"pay_with_plus_bank",
"pay_with_i_n_g",
"pay_with_inteligo",
"place_z_i_p_k_o",
"pay_with_citi_handlowy",
"velo_bank",
"b_n_p_paribas_poland",
"blik_p_s_p",
"banki_spoldzielcze",
"bank_millennium",
"pay_with_b_o_s",
"toyota_bank",
"pay_with_alior_bank",
"e_transfer_pocztowy24",
"m_bank",
"bank_p_e_k_a_o_s_a",
"santander_przelew24"
],
"eligible_connectors": ["adyen"]
}
],
"bank_debits": null,
"bank_transfers": null,
"required_fields": {
"payment_method_data.bank_redirect.open_banking_poland.issuer": {
"required_field": "payment_method_data.bank_redirect.open_banking_poland.issuer",
"display_name": "issuer",
"field_type": "user_bank",
"value": null
},
"billing.email": {
"required_field": "payment_method_data.billing.email",
"display_name": "email",
"field_type": "user_email_address",
"value": null
}
},
"surcharge_details": null,
"pm_auth_connector": null
}
```

Confirm call Payload should look like:

```bash
curl --location 'http://localhost:8080/payments' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'api-key: *************************************' \
--data-raw '{
"amount": 6540,
"currency": "PLN",
"confirm": true,
"capture_method": "automatic",
"capture_on": "2022-09-10T10:11:12Z",
"description": "Its my first payment request",

"payment_method": "bank_redirect",
"payment_method_type": "online_banking_poland",
"payment_method_data": {
"bank_redirect": {
"online_banking_poland": {
"issuer": "velo_bank"
}
},
"billing": {
"email": "example@example.com"
}
},
"browser_info": {
"user_agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36",
"accept_header": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8",
"language": "nl-NL",
"color_depth": 24,
"screen_height": 723,
"screen_width": 1536,
"time_zone": 0,
"java_enabled": true,
"java_script_enabled": true,
"ip_address": "13.232.74.226"
}
}'
```

2. **Dynamic Field Rendering:**

- Based on the backend response, the WebSDK should dynamically generate the necessary input fields.
- Each field should be properly validated (e.g., required, length, pattern matching) based on the backend specifications.
- Support different types of fields such as:
- Text fields (e.g., for name, card number)
- Select dropdowns (e.g., for country or card type)
- Checkbox fields (e.g., for terms and conditions)

3. **User Inputs:**

- Once the user fills in the fields, the WebSDK should package the input data and send it back to the backend for payment processing.

---

## Contribution Guidelines:

- Fork the repository and create a new branch for your work.
- Ensure the WebSDK follows best practices for API integration and field rendering.
- Write clean, well-documented code with clear commit messages.
- Add unit tests to ensure the dynamic field rendering works as expected.
- Make sure to follow our coding standards and contribution guidelines.

---

## Helpful Resources:

- Link to WebSDK documentation: [WebSDK Docs](https://docs.hyperswitch.io/hyperswitch-cloud/integration-guide)
- Link to the API endpoint specifications: [API Docs](https://api-reference.hyperswitch.io/introduction)

If you have any questions or need help getting started, feel free to ask in the comments!

Contributor guide

No contributing guide indexed for this repository

Research direction

Start with README.md and the WebSDK integration and API documentation linked in the issue, then run the listed yarn setup commands to inspect the demo app. Compare the requested dynamic fields with the provided payment-method response and confirm whether the Oxxo title or the online banking Poland example is authoritative. Done means the WebSDK renders and validates backend-defined fields, submits their values, and includes unit tests.

Written by the indexing model from the issue text.

Assessment

Tech stack
react
Domain
frontend, payments
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.