# react-native-plug-pag-service

## Getting started

`$ npm install react-native-plug-pag-service --save`

### Mostly automatic installation

`$ react-native link react-native-plug-pag-service`

### Manual installation


#### iOS

1. In XCode, in the project navigator, right click `Libraries` ➜ `Add Files to [your project's name]`
2. Go to `node_modules` ➜ `react-native-plug-pag-service` and add `PlugPagService.xcodeproj`
3. In XCode, in the project navigator, select your project. Add `libPlugPagService.a` to your project's `Build Phases` ➜ `Link Binary With Libraries`
4. Run your project (`Cmd+R`)<

#### Android

1. Open up `android/app/src/main/java/[...]/MainApplication.java`
	- Add `import com.reactlibrary.PlugPagServicePackage;` to the imports at the top of the file
	- Add `new PlugPagServicePackage()` to the list returned by the `getPackages()` method
2. Append the following lines to `android/settings.gradle`:
  	```
  	include ':react-native-plug-pag-service'
  	project(':react-native-plug-pag-service').projectDir = new File(rootProject.projectDir, 	'../node_modules/react-native-plug-pag-service/android')
  	```
3. Insert the following lines inside the dependencies block in `android/app/build.gradle`:
  	```
      compile project(':react-native-plug-pag-service')
  	```
4. AndroidManifest.xml
	- Permissions
	To integrate the library with the PlugPagService library in Android applications you must add the following permission to AndroidManifest.xml.
	```
	<uses-permission android:name="br.com.uol.pagseguro.permission.MANAGE_PAYMENTS"/>
	```

	This permission allows the library to bind to PlugPagService , Moderninha Smart's embedded service , which manages all payment transactions.

	- Intent-filter
	In order for your app to be chosen as the default payment app and receive Card Insertion Intents, you need to add the following code to your AndroidManifest.xml within your main Activity.
	```
	<intent-filter>
	      <action android:name="br.com.uol.pagseguro.PAYMENT"/>
	      <category android:name="android.intent.category.DEFAULT"/>
	</intent-filter>
	```

## Usage
```javascript
import PlugPagService from 'react-native-plug-pag-service'

```

### CONSTANTS
#### PAYMENT TYPES
PlugPagService.PAYMENT_CREDITO - Set the payment as CREDIT.
PlugPagService.PAYMENT_DEBITO - Set the payment as DEBIT.
PlugPagService.PAYMENT_VOUCHER - Set the payment as VOUCHER.

#### INSTALLMENTS TYPES
PlugPagService.INSTALLMENT_TYPE_A_VISTA - Set the installment type as VISTA
PlugPagService.INSTALLMENT_TYPE_PARC_VENDEDOR - Set the installment type as PARCELADO VENDEDOR
PlugPagService.INSTALLMENT_TYPE_PARC_COMPRADOR - Set the installment type as PARCELADO COMPRADOR


### METHODS
PlugPagService.setAppIdendification(appName, appVersion) - Set app information
PlugPagService.initializeAndActivatePinpad(activationCode, promise) - Initialize and activate pinpad
PlugPagService.doPayment(paymentDataJsonString, promise) - Do payment

### Implementation Examples
Below are some examples of layers of the PlugPagService Wrapper methods for performing transactions.

#### Payment of $ 250.00. Credit in sight:
    startPayment() {
        // Cria a identificação do aplicativo
        PlugPagService.setAppIdendification("MeuApp", "1.0.7")

        // Ativa terminal e faz o pagamento
        var activationCode = "403938"

        PlugPagService.initializeAndActivatePinpad(activationCode).then((initResult) => {
            if (initResult.retCode == PlugPagService.RET_OK) {
                // Define os dados do pagamento
                const paymentData = {
                    type: PlugPagService.PAYMENT_CREDITO,
                    amount: 250,
                    installmentType: PlugPagService.INSTALLMENT_TYPE_A_VISTA,
                    installments: 1,
                    userReference: "CODVENDA"
                };

                PlugPagService.doPayment(JSON.stringify(paymentData)).then((result) => {
                    if (result.retCode == PlugPagService.RET_OK) {
                        alert("Payment success with ret code: " + success)
                    } else {
                        alert("Payment failed with error code: " + error2)
                    }
                })
                // Trata o resultado da transação
            } else {
                alert("Initialize And Activate failed with error code: " + initResult)
            }
        })
    }

#### Payment of $ 300.00. Credit in sight:
    startPayment() {
        // Cria a identificação do aplicativo
        PlugPagService.setAppIdendification("MeuApp", "1.0.7")

        // Ativa terminal e faz o pagamento
        var activationCode = "403938"

        PlugPagService.initializeAndActivatePinpad(activationCode).then((initResult) => {
            if (initResult.retCode == PlugPagService.RET_OK) {
                // Define os dados do pagamento
                const paymentData = {
                    type: PlugPagService.PAYMENT_CREDITO,
                    amount: 300,
                    installmentType: PlugPagService.INSTALLMENT_TYPE_PARC_VENDEDOR,
                    installments: 3,
                    userReference: "CODVENDA"
                };

                PlugPagService.doPayment(JSON.stringify(paymentData)).then((result) => {
                    if (result.retCode == PlugPagService.RET_OK) {
                        alert("Payment success with ret code: " + success)
                    } else {
                        alert("Payment failed with error code: " + error2)
                    }
                })
                // Trata o resultado da transação
            } else {
                alert("Initialize And Activate failed with error code: " + initResult)
            }
        })
    }