def create_order(request): data = copy.deepcopy(request.data) request_serializer = CreateNewOrderSerializer(data=data) request_serializer.is_valid(raise_exception=True) user = request.user person = Person.objects.get(user=user) try: # Create the initial order items = [] for order_item in data['order_items']: items.append({ "type": 'sku', "parent": order_item['parent'], "quantity": order_item['quantity'] }) stripe.api_key = settings.STRIPE_PRIVATE_KEY stripe_order = stripe.Order.create( currency='usd', items=items, shipping={ "name": '%s %s' % (user.first_name, user.last_name), "address": { "line1": person.address_line_1, "city": person.city, "state": person.state, "country": 'US', "postal_code": person.zipcode }, }, email=user.email) # Store the order data in our database order = Order(order_id=stripe_order.id, user=user, amount=stripe_order.amount, email=stripe_order.email, status=stripe_order.status, created=datetime.fromtimestamp(stripe_order.created), updated=datetime.fromtimestamp(stripe_order.updated)) order.currency = stripe_order.currency order.save() order_status = OrderStatusTransition(order=order, status=stripe_order.status, created=datetime.fromtimestamp( stripe_order.updated)) order_status.save() for item in stripe_order['items']: order_item = OrderItem(order=order, amount=item['amount'], description=item['description'], parent=item['parent'], quantity=item['quantity'], item_type=item['type']) order_item.currency = item.currency, order_item.save() updated_order = Order.objects.get(order_id=order.order_id) response_serializer = OrderSerializer(updated_order) return Response(response_serializer.data, status=status.HTTP_201_CREATED) except Exception as e: return Response(status=status.HTTP_500_INTERNAL_SERVER_ERROR)