运行时错误:类继承值对象的对象]不使用离子3.

我已经进口布伦特里与构造函数或空

问题描述:

我想复制布伦特里演示应用程序... import * as braintree from 'braintree';运行时错误:类继承值对象的对象]不使用离子3.</p> <p>我已经进口布伦特里与构造函数或空

但我无法连接braintree。

消息读取......“运行时错误:类延伸值[对象的对象]不是一个构造或空”

这是在我的TS代码文件

import { Component } from '@angular/core'; 
import { IonicPage, NavController, NavParams, ViewController } from 'ionic-angular'; 

import * as braintree from 'braintree'; 

@IonicPage() 
@Component({ 
    selector: 'page-apply', 
    templateUrl: 'apply.html', 
}) 

export class ApplyPage { 

    gateway: any; 

    constructor(public navCtrl: NavController, public navParams: NavParams, public viewCtrl: ViewController) { 
    this.gateway = braintree.connect({ 
     environment: braintree.Environment.Sandbox, 
     merchantId: 'personalMerchantId', 
     publicKey: 'personalPublicKey', 
     privateKey: 'personalPrivateKey' 
    }); 
    } 

    ionViewDidLoad() { 
    console.log('ionViewDidLoad ApplyPage'); 
    } 


} 

这是模块

'use strict'; 

module.exports = require('./lib/braintree'); 

的index.js文件而这种码内码坐在其中的index.js点

0 braintree.js文件
'use strict'; 

let version = require('../package.json').version; 
let Config = require('./braintree/config').Config; 
let Environment = require('./braintree/environment').Environment; 
let BraintreeGateway = require('./braintree/braintree_gateway').BraintreeGateway; 
let errorTypes = require('./braintree/error_types').errorTypes; 

let Transaction = require('./braintree/transaction').Transaction; 

let CreditCard = require('./braintree/credit_card').CreditCard; 
let PayPalAccount = require('./braintree/paypal_account').PayPalAccount; 
let AndroidPayCard = require('./braintree/android_pay_card').AndroidPayCard; 
let ApplePayCard = require('./braintree/apple_pay_card').ApplePayCard; 
let VenmoAccount = require('./braintree/venmo_account').VenmoAccount; 
let CoinbaseAccount = require('./braintree/coinbase_account').CoinbaseAccount; 
let AmexExpressCheckoutCard = require('./braintree/amex_express_checkout_card').AmexExpressCheckoutCard; 
let VisaCheckoutCard = require('./braintree/visa_checkout_card').VisaCheckoutCard; 
let MasterpassCard = require('./braintree/masterpass_card').MasterpassCard; 

let CreditCardVerification = require('./braintree/credit_card_verification').CreditCardVerification; 
let Subscription = require('./braintree/subscription').Subscription; 
let MerchantAccount = require('./braintree/merchant_account').MerchantAccount; 
let PaymentInstrumentTypes = require('./braintree/payment_instrument_types').PaymentInstrumentTypes; 
let WebhookNotification = require('./braintree/webhook_notification').WebhookNotification; 
let TestingGateway = require('./braintree/testing_gateway').TestingGateway; 
let ValidationErrorCodes = require('./braintree/validation_error_codes').ValidationErrorCodes; 

let CreditCardDefaults = require('./braintree/test/credit_card_defaults').CreditCardDefaults; 
let CreditCardNumbers = require('./braintree/test/credit_card_numbers').CreditCardNumbers; 
let MerchantAccountTest = require('./braintree/test/merchant_account').MerchantAccountTest; 
let Nonces = require('./braintree/test/nonces').Nonces; 
let TransactionAmounts = require('./braintree/test/transaction_amounts').TransactionAmounts; 

let connect = config => new BraintreeGateway(new Config(config)); // eslint-disable-line func-style 
let Test = { 
    CreditCardDefaults: CreditCardDefaults, 
    CreditCardNumbers: CreditCardNumbers, 
    MerchantAccountTest: MerchantAccountTest, 
    Nonces: Nonces, 
    TransactionAmounts: TransactionAmounts 
}; 

module.exports = { 
    connect: connect, 
    version: version, 
    Environment: Environment, 
    errorTypes: errorTypes, 

    Transaction: Transaction, 

    CreditCard: CreditCard, 
    PayPalAccount: PayPalAccount, 
    AndroidPayCard: AndroidPayCard, 
    ApplePayCard: ApplePayCard, 
    VenmoAccount: VenmoAccount, 
    CoinbaseAccount: CoinbaseAccount, 
    AmexExpressCheckoutCard: AmexExpressCheckoutCard, 
    VisaCheckoutCard: VisaCheckoutCard, 
    MasterpassCard: MasterpassCard, 

    CreditCardVerification: CreditCardVerification, 
    Subscription: Subscription, 
    MerchantAccount: MerchantAccount, 
    PaymentInstrumentTypes: PaymentInstrumentTypes, 
    WebhookNotification: WebhookNotification, 
    TestingGateway: TestingGateway, 
    ValidationErrorCodes: ValidationErrorCodes, 

    Test: Test 
}; 

