2023-12-26 00:25:09 +03:00

191 lines
6.2 KiB
Python

import stripe
import uuid
import json
from django.shortcuts import render
from django.http import JsonResponse
from django.conf import settings
from django.shortcuts import redirect
from django.views.generic.base import TemplateView
from django.http import JsonResponse
import gopay
from gopay.enums import Recurrence, PaymentInstrument, BankSwiftCode, Currency, Language
from .models import Invoice
def payment_paypal(request):
return render(request, "payments/paypal.html", context={})
def payment_stripe(request):
return render(request, "payments/stripe.html", context={})
def payment_coinbase(request):
return render(request, "payments/coinbase.html", context={})
def payment_paylike(request):
return render(request, "payments/paylike.html", context={})
def payment_succeed(request):
return render(request, "payments/payment_succeed.html", context={})
class PaymentGetwaysView(TemplateView):
template_name = "payments/payment_gateways.html"
def get_context_data(self, **kwargs):
context = super(PaymentGetwaysView, self).get_context_data(**kwargs)
context["key"] = settings.STRIPE_PUBLISHABLE_KEY
context["amount"] = 500
context["description"] = "Stripe Payment"
context["invoice_session"] = self.request.session["invoice_session"]
print(context["invoice_session"])
return context
def stripe_charge(request):
stripe.api_key = settings.STRIPE_SECRET_KEY
if request.method == "POST":
charge = stripe.Charge.create(
amount=500,
currency="eur",
description="A Django charge",
source=request.POST["stripeToken"],
)
invoice_code = request.session["invoice_session"]
invoice = Invoice.objects.get(invoice_code=invoice_code)
invoice.payment_complete = True
invoice.save()
return redirect("completed")
# return JsonResponse({"invoice_code": invoice.invoice_code}, status=201)
# return render(request, 'payments/charge.html')
def gopay_charge(request):
if request.method == "POST":
user = request.user
payments = gopay.payments(
{
"goid": "[PAYMENT_ID]",
"clientId": "[GOPAY_CLIENT_ID]",
"clientSecret": "[GOPAY_CLIENT_SECRET]",
"isProductionMode": False,
"scope": gopay.TokenScope.ALL,
"language": gopay.Language.ENGLISH,
"timeout": 30,
}
)
# recurrent payment must have field ''
recurrentPayment = {
"recurrence": {
"recurrence_cycle": Recurrence.DAILY,
"recurrence_period": "7",
"recurrence_date_to": "2015-12-31",
}
}
# pre-authorized payment must have field 'preauthorization'
preauthorizedPayment = {"preauthorization": True}
response = payments.create_payment(
{
"payer": {
"default_payment_instrument": PaymentInstrument.BANK_ACCOUNT,
"allowed_payment_instruments": [PaymentInstrument.BANK_ACCOUNT],
"default_swift": BankSwiftCode.FIO_BANKA,
"allowed_swifts": [BankSwiftCode.FIO_BANKA, BankSwiftCode.MBANK],
"contact": {
"first_name": user.first_name,
"last_name": user.last_name,
"email": user.email,
"phone_number": user.phone,
"city": "example city",
"street": "Plana 67",
"postal_code": "373 01",
"country_code": "CZE",
},
},
"amount": 150,
"currency": Currency.CZECH_CROWNS,
"order_number": "001",
"order_description": "pojisteni01",
"items": [
{"name": "item01", "amount": 50},
{"name": "item02", "amount": 100},
],
"additional_params": [{"name": "invoicenumber", "value": "2015001003"}],
"callback": {
"return_url": "http://www.your-url.tld/return",
"notification_url": "http://www.your-url.tld/notify",
},
"lang": Language.CZECH, # if lang is not specified, then default lang is used
}
)
if response.has_succeed():
print("\nPayment Succeed\n")
print("hooray, API returned " + str(response))
else:
print("\nPayment Fail\n")
print(
"oops, API returned " + str(response.status_code) + ": " + str(response)
)
return JsonResponse({"message": str(response)})
return JsonResponse({"message": "GET requested"})
def paymentComplete(request):
print(request.is_ajax())
if request.is_ajax() or request.method == "POST":
invoice_id = request.session["invoice_session"]
invoice = Invoice.objects.get(id=invoice_id)
invoice.payment_complete = True
invoice.save()
# return redirect('invoice', invoice.invoice_code)
body = json.loads(request.body)
print("BODY:", body)
return JsonResponse("Payment completed!", safe=False)
def create_invoice(request):
print(request.is_ajax())
if request.method == "POST":
invoice = Invoice.objects.create(
user=request.user,
amount=request.POST.get("amount"),
total=26,
invoice_code=str(uuid.uuid4()),
)
request.session["invoice_session"] = invoice.invoice_code
return redirect("payment_gateways")
# if request.is_ajax():
# invoice = Invoice.objects.create(
# user = request.user,
# amount = 15,
# total=26,
# )
# return JsonResponse({'invoice': invoice}, status=201) # created
return render(
request,
"invoices.html",
context={"invoices": Invoice.objects.filter(user=request.user)},
)
def invoice_detail(request, slug):
return render(
request,
"invoice_detail.html",
context={"invoice": Invoice.objects.get(invoice_code=slug)},
)