0

Я реализую метод оплаты Stripe в ионном приложении и должен получить token от службы.Как передать данные из службы в контроллер AngularJS + Stripe

Проблема, с которой я столкнулся, заключается в том, что 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); 
    }; 

ответ

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); 
    }); 
}; 
Смежные вопросы