Problème avec l'api Stripe
Bonjour,
Quand j'effectue les requêtes dans le shell j'obtiens cette erreur qui semble lié à l'api de stripe, cela fait un moment que je cherche comment y remédier mais je ne trouve pas pouvez vous m'aider s'il vous plaît ?
```
from accounts.models import ShippingAddress
s1, s2 = ShippingAddress.objects.all()
s2.set_default()
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "E:\Maxence\ValentionOtz\accounts\models.py", line 73, in set_default
stripe.Customer.modify(
File "E:\Maxence\ValentionOtz\env\lib\site-packages\stripe\api_resources\customer.py", line 1739, in modify
cls.static_request("post", url, params=params),
File "E:\Maxence\ValentionOtz\env\lib\site-packages\stripe\api_resources\abstract\api_resource.py", line 152,
in _static_request
response, api_key = requestor.request(method, url_, params, headers)
File "E:\Maxence\ValentionOtz\env\lib\site-packages\stripe\api_requestor.py", line 137, in request
rbody, rcode, rheaders, my_api_key = self.request_raw(
File "E:\Maxence\ValentionOtz\env\lib\site-packages\stripe\api_requestor.py", line 336, in request_raw
raise error.AuthenticationError(
stripe.error.AuthenticationError: No API key provided. (HINT: set your API key using "stripe.api_key = <api-key>
"). You can generate API keys from the Stripe web interface. See https://stripe.com/api for details, or email s
[email protected] if you have any questions.
```</api-key></module></console>
Salut,
Voici mon code :
import stripe
from django.contrib.auth.base_user import BaseUserManager
from django.contrib.auth.models import AbstractUser
from django.db import models
from iso3166 import countries
from valentinotz.settings import STRIPE_API_KEY
# Create your models here.
class CustomUserManager(BaseUserManager):
def create_user(self, email, password, **kwargs):
if not email:
raise ValueError("Email is required")
email = self.normalize_email(email)
user = self.model(email=email, **kwargs)
user.set_password(password)
user.save()
return user
def create_superuser(self, email, password, **kwargs):
kwargs['is_staff'] = True
kwargs['is_superuser'] = True
kwargs['is_active'] = True
return self.create_user(email=email, password=password, **kwargs)
class CalisthenicsUser(AbstractUser):
username = None
email = models.EmailField(max_length=240, unique=True)
stripe_id = models.CharField(max_length=90, blank=True)
USERNAME_FIELD = 'email'
REQUIRED_FIELDS = []
objects = CustomUserManager()
ADDRESS_FORMAT = """
{name}
{address_1}
{address_2}
{city}, {zip_code}
{country}
"""
class ShippingAddress(models.Model):
user: CalisthenicsUser = models.ForeignKey(CalisthenicsUser, on_delete=models.CASCADE, related_name="addresses")
name = models.CharField(max_length=255)
address_1 = models.CharField(max_length=1024, help_text="Street address and number.")
address_2 = models.CharField(max_length=1024, help_text="Additional address..", blank=True)
city = models.CharField(max_length=1024)
zip_code = models.CharField(max_length=32)
country = models.CharField(max_length=2, choices=[(c.alpha2.lower(), c.name) for c in countries])
def __str__(self):
data = self.__dict__.copy()
data.update(country=self.get_country_display().upper())
return ADDRESS_FORMAT.format(**data).strip("\n")
def as_dict(self):
return {
"city": self.city,
"country": self.country,
"line1": self.address_1,
"line2": self.address_2,
"postal_code": self.zip_code
}
def set_default(self):
if not self.user.stripe_id:
raise ValueError(f"{self.user.email} does not have a stripe Customer ID.")
stripe.Customer.modify(
self.user.stripe_id,
shipping={"name": self.name,
"address": self.as_dict()},
address=self.as_dict()
)
Je vois effectivement que ma clé d'API n'est pas utilisé avec la coloration de PyCharm, mais où dois-je la mettre ?
Ha et shop est remplacé par valentinotz et Shopper par CalithenicsUser.
Salut,
En fait c'est bon, c'est de ma faut j'ai oublié de mettre la ligne stripe.api_key = STRIPE_API_KEY dans det_default.
Désolé et merci pour la réponse rapide un Dimanche.
Salut Maxence !
Je me permets de rajouter quelques précisions :)
Quand tu as une erreur comme ça, cherche le mot raise, c'est l'erreur qui a été levée. Je sais que les messages d'erreur long comme le bras ça peut faire peur, mais tu as souvent pas mal d'indications dedans. L'API de Stripe est très bien faite et documentée et les messages d'erreurs souvent assez explicites.
Ici :
raise error.AuthenticationError( stripe.error.AuthenticationError: No API key provided. (HINT: set your API key using "stripe.api_key = <api-key> "). You can generate API keys from the Stripe web interface. See https://stripe.com/api for details
Tu vois que dans ce cas-ci il te donne même le code :
HINT: set your API key using "stripe.api_key = <api-key> "
Concernant la clé d'API, si tu utilises Stripe dans plusieurs fonctions, tu peux mettre la ligne de code au niveau du module, ça t'évite à avoir à remettre la ligne de code dans chaque fonction :)
Attention aussi de ne pas mettre la clé directement en clair dans le fichier mais de passer par des variables d'environnement comme expliqué ici :
https://www.docstring.fr/formations/creer-un-site-e-commerce-avec-django/recuperer-la-cle-dapi-1809/?tab=questions
Voilà, c'est tout pour les précisions, très bonne continuation, n'hésite pas si tu as d'autres questions !
D'accord, merci beaucoup.
Inscris-toi
(c'est gratuit !)
Tu dois créer un compte pour participer aux discussions.
Créer un compte