This package allows you to accept payment in your react native project using paystack
Modern, hook-based, Paystack-powered payments in React Native apps using WebViews β now streamlined with Provider architecture & fully customizable.
Endorsed by Paystack, so you know youβre in good hands. Payment processing has never been this easy!

``bash`
npm install react-native-paystack-webviewor
yarn add react-native-paystack-webview
`bash
yarn add react-native-webview
---
β‘ Quick Start
$3
`tsx
import { PaystackProvider } from 'react-native-paystack-webview';
`$3
`tsx
import React from 'react';
import { Button } from 'react-native';
import { usePaystack } from 'react-native-paystack-webview';const Checkout = () => {
const { popup } = usePaystack();
const payNow = () => {
popup.checkout({
email: 'jane.doe@example.com',
amount: 5000,
reference: 'TXN_123456',
plan: 'PLN_example123',
invoice_limit: 3,
subaccount: 'SUB_abc123',
split_code: 'SPL_def456',
split: {
type: 'percentage',
bearer_type: 'account',
subaccounts: [
{ subaccount: 'ACCT_abc', share: 60 },
{ subaccount: 'ACCT_xyz', share: 40 }
]
},
metadata: {
custom_fields: [
{
display_name: 'Order ID',
variable_name: 'order_id',
value: 'OID1234'
}
]
},
onSuccess: (res) => console.log('Success:', res),
onCancel: () => console.log('User cancelled'),
onLoad: (res) => console.log('WebView Loaded:', res),
onError: (err) => console.log('WebView Error:', err)
});
};
return ;
};
`---
π§ Features
- β
Simple
checkout() or newTransaction() calls
- β
Global callbacks with onGlobalSuccess or onGlobalCancel
- β
Debug logging with debug prop
- β
Fully typed params for transactions
- β
Works seamlessly with Expo & bare React Native
- β
Full test coverage---
π API Reference
$3
| Prop | Type | Default | Description |
|-------------------|-----------|---------|------------------------------------------|
|
publicKey | string | β | Your Paystack public key |
| currency | string | β | Currency code (optional) |
| defaultChannels | string[]| ['card']| Payment channels |
| debug | boolean | false | Show debug logs |
| onGlobalSuccess | func | β | Called on all successful transactions |
| onGlobalCancel | func | β | Called on all cancelled transactions |$3
| Param | Type | Required | Description |
|---------------|---------------------|----------|-------------------------------------------|
|
email | string | β
| Customer email |
| amount | number | β
| Amount in Naira (not kobo) |
| reference | string | β | Custom reference (optional) |
| metadata | object | β | Custom fields / additional info |
| plan | string | β | Paystack plan code (for subscriptions) |
| invoice_limit | number | β | Max charges during subscription |
| subaccount | string | β | Subaccount code for split payment |
| split_code | string | β | Multi-split identifier |
| split | object | β | Dynamic split object |
| onSuccess | (res) => void | β
| Called on successful payment |
| onCancel | () => void | β
| Called on cancellation |
| onLoad | (res) => void | β | Triggered when transaction view loads |
| onError | (err) => void | β | Triggered on WebView or script error |---
#### Meta Props
| Name | Description | Required? | Default Value |
|---------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
|
cart_id | A unique identifier for the cart. Can be either a string or a number. | NO | undefined |
| custom_fields | An array of custom fields for adding additional metadata to the transaction. If not passed, a default custom field is created using the firstName, lastName, and billingName. | NO | [{ display_name: '${firstName + ' ' + lastName}', variable_name: '${billingName}', value: '' }] |
| cancel_action | A string specifying the action to take if a transaction is canceled. | NO | undefined |
| custom_filters | Custom filters to restrict or specify transaction options, such as: | NO | undefined |
| | - recurring: A boolean to indicate if the transaction is recurring. | | |
| | - banks: An array of bank codes for supported banks. | | |
| | - card_brands: Supported card brands, e.g., 'verve', 'visa', 'mastercard'. | | |
| | - supported_mobile_money_providers: Supported mobile money providers, e.g., 'mtn', 'atl', 'vod'. | | |
---
#### Dynamic Multi-Split Payment Object structure
| Name | use/description | required? |
| :----------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | ---------------------------------------------------------: |
|
type | Dynamic Multi-Split type. Value can be flat or percentage | YES |
| bearer_type | Defines who bears the charges. Value can be all, all-proportional, account or subaccount | YES |
| subaccounts | An array of subaccount object as defined below. e.g. {"subaccount": 'ACCT_xxxxxx', "share": 60} | YES |
| bearer_subaccount | Subaccount code of the bearerof the transaction. It should be specified if _bearer_type_ is subaccount | NO |
| reference | Unique reference of the split. Can be defined by the user | NO |
#### Dynamic Multi-Split Payment Sub-Account Object structure
| Name | use/description | required? |
| :----------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------: | ---------------------------------------------------------: |
|
subaccount | Specify subaccount code generated from the Paystack Dashboard or API to enable Split Payment on the transaction. Here's an example of usage: subaccount: "SUB_ACCOUNTCODE" | YES |
| share | Defines the amount in percentage (integer) or value (decimal allowed) depending on the type of multi-split defined | YES |---
π§ͺ Debugging
Enable
debug={true} on the PaystackProvider` to get logs like:---
Want to help improve this package? Read how to contribute and feel free to submit your PR!
---
This project is licensed under the MIT License.
---
- React-Native-quidpay-WebView
- React-Native-rave-WebView
---
- Accepting Payment With Paystack In React Native by just1and0
---
---
This project follows the all-contributors specification. Contributions of any kind welcome!