我正在我的网络应用中整合Stripe结帐。我已经在角度前端实现了Stripe checkout,并且还创建了一个后端,该后端应该接收条带检出传递的令牌。我收到一个未定义值'charge'的错误,这是我为事务创建的模型。我在这里错过了什么来正确传递令牌?
这是我得到的确切错误。 navabar.component.ts是我的结账方法。
TypeError: Cannot read property 'charge' of undefined
at TokenCallback.token [as fn] (navbar.component.ts:104)
at TokenCallback.trigger (checkout.js:3)
at TokenCallback.trigger (checkout.js:3)
这是我的表单调用的结帐方法。
openCheckout() {
let total = (this.donation * 100);
let handler = (<any>window).StripeCheckout.configure({
key: 'key_test',
locale: 'auto',
token: function (token: any) {
const transaction = new Charge(total, token.id);
console.log('From navbar nonObject ' + token.id + ' ' + total);
console.log(transaction + ' From navbar');
this.keyService.charge(transaction);
}
});
handler.open({
name: 'Delaware March for Jesus',
description: 'Donation',
amount: total
});
this.donation = 0;
this.donationEmail = '';
}
这是我的服务代码,它实现了收费并将令牌传递给后端。
charge(transaction) {
const body = JSON.stringify(transaction);
const headers = new Headers();
headers.append('Content-type', 'application/json');
return this.http.post(this.keysUrlDev + '/charge', body, { headers: headers })
.map((response: Response) => response.json())
.catch((error: Response) => Observable.throw(error.json()));
}
我为交易构建的简单角度模型。
export class Charge {
constructor(public amount: number,
public token: string) {}
}
我在nodejs上的POST路由获取令牌并将其传递给条带库charge.create方法。
router.post('/charge', function(req, res, next) {
var amount = req.body.amount;
var token = req.body.token;
stripe.charges.create({
amount: amount,
currency: 'usd',
description: 'Delaware March For Jesus Donation',
source: token
}, function(err, charge) {
if (err) {
console.log(req.body.amount + ' From POST' + req.body.token);
return res.status(500).json({
title: 'An error occured',
error: err
});
}
res.status(201).json({
message: 'Charged successfully',
obj: charge
});
});
});
我已经google了一下并试图调试但无法使代码正常工作。谁能确定我做错了什么?
我还要注意,所有变量都被正确定义为'keysUrlDev'等。实时和测试密钥都正确地放在前端的checkout方法中,后端的密钥是条带库。
***错误是由于错误的上下文造成的。见下面的答案。
答案 0 :(得分:0)
问题在于:
<ion-header>
<ion-navbar>
<ion-title>mapView</ion-title>
</ion-navbar>
</ion-header>
<ion-content>
<button ion-button block (click)="mapa2()">Next Page</button>
<ion-list>
<ion-item>
<ion-label>Nick</ion-label>
<ion-input type="text" [(ngModel)]="doc"></ion-input>
</ion-item>
<ion-item>
<ion-label>Password</ion-label>
<ion-input type="password" [(ngModel)]="pss"></ion-input>
</ion-item>
<button ion-button full color="primary" (click)="login()">
Login
</button>
</ion-list>
<div #map id="map" style="height:100%;"></div>
</ion-content>
您遇到的问题是您尝试在错误的上下文中访问“this”关键字。您在此场景中访问的“this”是token()函数的“this”上下文,而不是组件本身的上下文。使用箭头函数(()=&gt; {})将适当的上下文绑定到函数。