我正在离子应用程序中实现Stripe付款方式,需要从服务中获取token
。
我面临的问题是, StripeService
console.log(token)
正在安慰令牌,但是我需要将此令牌传递给控制器以做一些额外的事情。
我尝试过return token;
在this.open()
方法和console.log(StripeService.open(amount))
但是没有运气。
我正在尝试-https: //stripe.com/docs/checkout
让我知道如何从服务中获取令牌到我的控制器。
代码-
以下是我的AngularJS服务代码-
.service('StripeService', function(){
var handler = StripeCheckout.configure({
key: 'pk_test_6776Randomkey8990',
image: '/img/logo.png',
locale: 'auto'
});
this.open = function(amount) {
return handler.open({
name: 'mywebsite.com',
description: 'Pay via stripe',
amount: amount,
token: function(token) {
console.log(token);
}
});
};
});
以下是我在控制器中调用服务的方法-
$scope.clicked = function(amount) {
StripeService.open(amount);
};
您可以使用promises
返回令牌。
服务:
.service('StripeService', ['$q', function($q){
var handler = StripeCheckout.configure({
key: 'pk_test_6776Randomkey8990',
image: '/img/logo.png',
locale: 'auto'
});
this.open = function(amount) {
var deferred = $q.defer();
handler.open({
name: 'mywebsite.com',
description: 'Pay via stripe',
amount: amount,
token: function(token) {
deferred.resolve(token);
}
});
return deferred.promise;
};
}]);
控制器:
$scope.clicked = function(amount) {
StripeService.open(amount).then(function(token){
console.log('token', token);
});
};
我没有测试,但应该可以!
正如manzapanza所说的,您可以使用promise,我个人更喜欢这种新的表示法:
服务:
.service('StripeService', ['$q', function($q){
var handler = StripeCheckout.configure({
key: 'pk_test_6776Randomkey8990',
image: '/img/logo.png',
locale: 'auto'
});
this.open = function(amount) {
return $q(function(resolve) {
handler.open({
name: 'mywebsite.com',
description: 'Pay via stripe',
amount: amount,
token: function(token) {
console.log(token);
resolve(token);
}
});
});
};
}]);
控制器:
$scope.clicked = function(amount) {
StripeService.open(amount).then(function(token){
console.log('token', token);
});
};