Как передать данные из сервиса на контроллер AngularJS + Stripe

0

Я внедряю метод оплаты 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);
  };
Теги:
ionic-framework
stripe-payments
angular-services

2 ответа

1
Лучший ответ

Вы можете использовать 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);
      });
  };

Я не тестировал, но должен работать!

  • 0
    Огромное спасибо большое :)
  • 0
    Как я мог заставить это работать на мобильном телефоне? при оформлении заказа на мобильный телефон открывает новую вкладку, и только истинные события onclick открывают новую вкладку, поэтому handler.open с помощью ng-click не открывает форму
1

Поскольку 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);
    });
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню