· 3 years ago · Jul 04, 2022, 12:30 PM
1# flutterwave.py
2from django.conf import settings
3import requests
4
5class FlutterWavePayment():
6 SECRET_KEY = settings.FLUTTERWAVE_SECRET_KEY
7 base_url = "https://api.flutterwave.com/v3/payments"
8
9 def confirm_payment(self, ref, *arg, **kwargs):
10 path = f"/transactions/{ref}/"
11
12
13 header = {
14 "Authorization": f"Bearer {self.SECRET_KEY}",
15 "Content_type": 'Application/json',
16 }
17 url =self.base_url + path
18 response = requests.get(url, headers=header)
19
20 if response.status == 200:
21 response_data = response.json()
22 return response_data['status'], response_data['data']
23 response_data = response.json()
24 return response_data['status'], response_data['message']
25
26
27 #views.py
28
29 from django.shortcuts import get_object_or_404, redirect, render
30 from django.conf import settings
31 from .models import FlutterWave
32 from .forms import PaymentForm
33 from django.conf import settings
34 from django.contrib import messages
35 from website.models import User
36
37
38 def Deposit(request):
39 value = {
40 'email': request.user
41 }
42 if request.method == "POST":
43 payment_form = PaymentForm(request.POST)
44 if payment_form.is_valid():
45 payment=payment_form.save()
46 return render(request, 'flutterwave/confirm.html', {'payment':payment, 'PUBLIC_KEY':settings.FLUTTERWAVE_PUBLIC_KEY})
47 else:
48 payment_form = PaymentForm(initial=value)
49 args = {'forms':payment_form}
50 return render(request, 'flutterwave/payment.html', args)
51
52 def confirm_payment(request, ref):
53 payment = get_object_or_404(FlutterWave, reference = ref)
54 verified = payment.confirm_payment()
55 if verified:
56 messages.success(request, 'Successful Deposit')
57 else:
58 messages.error(request, 'Incomplete Deposit Transaction')
59 return redirect('/')
60
61
62 # comfirm.html the script
63 <script>
64 function makePayment() {
65 FlutterwaveCheckout({
66 public_key: "{{PUBLIC_KEY}}",
67 tx_ref: "{{payment.reference}}",
68 amount: "{{payment.amount}}",
69 currency: "NGN",
70 payment_options: "card, ussd, account, banktransfer, qr",
71
72 customer: {
73 email: "{{request.user.email}}",
74 phone_number: "{{request.user.phone_number}}",
75 name: "{{request.user.first_name}} {{request.user.first_name}}",
76 },
77 customizations: {
78 title: "Deposit Funds",
79 description: "Deposit successfully recieved",
80 },
81 callback: function (response) {
82 window.location.href = "{% url 'flutterwave:confirm_payment' payment.reference %}";
83 }
84 });
85 }
86</script>
87
88
89