2017-01-29 6 views
0

Я использую полосу API с django-allauth на своем веб-сайте, я хочу создать stripe_id для новых пользователей, которые только что подписались, недавно мой код работал, и сегодня у меня появилась новая ошибка, с которой я еще не сталкивался :Как создать stripe_id при подписке?

stripe.error.AuthenticationError: No API key provided. (HINT: set your API key using "stripe.api_key = "). You can generate API keys from the Stripe web interface.

когда пользователь подписывается или войти в систему в первый раз, есть обратный вызов, в котором я создаю новый stripe_id, обратный вызов вызывается, но поднимание ошибки, когда я создаю клиента. См models.py:

class Profile(models.Model): 
    stripe_id = models.CharField(max_length=200, null=True, blank=True) 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    ... 

def stripeCallback(sender, request, user, **kwargs): 
    user_stripe_account, created = Profile.objects.get_or_create(user=user) 
    if user_stripe_account.stripe_id is None or user_stripe_account.stripe_id == '': 
     new_stripe_id = stripe.Customer.create(email=user.email) #error occurs here 
     user_stripe_account.stripe_id = new_stripe_id['id'] 
     user_stripe_account.save() 

user_logged_in.connect(stripeCallback) 
user_signed_up.connect(stripeCallback) 

я упускаю что-то?

ответ

1

Вы определяете stripe_id в профиле класса, но это должно быть назначено вне его. Попробуйте установить

stripe.api_key = settings.STRIPE_SECRET_KEY 

прежде всего остального кода.

Это также прекрасно объясняется в этом видео YouTube: https://www.youtube.com/watch?v=9Wbfk16jEOk&t=79s

Например, это models.py, который я создал для подобного проекта:

from __future__ import unicode_literals 
from django.conf import settings 
from django.db import models 
from allauth.account.signals import user_logged_in, user_signed_up 
import stripe 
# Create your views here. 

stripe.api_key = settings.STRIPE_SECRET_KEY 

# Create your models here. 

class profile(models.Model): 
    name = models.CharField(max_length=120) 
    user = models.OneToOneField(settings.AUTH_USER_MODEL, null=True, 
    blank=True) 
    description = models.TextField(default='description default text') 

    def __unicode__(self): 
     return self.name 

class userStripe(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 
    stripe_id = models.CharField(max_length=200, null=True, blank=True) 

    def __unicode__(self): 
     if self.stripe_id: 
      return str(self.stripe_id) 
     else: 
      return self.user.username 

    def stripeCallback(sender, request, user, **kwargs): 
     user_stripe_account, created = 
       userStripe.objects.get_or_create(user=user) 
     if created: 
      print 'created for %s'%(user.username) 
     if user_stripe_account.stripe_id is None or 
      user_stripe_account.stripe_id == '': 
      new_stripe_id = stripe.Customer.create(email=user.email) 
      user_stripe_account.stripe_id = new_stripe_id['id'] 
      user_stripe_account.save() 

def profileCallback(sender, request, user, **kwargs): 
    userProfile, is_created = profile.objects.get_or_create(user=user) 
    if is_created: 
     userProfile.name = user.username 
     userProfile.save() 
+0

Спасибо! Мне было интересно, почему это не сработало, я помню, теперь, когда я стирал stripe_secret_key с моделей, так как я использовал django-allauth, но, я думаю, я тоже должен держать его в своих настройках. – Lindow