而这是在工作ExpressJs的index.js文件坐在代码演示

var express = require('express'); 
var router = express.Router(); 
var braintree = require('braintree'); 

var gateway = braintree.connect({ 
    environment: braintree.Environment.Sandbox, 
    merchantId: 'personalMerchantID', 
    publicKey: 'personalPublicKey', 
    privateKey: 'personal_PrivateKey' 
}); 

router.get('/', function(req, res) { 
    gateway.clientToken.generate({}, function(err, response) { 
    var token = response.clientToken; 

    res.render('index', {token : token}); 
    }); 
}); 

router.post('/add', function(req, res) { 

    var merchant_id = req.body.merchant_id; 
    var bank_account = req.body.bank_account; 
    var bank_routing = req.body.bank_routing; 

    var merchantAccountParams = { 
    individual: { 
     firstName: "Jane", 
     lastName: "Doe", 
     email: "[email protected]", 
     phone: "5553334444", 
     dateOfBirth: "1981-11-19", 
     ssn: "456-45-4567", 
     address: { 
     streetAddress: "111 Main St", 
     locality: "Chicago", 
     region: "IL", 
     postalCode: "60622" 
     } 
    }, 
    funding: { 
     destination: braintree.MerchantAccount.FundingDestination.Bank, 
     accountNumber: bank_account, 
     routingNumber: bank_routing 
    }, 
    tosAccepted: true, 
    masterMerchantAccountId: "_my_personal_master_merchant_account_ID", 
    id: merchant_id 
    }; 

    gateway.merchantAccount.create(merchantAccountParams, function (err, result) { 
    res.render('addResult', {result: result}); 
    }); 

}); 

router.get('/find', function(req, res) { 
    var merchant_id = req.query.merchant_id; 

    gateway.merchantAccount.find(merchant_id, function(err, result) { 
    res.render('findResult', {result: result, merchant_id: merchant_id}); 
    }); 

}); 

router.post('/process', function(req, res) { 
    var nonce = req.body.payment_method_nonce; 
    var total = req.body.total; 
    var service = req.body.service; 
    var merchant_id = req.body.merchant_id; 

    gateway.transaction.sale({ 
    amount: total, 
    merchantAccountId: merchant_id, 
    paymentMethodNonce: nonce, 
    serviceFeeAmount: service 
    }, function (err, result) { 
    res.render('processResult', {result: result}); 
    }); 
}); 

module.exports = router; 

再次上述代码是由布伦特里生产。我确信只用于演示目的。

+0

你使用任何插件? – Sampath

+0

我不这么认为...... –

你不应该这样做。

通过在移动客户端中包含Braintree节点服务器库,您可以将您的私钥暴露给正在使用该应用的任何人。这是非常不安全的。

相反,您应该有一个服务器,您可以在其中接受应用程序生成的随机数以处理事务。 @Sampath发布的Braintree Cordova插件看起来像是一种合理的方式,可以在您的应用中生成随机数。

+0

你是对的,但我是在braintree技术人员发送给我的braintree市场演示。目前,我仍然无法连接。但有一天这将被整理出来。谢谢。 –

+1

完全披露:我为Braintree工作。你能提供他们给你的链接吗?我想知道是否有更明确的方式显示文档以显示需要服务器。 – BladeBarringer

+0

好的。我会更仔细地留意您的建议并重新编写我的代码。谢谢。 –

看来你没有使用任何与上述实施插件。所以你必须使用一个。这是Braintree Cordova Plugin

npm install plist 
npm install xcode 

cordova platform remove ios 
cordova plugin add https://github.com/taracque/cordova-plugin-braintree 
cordova platform add ios 

在这里,您可以看到如何none native plugin添加到应用程序离子。

+0

我能够按照这两个链接中的说明进行操作,并获得了有希望的结果。但是,在调用第二个链接中的函数时导入braintree节点包会得到相同的结果。市场演示调用连接功能。当我尝试调用相同的函数时,我收到原始错误消息。谢谢你的努力 –

+0

@PatrickOdum你有没有想过如何解决这个问题?我得到相同的错误 – nareeboy

+0

还没有。我认为这与运行时错误有关。也许有人知道打字稿可以提供答案。 –