Не удается найти переменную: NativeEventEmitter в реагирует на нативную версию при использовании пакета @ philly25 / реагировать-нативная-paytm - PullRequest
0 голосов
/ 03 февраля 2020

Как интегрировать платежный шлюз paytm в приложение native native android app

Я использую пример кода пакета @ philly25 / реагировать-native-paytm для тестирования, но получаю ошибку Can ' t найти переменную: NativeEventEmitter, как интегрировать платежный шлюз Paytm с реагировать нативно. и используя этот пример кода: -

import React, { Component } from 'react';
import { TouchableHighlight, Alert, View, Text, StyleSheet, Dimensions,ActivityIndicator, TextInput } from 'react-native';
import paytm from '@philly25/react-native-paytm';
import {
  NativeModules,
  DeviceEventEmitter
} from 'react-native';
var {height, width} = Dimensions.get('window');


var paytmEvent = null;

class Button extends Component{
    render(){
        return (
            <TouchableHighlight onPress={this.props.onPress} underlayColor='transparent' style={{marginTop: 16, alignItems:'center', justifyContent:'center'}}>
                <View style={styles.buttonContainer}>
                    <Text style={styles.upperText}> {this.props.text} </Text>
                </View>
            </TouchableHighlight>
        );
    }
}


class Addmoney extends Component{
    constructor(props){
        super(props);
        this.state = {
             amount: 0,
             order_id: '',
             processing: false,
             payment_text: 'Requesting payment, please wait...'
        };

        this._setAmount = this._setAmount.bind(this);

        this._startPayment = this._startPayment.bind(this);
        this._handlePaytmResponse = this._handlePaytmResponse.bind(this);

    }
    componentDidMount(){
        paytmEvent = new NativeEventEmitter(NativeModules.RNPayTm);
        paytmEvent.addListener('PayTMResponse', this._handlePaytmResponse);
    }
    componentWillUnmount(){
        if(paytmEvent){
            paytmEvent.removeListener('PayTMResponse', this._handlePaytmResponse);
            paytmEvent = null;
        }
    }
    _setAmount(much){
        this.setState({amount: much});
        this._amountTxtBox.setNativeProps({text:much.toString()});
    }
    _startPayment(){
        if(this.state.processing) return;

        var uid = 27; //user id for user who is initiating the payment
        var api_key = 'sample_api_key'; //any API key to authenticate REST end point
        var amount = parseInt(this.state.amount);

        if(amount == 0 || amount == ''){
            Alert.alert('Please select or enter a valid amount'); return;
        }
        if(amount < 10){
          Alert.alert('Minimum purchase limit is 10 rupees'); return;
        }
        if(amount > 1000){
          Alert.alert('Maximum purchase limit is 1000 rupees'); return;
        }

        amount = amount.toString(); //amount must be passed a string else paytm will crash if amount is int type

        this.setState({processing: true, payment_text: 'Requesting payment, please wait...'});
        var type = 1; //credit
        //start transaction, generate request from server
        api.generatePaymentRequest(uid, api_key, amount, type)
            .then(response => {
                if(response.responseCode == 401){
                    Alert.alert('Unauthorized REST API request');
                }
                else{
                    //this response from REST endpoint will contain all the required data to start payment
                    //please check php file for sample
                    var data = response.paramList;
                    this.setState({order_id: data.ORDER_ID});

                    var details = {
                        mid: data.MID,
                        industryType: data.INDUSTRY_TYPE_ID, //Prod
                        website: data.WEBSITE, //prod
                        channel: data.CHANNEL_ID,
                        amount: data.TXN_AMOUNT,
                        orderId: data.ORDER_ID,
                        email: data.EMAIL,
                        phone: data.MOBILE_NO,
                        custId: data.CUST_ID,
                        checksumhash: data.CHECKSUM,
                        callback: data.CALLBACK_URL,
                    };
                    paytm.startPayment(details);
                }
            })
            .catch(err => {
                this.setState({processing: false});
                Alert.alert('Error', 'Unable to initiate transaction, please try again');
            });
    }
    _handlePaytmResponse(body){
        var uid = 27; //user id for user who is initiating the payment
        var api_key = 'sample_api_key'; //any API key to authenticate REST end point
        var order_id = this.state.order_id;

        this.setState({payment_text: 'Verifying payment status, please wait...'});
        api.verifyPaymentRequest(uid, api_key, order_id)
            .then(response => {
                if(response.responseCode == 401){
                    Alert.alert('Unauthorized REST API request');
                }
                else{
                    var result = response.result;
                    if(result == "Success"){
                        Alert.alert('Transaction successful', 'We have added money to your account, enjoy your game');
                    }else{
                        console.log(body); //check paytm response for any fail case message and details
                        Alert.alert('Failed', result);
                    }
                    this.setState({processing: false, payment_text: ''});
                }
            })
            .catch(err => {
                this.setState({processing: false, payment_text: ''});
                Alert.alert('Error', 'Unable to complete transaction, please check your bills. In case of any query you can contact us');
            });
    }
    render(){
        return(
        <View style={styles.container}>
            <View style={{flex: 1}}>
                <TextInput ref={component=> this._amountTxtBox=component}
                    style={{height: 50, backgroundColor: '#EDEDED', color: 'black', marginLeft: 0, marginRight:0, marginTop: 20}}
                    onChangeText={(text) => this.setState({amount: text})}
                    autoCorrect={false}
                    placeholder=" Enter Amount"
                    placeholderTextColor="#727278"
                    keyboardType="numeric"
                />
                <View style={{width: width, flex: 1}}>
                    {(this.state.processing) ? (
                        <View style={{alignItems:'center', justifyContent: 'center'}}>
                            <ActivityIndicator
                                animating={this.state.processing}
                                style={{height: 80}}
                                color="black"
                                size="large"/>
                            <Text style={{marginTop: 5, fontSize: 15, fontWeight: 'bold'}}>{this.state.payment_text}</Text>
                        </View>
                    ) : (<Button text="Pay via PayTM" onPress={this._startPayment}/>) }
                </View>
            </View>
        </View>
        );
    }
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    width: null,
    height: null,
  },
  buttonContainer:{
    borderRadius: 5,
    backgroundColor: "black",
    width: 200,
    height: 50,
    alignItems: 'center',
    justifyContent: 'center',
    shadowColor: '#000000',
    shadowOffset: {
      width: 0,
      height: 10
    },
    shadowRadius: 10,
    shadowOpacity: 0.2,
  },
  upperText:{
    color:"white",
    fontSize: 15,
  },
});

module.exports = Addmoney;

как это исправить или что-то я ошибаюсь, и я новичок в использовании этого пакета ???

...