191 lines
6.2 KiB
Python
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)},
|
|
)
|