如何在paypal angular 4中调用onAuthorize内部的外部函数

khu*_*lam 2 paypal angular

在下面的代码中,我得到的Cannot read property 'http' of undefined是未定义的。如何在 onAuthorize 函数中调用外部自定义函数。

这是我获得帮助的链接https://developer.paypal.com/demo/checkout/#/pattern/client 您的任何帮助都将是可观的。

ngAfterViewInit(): void {
    const total = this.total_amount;
    const selected_package = this.selected_package.name;
    this.loadExternalScript('https://www.paypalobjects.com/api/checkout.js').then(() => {
        paypal.Button.render({
            env: 'sandbox',
            client: {
                production: '',
                sandbox: 'XXXXXXXXXXXXXXXXXXXXXXX'
            },
            commit: true,
            payment: function (data, actions) {
                return actions.payment.create({
                    payment: {
                        transactions: [
                            {
                                amount: { total: total, currency: 'USD' },
                                description: selected_package,
                            }
                        ]
                    }
                })
            },
            onAuthorize: function (data, actions) {
                return actions.payment.execute().then(function (payment) {
                    const formdata: FormData = new FormData;
                    formdata.append('Payment[trns_id]', payment.id);
                    formdata.append('Payment[paypal]', payment);
                    formdata.append('Payment[amount]', payment.transactions[0].amount);
                    formdata.append('Payment[order_id]', order_id);
                    formdata.append('Payment[state]', payment.state);
                    formdata.append('Payment[auth_token]', auth_token);
                    this.http.post(environment.apiUrl + 'orders/paypal-checkout', formdata).subscribe(
                        (result) => {
                            this.responceData = result.json();
                            if (this.responceData.data.status === true && this.responceData.data.status_message === 'success') {
                                this.router.navigateByUrl('/questionnaire/successfully');
                            }
                        },
                        (err) => {
                            console.log('Error' + err);
                        })
                })
            },
            onError: function (err) {
                console.log(err);
            }
        }, '#paypal-button');
    });
}
Run Code Online (Sandbox Code Playgroud)

Dhy*_*yey 6

使用function关键字创建新的范围并更改 的值this。您需要使用不改变如下值的 lambda 函数this

你只需要更换function (data, actions)(data, actions) =>function(payment)(payment) =>而不是别的

onAuthorize: (data, actions) => {
    return actions.payment.execute().then((payment) => {
Run Code Online (Sandbox Code Playgroud)