bonjour à tous,
je n'arrive pas à Sauvegarder l'identifiant et l'adresse de livraison dans ma base de données sur stripe.
```python
{'after_expiration': None,
'allow_promotion_codes': None,
'amount_subtotal': 159,
'amount_total': 159,
'automatic_tax': {'enabled': True,
'status': 'complete'},
'billing_address_collection': None,
'cancel_url': 'http://127.0.0.1:8000/',
'client_reference_id': None,
'consent': None,
'consent_collection': None,
'created': 1688709289,
'currency': 'eur',
'currency_conversion': None,
'custom_fields': [],
'custom_text': {'shipping_address': None,
'submit': None},
'customer': 'cus_ODYk8PU7nn7XGn',
'customer_creation': 'always',
'customer_details': {'address': {'city': None,
'country': 'FR',
'line1': None,
'line2': None,
'postal_code': None,
'state': None},
'email': '
[email protected]',
'name': 'kambila',
'phone': None,
'tax_exempt': 'none',
'tax_ids': []},
'customer_email': None,
'expires_at': 1688795688,
'id': 'cs_test_a1CXcqtDwaxUM26SmoTD3eUlKhGccAB8WHJJzbNYMgEGI0qYL6pHlx2b7O',
'invoice': None,
'invoice_creation': {'enabled': False,
'invoice_data': {'account_tax_ids': None,
'custom_fields': None,
'description': None,
'footer': None,
'metadata': {},
'rendering_options': None}},
'livemode': False,
'locale': None,
'metadata': JSON: {},
'mode': 'payment',
'object': 'checkout.session',
'payment_intent': 'pi_3NR7d3CfR23yIEyo1LqEz9O8',
'payment_link': None,
'payment_method_collection': 'always',
'payment_method_options': JSON: {},
'payment_method_types': ['card',
'bancontact',
'eps',
'giropay',
'ideal',
'link'],
'payment_status': 'paid',
'phone_number_collection': {'enabled': False},
'recovered_from': None,
'setup_intent': None,
'shipping_address_collection': {'allowed_countries': ['ML', 'FR']},
'shipping_cost': None,
'shipping_details': {'address': {'city': 'Paris',
'country': 'FR',
'line1': '37 Rue Lamarck',
'line2': 'jjj',
'postal_code': '75018',
'state': ''},
'name': 'konimba djimiga'},
'shipping_options': [],
'status': 'complete',
'submit_type': None,
'subscription': None,
'success_url': 'http://127.0.0.1:8000/cart/success',
'total_details': {'amount_discount': 0,
'amount_shipping': 0,
'amount_tax': 0},
'url': None}
```
```python
cart = request.user.cart
# on recupère cart avec user qui est connecté grace à request
# on va créer une liste une lise d'element à partir de ce panier
# on va fairee une comprehention de liste en bouclant sur chaque article
# on recupère un dict pour cheque element qui contient le le strip_id=produit et la quantite
line_items = [{"price": Order.product.stripe_id,
"quantity": Order.quantity} for Order in cart.orders.all()]
try:
checkout_session = stripe.checkout.Session.create(
line_items=line_items,
customer_creation='always',
mode='payment',
shipping_address_collection={"allowed_countries": ["ML", "FR"]},
success_url=request.build_absolute_uri(reverse("checkout-success")),
cancel_url=request.build_absolute_uri(reverse("home")),
automatic_tax={'enabled': True},
)
except Exception as e:
return str(e)
return redirect(checkout_session.url, code=303)
def checkout_success(request):
return render(request, 'store/success.html')
endpoint_secret = 'whsec_9d9995195841efd099f24a481a1b47ba79e69531a6404f63d57a9cfd07d11dbf'
@csrf_exempt
def webhook(request):
payload = request.body
sig_header = request.META['HTTP_STRIPE_SIGNATURE']
event = None
try:
event = stripe.Webhook.construct_event(
payload, sig_header, endpoint_secret
)
except ValueError as e:
# Invalid payload
return HttpResponse(status=400)
except stripe.error.SignatureVerificationError as e:
# Invalid signature
return HttpResponse(status=400)
if event['type'] == 'checkout.session.completed':
data = event['data']['object']
try:
user = get_object_or_404(Shopper, email=data['customer_details']['email'])
except KeyError:
HttpResponse('invalid user email', status=404)
complete_order(user=user, data=data)
save_shipping_address(user=user, data=data)
return HttpResponse(status=200)
return HttpResponse(status=200)
def complete_order(user, data):
user.stripe_id = data['customer']
user.cart.delete()
user.cart.save()
return HttpResponse(status=200)
def save_shipping_address(user, data):
try:
pprint(data)
name = data["shipping_details"]["name"]
city = data["address"]["city"]
country = data["address"]["country"]
address_1 = data["address"]["line1"]
address_2 = data["address"]["line2"]
zip_code = data["address"]["postal_code"]
except KeyError:
return HttpResponse(status=404)
Shippingaddress.objects.get_or_create(user=user,
name=name,
city=city,
country=country.lower(),
address_1=address_1,
address_2=address_2 or "",
zipe_code=zip_code)
return HttpResponse(status=200)
```
```
```