# react-native-upi-payments

an react native package which supports upi payment intent for android platform

## Installation

```sh
npm install react-native-upi-payments
```

or using yarn

```sh
yarn add react-native-upi-payments
```

add this usages permission at top of your manifeast file

```
<manifest >

	add these lines only
	<queries>
        <intent>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data
                android:host="pay"
                android:scheme="upi" />
        </intent>
  </queries>

 <application
    ......
</application>

```

## Usage

```js
import { initWithParams } from 'react-native-upi-payments';

// ...

 initWithParams({
      amount: 100,
      receiverUpi: "receiver@upi',
      currency: 'INR',//optional
    })
      .then((result: string) => {
       console.log('Payment successful',result)
      })
      .catch((e) => {
        console.log('error', e);
      });
```

If you already have a complete payment uri you can use

```js
import { initWithUri } from 'react-native-upi-payments';

// ...
const uri =
  'upi://pay?pa=dummymerchant@upi&pn=Dummy%20Merchant&mc=1234&tid=1234567890&tr=12345678&tn=Test%20Transaction&am=10.00&cu=INR';

initWithUri(uri)
  .then((result: string) => {
    console.log('Payment successful', result);
  })
  .catch((e) => {
    console.log('error', e);
  });
```

`upiAppSelectListener` should use when you want an event when any upi app got selected for payment

```
React.useEffect(() => {
    const subscription = upiAppSelectListener.addListener((data: any) => {
      console.log('upi app selected', data);
    });

    return () => upiAppSelectListener.removeListener(subscription);
  }, []);

```

**NOTE:** **pass the options params for disable some upi apps to be included **

you can check if specific app package is installed or not

```js
import { isAppInstalled } from 'react-native-upi-payments';

isAppInstalled('com.whatsapp')
  .then((isInstalled) => {
    console.log('app installed');
  })
  .catch((e) => {
    console.log('Not installed');
  });
```

to fatch all upi available apps or if want to exclude specific app use opetions params

```
 fetchUpiApps({
  	blockedApps:['com.some.app']
 })
      .then((data) => {
        console.log('Installed apps', data);
      })
      .catch((e) => {
        console.log('err');
      });
```

ParamsType for sending the upi params using `initWithParams` function

| Name         | Required | Description               |
| ------------ | -------- | ------------------------- |
| receiverUpi  | Y        | upi id of receiver        |
| amount       | Y        | Total amount to be paid   |
| merchantCode | N        | merchant code of upi user |
| currency     | N        | INR OR USD                |
| pn           | N        |                           |
| note         | N        | transation note           |
| txnRef       | N        | transation referance id   |

Prop types for Options param

| Name                 | Required | Description                                                   |
| -------------------- | -------- | ------------------------------------------------------------- |
| cancelable           | N        | make upi apps sheet cancelable                                |
| cancelOnTouchOutside | N        | make upi apps sheet cancelable on click outside of sheet      |
| blockedApps          | N        | Array of strings eg. ['com.some.app] to exclude from upi apps |

## License

MIT

---
