Я внедряю метод оплаты Stripe в ионном приложении и должен получить token
из сервиса.
Проблема, с которой я сталкиваюсь, заключается в том, что console.log(token)
в StripeService
утешает токен, но мне нужно передать это моему контроллеру, чтобы сделать некоторые дополнительные вещи.
Я попытался 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 говорит, что вы можете использовать обещание, лично я предпочитаю эту новую нотацию:
Обслуживание:
.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);
});
};