openpay-react-native Generates the device_session_id and tokenize the credit cards with Openpay.
- Generates the device_session_id (https://openpay.mx/docs/fraud-tool.html)
- Tokenize the credit cards (https://openpay.mx/docs/openpayjs.html)
- npm >= 6
$ npm install rn-openpay --save
$ yarn add rn-openpay
import Openpay, {createDeviceSessionId} from 'rn-openpay';
<Openpay 
    isProductionMode={false} 
    merchantId="YOUR_MERCHANT_ID" 
    publicKey="YOUR_PUBLIC_KEY" 
    address={address} 
    successToken={this.successToken} 
    failToken={this.failToken} 
    loading={this.state.loading}
    buttonText="Some text"
/>
// Note: address prop is optional.And then on your successToken or failToken handler:
state = {
    loading: false
}
successToken = (response) => {        
    const deviceSessionId = createDeviceSessionId();
    console.log('createDeviceSessionId', deviceSessionId);
    console.log('successToken', response);
    this.setState(() => ({loading: false}))
}
failToken = (response) => {
    console.log('failToken', response);
}| Property | Type | Description | Required | 
|---|---|---|---|
| isProductionMode | Boolean | Defines the Openpay environment | Yes | 
| merchantId | String | Openpay Merchant ID | Yes | 
| publicKey | String | Openpay Public Key | Yes | 
| successToken | Function | It will receive the card token and here you will need to add your logic | Yes | 
| failToken | Function | It will receive the error if something wrong happen | Yes | 
| loading | Boolean | Adds a spinner to the button when the user clicks on it | Yes | 
| address | Object | You can add the address of your customer | No | 
| buttonText | String | Button's text | No | 
This method creates the device session id.
const deviceSessionId = createDeviceSessionId();import React, {Component} from 'react';
import Openpay, {createDeviceSessionId} from 'openpay-react-native';
export default class OpenpayScreen extends Component {
    state = {
        loading: false
    }
    successToken = (response) => {        
        const deviceSessionId = createDeviceSessionId();
        const token = response.id;
        this.setState(() => ({loading: false}));
        // Make the call to your server with your charge request
    }
    failToken = (response) => {
        console.log('failToken', response);
    }
    render() {
        const address = {
            "city":"Querétaro",
            "country_code":"MX",
            "postal_code":"76900",
            "line1":"Av 5 de Febrero",
            "line2":"Roble 207",
            "line3":"Col Carrillo",
            "state":"Queretaro"
        };
        return (
            <Openpay 
                isProductionMode={false} 
                merchantId="YOUR_MERCHANT_ID" 
                publicKey="YOUR_PUBLIC_KEY" 
                address={address} 
                successToken={this.successToken} 
                failToken={this.failToken} 
                loading={this.state.loading}
            />
        );
    }
}- Customize credit card image
- Customize button style
- Add unit tests
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
config react-native-device-info
iOS (via CocoaPods) RN <= 59
RN <= 59: Bug
mv ios/Podfile .
react-native link react-native-device-info
mv Podfile ios
Do not append pod 'RNDeviceInfo', :path => '../node_modules/react-native-device-info' to the Podfile
iOS (via CocoaPods) RN >= 60
Add the following lines to your build targets in your Podfile
pod 'React', :path => '../node_modules/react-native'
# Explicitly include Yoga if you are using RN >= 0.42.0
pod 'yoga', :path => '../node_modules/react-native/ReactCommon/yoga'
pod 'RNDeviceInfo', :path => '../node_modules/react-native-device-info'
# React-Native is not great about React double-including from the Podfile
post_install do |installer|
  installer.pods_project.targets.each do |target|
    if target.name == "React"
      target.remove_from_project
    end
    # It removes React & Yoga from the Pods project, as it is already included in the main project.
    targets_to_ignore = %w(React yoga)
    if targets_to_ignore.include? target.name
      target.remove_from_project
    end
  end
endThen run pod install
iOS (without CocoaPods)
In XCode, in the project navigator:
- Right click Libraries
- Add Files to [your project's name]
- Go to node_modules/react-native-device-info/ios
- Add the file RNDeviceInfo.xcodeproj
In XCode, in the project navigator, select your project.
- Add the libRNDeviceInfo.afrom the deviceinfo project to your project's Build Phases ➜ Link Binary With Libraries
- Click .xcodeprojfile you added before in the project navigator and go the Build Settings tab. Make sure All is toggled on (instead of Basic).
- Look for Header Search Paths and make sure it contains both $(SRCROOT)/../react-native/Reactand$(SRCROOT)/../../React
- Mark both as recursive (should be OK by default).
Run your project (Cmd+R)
(Thanks to @brysgo for writing the instructions)
Android
- optional in android/build.gradle:
...
  ext {
    // dependency versions
    googlePlayServicesVersion = "<Your play services version>" // default: "16.1.0" - pre-AndroidX, override for AndroidX
    compileSdkVersion = "<Your compile SDK version>" // default: 28
    targetSdkVersion = "<Your target SDK version>" // default: 28
  }
...- in android/app/build.gradle:
dependencies {
    ...
    implementation "com.facebook.react:react-native:+"  // From node_modules
+   implementation project(':react-native-device-info')
}- in android/settings.gradle:
...
include ':app'
+ include ':react-native-device-info'
+ project(':react-native-device-info').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-device-info/android')- in MainApplication.java:
+ import com.learnium.RNDeviceInfo.RNDeviceInfo;
  public class MainApplication extends Application implements ReactApplication {
    //......
    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
+         new RNDeviceInfo(),
          new MainReactPackage()
      );
    }
    ......
  }- in MainActivity.java:
+ import com.learnium.RNDeviceInfo.RNDeviceInfo;
  public class MainActivity extends ReactActivity {
    ......
    @Override
    protected List<ReactPackage> getPackages() {
      return Arrays.<ReactPackage>asList(
+       new RNDeviceInfo(),
        new MainReactPackage()
      );
    }
  }NOTE: If you faced with this error: Could not resolve all files for configuration ':react-native-device-info:debugCompileClasspath'., in build.gradle put google() in the first line (according to https://stackoverflow.com/a/50748249)
- in android/build.gradle:
allprojects {
    repositories {
+       google()
        ...
    }
}(Thanks to @chirag04 for writing the instructions)
Windows
You can either use autolinking on react-native-windows 0.63 and later or manually link the module on earlier realeases.
- npm install react-native-device-info --save
- Open your solution in Visual Studio 2019 (eg. windows\yourapp.sln)
- Right-click Solution icon in Solution Explorer > Add > Existing Project...
- Add node_modules\react-native-device-info\windows\RNDeviceInfoCPP\RNDeviceInfoCPP.vcxproj
- Right-click main application project > Add > Reference...
- Select RNDeviceInfoCPPin Solution Projects
- In app pch.hadd#include "winrt/RNDeviceInfoCPP.h"
- In App.cppaddPackageProviders().Append(winrt::RNDeviceInfoCPP::ReactPackageProvider());beforeInitializeComponent();:
App::App() noexcept
{
...
    PackageProviders().Append(make<ReactPackageProvider>()); // Includes all modules in this project
+   PackageProviders().Append(winrt::RNDeviceInfoCPP::ReactPackageProvider());
    InitializeComponent();
}check this article to config webview https://engineering.brigad.co/demystifying-react-native-modules-linking-964399ec731b
Native module RNCWebView tried to override RNCWebViewModule for module name
  @Override    
  public boolean canOverrideExistingModule() {        
    return true;    
  }
to node_modules/react_native_webview/android/src/main/java/com/reactnativecommunity/webview/RNCWebViewModule.java
