payment integration
This commit is contained in:
parent
ab02887dc8
commit
9c16f956ec
@ -50,7 +50,10 @@ INSTALLED_APPS = [
|
||||
'result.apps.ResultConfig',
|
||||
'search.apps.SearchConfig',
|
||||
'quiz.apps.QuizConfig',
|
||||
'crispy_forms'
|
||||
'payments',
|
||||
|
||||
'crispy_forms',
|
||||
'rest_framework',
|
||||
]
|
||||
|
||||
MIDDLEWARE = [
|
||||
@ -157,3 +160,21 @@ CRISPY_TEMPLATE_PACK = 'bootstrap4'
|
||||
LOGIN_REDIRECT_URL = '/'
|
||||
|
||||
LOGOUT_REDIRECT_URL = '/'
|
||||
|
||||
REST_FRAMEWORK = {
|
||||
# 'DEFAULT_RENDERER_CLASSES': [
|
||||
# 'rest_framework.renderers.JSONRenderer',
|
||||
# ],
|
||||
# 'DEFAULT_PARSER_CLASSES': [
|
||||
# 'rest_framework.parsers.JSONParser',
|
||||
# ]
|
||||
'DEFAULT_PERMISSION_CLASSES': [
|
||||
'rest_framework.permissions.IsAuthenticated',
|
||||
],
|
||||
'DEFAULT_AUTHENTICATION_CLASSES': [
|
||||
'rest_framework.authentication.SessionAuthentication',
|
||||
'rest_framework.authentication.BasicAuthentication'
|
||||
]
|
||||
}
|
||||
STRIPE_SECRET_KEY = "sk_test_51IcEVZHbzY4cUA9T3BZdDayN4gmbJyXuaLCzpLT15HZoOmC17G7CxeEdXeIHSWyhYfxpljsclzzjsFukYNqJTbrW00tv3qIbN2"
|
||||
STRIPE_PUBLISHABLE_KEY = "pk_test_51IcEVZHbzY4cUA9TrKHqyHkUQqQRRMoilwYgwSJaMjfis6rN6KZPmjcbGX6LUHpIkUV2i06JBnplberIbHtYcdfv00Tu8eMXHj"
|
||||
|
||||
@ -15,6 +15,10 @@ urlpatterns = [
|
||||
url(r'^search/', include('search.urls')),
|
||||
url(r'^quiz/', include('quiz.urls')),
|
||||
|
||||
url(r'^payments/', include('payments.urls')),
|
||||
|
||||
url('accounts/api/', include('accounts.api.urls', namespace='accounts-api')),
|
||||
|
||||
url(r'^admin/', admin.site.urls),
|
||||
]
|
||||
|
||||
|
||||
@ -0,0 +1,10 @@
|
||||
from rest_framework import serializers
|
||||
from django.contrib.auth.views import get_user_model
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class UserSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = User
|
||||
fields = '__all__'
|
||||
@ -0,0 +1,9 @@
|
||||
from . import views
|
||||
|
||||
from django.urls import path
|
||||
|
||||
app_name = "accounts-api"
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.UserListAPIView.as_view(), name="users-api"),
|
||||
]
|
||||
@ -0,0 +1,24 @@
|
||||
from rest_framework import generics
|
||||
from django.contrib.auth.views import get_user_model
|
||||
|
||||
from .serializers import UserSerializer
|
||||
|
||||
User = get_user_model()
|
||||
|
||||
|
||||
class UserListAPIView(generics.ListAPIView):
|
||||
lookup_field = 'id'
|
||||
serializer_class = UserSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
qs = User.objects.all()
|
||||
q = self.request.GET.get('q')
|
||||
if q is not None:
|
||||
qs = qs.filter(username__iexact=q)
|
||||
return qs
|
||||
|
||||
|
||||
class UserDetailView(generics.RetrieveAPIView):
|
||||
lookup_field = 'id'
|
||||
queryset = User.objects.all()
|
||||
model = User
|
||||
30
accounts/migrations/0010_auto_20210401_1718.py
Normal file
30
accounts/migrations/0010_auto_20210401_1718.py
Normal file
@ -0,0 +1,30 @@
|
||||
# Generated by Django 3.1.3 on 2021-04-01 14:18
|
||||
|
||||
from django.conf import settings
|
||||
from django.db import migrations, models
|
||||
import django.db.models.deletion
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('accounts', '0009_auto_20200906_1403'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='parent',
|
||||
name='student',
|
||||
field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.SET_NULL, to='accounts.student'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='parent',
|
||||
name='user',
|
||||
field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='user',
|
||||
name='first_name',
|
||||
field=models.CharField(blank=True, max_length=150, verbose_name='first name'),
|
||||
),
|
||||
]
|
||||
@ -0,0 +1,10 @@
|
||||
# from rest_framework import serializers
|
||||
# from django.contrib.auth.views import get_user_model
|
||||
#
|
||||
# User = get_user_model()
|
||||
#
|
||||
#
|
||||
# class UserSerializer(serializers.ModelSerializer):
|
||||
# class Meta:
|
||||
# model = User
|
||||
# fields = '__all__'
|
||||
0
payments/__init__.py
Normal file
0
payments/__init__.py
Normal file
3
payments/admin.py
Normal file
3
payments/admin.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.contrib import admin
|
||||
|
||||
# Register your models here.
|
||||
5
payments/apps.py
Normal file
5
payments/apps.py
Normal file
@ -0,0 +1,5 @@
|
||||
from django.apps import AppConfig
|
||||
|
||||
|
||||
class PaymentsConfig(AppConfig):
|
||||
name = 'payments'
|
||||
0
payments/migrations/__init__.py
Normal file
0
payments/migrations/__init__.py
Normal file
3
payments/models.py
Normal file
3
payments/models.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.db import models
|
||||
|
||||
# Create your models here.
|
||||
8
payments/server.py
Normal file
8
payments/server.py
Normal file
@ -0,0 +1,8 @@
|
||||
# Set your secret key. Remember to switch to your live secret key in production.
|
||||
# See your keys here: https://dashboard.stripe.com/account/apikeys
|
||||
stripe.api_key = "sk_test_51IcEVZHbzY4cUA9T3BZdDayN4gmbJyXuaLCzpLT15HZoOmC17G7CxeEdXeIHSWyhYfxpljsclzzjsFukYNqJTbrW00tv3qIbN2"
|
||||
|
||||
intent = stripe.PaymentIntent.create(
|
||||
amount=1099,
|
||||
currency='usd',
|
||||
)
|
||||
48
payments/templates/payments/charge.html
Normal file
48
payments/templates/payments/charge.html
Normal file
@ -0,0 +1,48 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}PayPal{% endblock title %}
|
||||
{% load static %}
|
||||
|
||||
{% block header %}
|
||||
<script src="https://use.fontawesome.com/aade6c6330.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<style type="text/css">
|
||||
.counter-wrapper {
|
||||
background-color: #d1e5e1;
|
||||
padding: 10px 20px;
|
||||
}
|
||||
.bg-counter {
|
||||
padding: 5px 10px;
|
||||
border-radius: 5px;
|
||||
background-color: #aae9df;
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<center>
|
||||
<h3><i class="fa fa-check-circle-o text-success" aria-hidden="true"></i> Payment Succeed, You has been make payment successfuly.</h3>
|
||||
<div class="counter-wrapper">Redirect to your dashboard in </span><span class="bg-counter" id="counter">8</div>
|
||||
</center>
|
||||
|
||||
</div>
|
||||
{% endblock content %}
|
||||
|
||||
{% block js %}
|
||||
|
||||
<script type="text/javascript">
|
||||
var counterEl = document.getElementById('counter');
|
||||
var num = parseInt(counterEl.innerText);
|
||||
|
||||
setInterval(counter, 1000)
|
||||
function counter() {
|
||||
num = num - 1;
|
||||
if (num < 0) { return }
|
||||
counterEl.innerText = num;
|
||||
}
|
||||
setTimeout(changeWindowLocation, 9000)
|
||||
function changeWindowLocation() {
|
||||
window.location = "/";
|
||||
}
|
||||
</script>
|
||||
|
||||
{% endblock %}
|
||||
9
payments/templates/payments/coinbase.html
Normal file
9
payments/templates/payments/coinbase.html
Normal file
@ -0,0 +1,9 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}Coinbase{% endblock title %}
|
||||
{% load static %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
<center><h1>Coinbase</h1></center>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
9
payments/templates/payments/home.html
Normal file
9
payments/templates/payments/home.html
Normal file
@ -0,0 +1,9 @@
|
||||
<h2>Buy for $5.00</h2>
|
||||
<form action="{% url 'charge' %}" method="post">
|
||||
{% csrf_token %}
|
||||
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
|
||||
data-key="{{ key }}"
|
||||
data-description="A Django Charge"
|
||||
data-amount="500"
|
||||
data-locale="auto"></script>
|
||||
</form>
|
||||
9
payments/templates/payments/paylike.html
Normal file
9
payments/templates/payments/paylike.html
Normal file
@ -0,0 +1,9 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}PayLike{% endblock title %}
|
||||
{% load static %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
<center><h1>PayLike</h1></center>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
153
payments/templates/payments/payment_gateways.html
Normal file
153
payments/templates/payments/payment_gateways.html
Normal file
@ -0,0 +1,153 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}Choose a gateway{% endblock title %}
|
||||
{% load static %}
|
||||
|
||||
{% block header %}
|
||||
<script src="https://use.fontawesome.com/aade6c6330.js"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<style type="text/css">
|
||||
.card-payment {
|
||||
border-top: 10px solid #ddd;
|
||||
border-radius: 0px;
|
||||
padding: 10px;
|
||||
margin: 0;
|
||||
/*background: #fff;*/
|
||||
text-align: center;
|
||||
width: 300px;
|
||||
transition: .5s;
|
||||
}
|
||||
.card-payment:hover {
|
||||
background: #f4f4f4;
|
||||
}
|
||||
.card-payment h4 {
|
||||
font-weight: 200;
|
||||
}
|
||||
.card-payment p {
|
||||
margin: 5px;
|
||||
font-weight: 300;
|
||||
}
|
||||
.card-payment.paypal {
|
||||
border-top-color: #ffc439;
|
||||
/*transform: translateY(-50px);*/
|
||||
}
|
||||
.card-payment.stripe {
|
||||
border-top-color: #62b8ea;
|
||||
}
|
||||
.card-payment.coinbase {
|
||||
border-top-color: #1652f0;
|
||||
}
|
||||
.card-payment.paylike {
|
||||
border-top-color: #60a65d;
|
||||
}
|
||||
.btn {
|
||||
width: 100%;
|
||||
border-radius: 1px;
|
||||
padding: 10px;
|
||||
color: #fff!important;
|
||||
transition: .5s;
|
||||
}
|
||||
.btn:hover {
|
||||
transform: scale(.95);
|
||||
}
|
||||
.btn:focus {
|
||||
box-shadow: none!important;
|
||||
}
|
||||
.stripe .btn {
|
||||
background: #6869d4;
|
||||
}
|
||||
.coinbase .btn {
|
||||
background: #1652f0;
|
||||
}
|
||||
.paylike .btn {
|
||||
background: #60a65d;
|
||||
}
|
||||
</style>
|
||||
<div class="container">
|
||||
<h1 class="display-4">Payment GateWays</h1>
|
||||
<div class="row">
|
||||
<div class="col-12 d-flex justify-content-center">
|
||||
<div class="card-payment paypal">
|
||||
<h4>Paypal</h4>
|
||||
<div id="smart-button-container">
|
||||
<div style="text-align: center;">
|
||||
<div id="paypal-button-container"></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="card-payment stripe">
|
||||
<h4>Stripe</h4>
|
||||
<form action="{% url 'charge' %}" method="POST">
|
||||
{% csrf_token %}
|
||||
<script src="https://checkout.stripe.com/checkout.js" class="stripe-button"
|
||||
data-key="{{ key }}"
|
||||
data-description="{{ description }}"
|
||||
data-amount="{{ amount }}"
|
||||
data-locale="auto">
|
||||
</script>
|
||||
</form>
|
||||
<!-- <a href="{% url 'stripe' %}" class="btn"><i class="fa fa-cc-stripe" aria-hidden="true"></i> Stripe</a> -->
|
||||
<p>
|
||||
Make payment with stripe and get jobs done.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-payment coinbase">
|
||||
<h4>CoinBase</h4>
|
||||
<a href="{% url 'coinbase' %}" class="btn"><span style="font-weight: 1000">C</span> CoinBase</a>
|
||||
<p>
|
||||
Make payment with stripe and get jobs done.
|
||||
</p>
|
||||
</div>
|
||||
<div class="card-payment paylike">
|
||||
<h4>Paylike</h4>
|
||||
<a href="{% url 'paylike' %}" class="btn">Paylike</a>
|
||||
<p>
|
||||
Make payment with stripe and get jobs done.
|
||||
</p>
|
||||
</div>
|
||||
<!-- <a href="{% url 'paypal' %}" class="btn btn-lg btn-secondary mx-3">PayPal</a>
|
||||
<a href="{% url 'stripe' %}" class="btn btn-lg btn-secondary mx-3">Stripe</a>
|
||||
<a href="{% url 'coinbase' %}" class="btn btn-lg btn-secondary mx-3">CoinBase</a>
|
||||
<a href="{% url 'paylike' %}" class="btn btn-lg btn-secondary mx-3">Paylike</a> -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
{% endblock content %}
|
||||
|
||||
|
||||
{% block js %}
|
||||
|
||||
<script src="https://www.paypal.com/sdk/js?client-id=sb¤cy=EUR" data-sdk-integration-source="button-factory"></script>
|
||||
<script>
|
||||
function initPayPalButton() {
|
||||
paypal.Buttons({
|
||||
style: {
|
||||
shape: 'rect',
|
||||
color: 'gold',
|
||||
layout: 'vertical',
|
||||
label: 'paypal',
|
||||
|
||||
},
|
||||
|
||||
createOrder: function(data, actions) {
|
||||
return actions.order.create({
|
||||
purchase_units: [{"amount":{"currency_code":"EUR","value":1}}]
|
||||
});
|
||||
},
|
||||
|
||||
onApprove: function(data, actions) {
|
||||
return actions.order.capture().then(function(details) {
|
||||
alert('Transaction completed by ' + details.payer.name.given_name + '!');
|
||||
});
|
||||
},
|
||||
|
||||
onError: function(err) {
|
||||
console.log(err);
|
||||
}
|
||||
}).render('#paypal-button-container');
|
||||
}
|
||||
initPayPalButton();
|
||||
</script>
|
||||
{% endblock js %}
|
||||
45
payments/templates/payments/paypal.html
Normal file
45
payments/templates/payments/paypal.html
Normal file
@ -0,0 +1,45 @@
|
||||
<head>
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<style>
|
||||
.w3-container {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
.center {
|
||||
position: absolute;
|
||||
left: 50%;
|
||||
top: 50%;
|
||||
transform: translate(-50%, -50%);
|
||||
}
|
||||
</style>
|
||||
|
||||
<div class="center">
|
||||
<h3 class="donate">
|
||||
<div class="w3-card-4">
|
||||
|
||||
<header class="w3-container w3-blue">
|
||||
<h1>DONATE</h1>
|
||||
</header>
|
||||
|
||||
<div class="w3-container">
|
||||
<p>Donate for a great cause. Be a hero.</p>
|
||||
|
||||
<!-- PAYPAL BUTTONS HERE -->
|
||||
|
||||
|
||||
</div>
|
||||
|
||||
<footer class="w3-container w3-blue">
|
||||
<h5>© Professional Cipher</h5>
|
||||
</footer>
|
||||
|
||||
</div>
|
||||
</h3>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
16
payments/templates/payments/stripe.html
Normal file
16
payments/templates/payments/stripe.html
Normal file
@ -0,0 +1,16 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}Stripe{% endblock title %}
|
||||
{% load static %}
|
||||
|
||||
{% block header %}
|
||||
<script src="https://js.stripe.com/v3/"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
<center>
|
||||
<h1>Stripe</h1>
|
||||
<button id="checkout-button">Checkout</button>
|
||||
</center>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
9
payments/templates/payments/thank_you.html
Normal file
9
payments/templates/payments/thank_you.html
Normal file
@ -0,0 +1,9 @@
|
||||
{% extends 'base.html' %}
|
||||
{% block title %}Thank you{% endblock title %}
|
||||
{% load static %}
|
||||
|
||||
{% block content %}
|
||||
<div class="container">
|
||||
<center><h1>Thank you</h1></center>
|
||||
</div>
|
||||
{% endblock content %}
|
||||
3
payments/tests.py
Normal file
3
payments/tests.py
Normal file
@ -0,0 +1,3 @@
|
||||
from django.test import TestCase
|
||||
|
||||
# Create your tests here.
|
||||
18
payments/urls.py
Normal file
18
payments/urls.py
Normal file
@ -0,0 +1,18 @@
|
||||
from django.urls import path
|
||||
from . import views
|
||||
|
||||
urlpatterns = [
|
||||
# path('gateways/', views.payment_gateways, name="gateways"),
|
||||
|
||||
path('paypal/', views.payment_paypal, name="paypal"),
|
||||
path('stripe/', views.payment_stripe, name="stripe"),
|
||||
path('coinbase/', views.payment_coinbase, name="coinbase"),
|
||||
path('paylike/', views.payment_paylike, name="paylike"),
|
||||
|
||||
# path('charge/', views.charge, name="charge"),
|
||||
path('thank_you/', views.thank_you, name="thank_you"),
|
||||
|
||||
|
||||
path('charge/', views.charge, name='charge'), # new
|
||||
path('', views.PaymentGetwaysView.as_view(), name='home_'),
|
||||
]
|
||||
74
payments/views.py
Normal file
74
payments/views.py
Normal file
@ -0,0 +1,74 @@
|
||||
from django.shortcuts import render
|
||||
from django.conf import settings
|
||||
import stripe
|
||||
|
||||
stripe.api_key = settings.STRIPE_SECRET_KEY
|
||||
# stripe.ApplePayDomain.create(
|
||||
# domain_name='example.com',
|
||||
# )
|
||||
|
||||
# def payment_gateways(request):
|
||||
# print(settings.STRIPE_PUBLISHABLE_KEY)
|
||||
# context = {
|
||||
# 'key': settings.STRIPE_PUBLISHABLE_KEY
|
||||
# }
|
||||
# return render(request, 'payments/payment_gateways.html', context)
|
||||
|
||||
|
||||
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 thank_you(request):
|
||||
return render(request, 'payments/thank_you.html', context={})
|
||||
|
||||
|
||||
# def charge(request):
|
||||
# if request.method == 'POST':
|
||||
# charge = stripe.Charge.create(
|
||||
# amount=500,
|
||||
# currency='eur',
|
||||
# description='Payment GetWays',
|
||||
# source=request.POST['stripeToken']
|
||||
# )
|
||||
# return render(request, 'payments/charge.html')
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
from django.views.generic.base import TemplateView
|
||||
|
||||
class PaymentGetwaysView(TemplateView):
|
||||
template_name = 'payments/payment_gateways.html'
|
||||
|
||||
def get_context_data(self, **kwargs): # new
|
||||
context = super().get_context_data(**kwargs)
|
||||
context['key'] = settings.STRIPE_PUBLISHABLE_KEY
|
||||
context['amount'] = 500
|
||||
context['description'] = "Stripe Payment"
|
||||
return context
|
||||
|
||||
|
||||
|
||||
def charge(request): # new
|
||||
if request.method == 'POST':
|
||||
charge = stripe.Charge.create(
|
||||
amount=500,
|
||||
currency='usd',
|
||||
description='A Django charge',
|
||||
source=request.POST['stripeToken']
|
||||
)
|
||||
return render(request, 'payments/charge.html')
|
||||
88
payments/views_stripe.py
Normal file
88
payments/views_stripe.py
Normal file
@ -0,0 +1,88 @@
|
||||
# #! /usr/bin/env python3.6
|
||||
|
||||
# """
|
||||
# server.py
|
||||
# Stripe Sample.
|
||||
# Python 3.6 or newer required.
|
||||
# """
|
||||
|
||||
# import stripe
|
||||
# import json
|
||||
# import os
|
||||
|
||||
# from flask import Flask, render_template, jsonify, request, send_from_directory
|
||||
# from dotenv import load_dotenv, find_dotenv
|
||||
|
||||
# # Setup Stripe python client library
|
||||
# load_dotenv(find_dotenv())
|
||||
# stripe.api_key = os.getenv('STRIPE_SECRET_KEY')
|
||||
# stripe.api_version = os.getenv('STRIPE_API_VERSION')
|
||||
|
||||
# static_dir = str(os.path.abspath(os.path.join(__file__ , "..", os.getenv("STATIC_DIR"))))
|
||||
# app = Flask(__name__, static_folder=static_dir,
|
||||
# static_url_path="", template_folder=static_dir)
|
||||
|
||||
|
||||
# @app.route('/checkout', methods=['GET'])
|
||||
# def get_checkout_page():
|
||||
# # Display checkout page
|
||||
# return render_template('index.html')
|
||||
|
||||
|
||||
# def calculate_order_amount(items):
|
||||
# # Replace this constant with a calculation of the order's amount
|
||||
# # Calculate the order total on the server to prevent
|
||||
# # people from directly manipulating the amount on the client
|
||||
# return 1400
|
||||
|
||||
|
||||
# @app.route('/create-payment-intent', methods=['POST'])
|
||||
# def create_payment():
|
||||
# data = json.loads(request.data)
|
||||
# # Create a PaymentIntent with the order amount and currency
|
||||
# intent = stripe.PaymentIntent.create(
|
||||
# amount=calculate_order_amount(data['items']),
|
||||
# currency=data['currency']
|
||||
# )
|
||||
|
||||
# try:
|
||||
# # Send publishable key and PaymentIntent details to client
|
||||
# return jsonify({'publishableKey': os.getenv('STRIPE_PUBLISHABLE_KEY'), 'clientSecret': intent.client_secret})
|
||||
# except Exception as e:
|
||||
# return jsonify(error=str(e)), 403
|
||||
|
||||
|
||||
# @app.route('/webhook', methods=['POST'])
|
||||
# def webhook_received():
|
||||
# # You can use webhooks to receive information about asynchronous payment events.
|
||||
# # For more about our webhook events check out https://stripe.com/docs/webhooks.
|
||||
# webhook_secret = os.getenv('STRIPE_WEBHOOK_SECRET')
|
||||
# request_data = json.loads(request.data)
|
||||
|
||||
# if webhook_secret:
|
||||
# # Retrieve the event by verifying the signature using the raw body and secret if webhook signing is configured.
|
||||
# signature = request.headers.get('stripe-signature')
|
||||
# try:
|
||||
# event = stripe.Webhook.construct_event(
|
||||
# payload=request.data, sig_header=signature, secret=webhook_secret)
|
||||
# data = event['data']
|
||||
# except Exception as e:
|
||||
# return e
|
||||
# # Get the type of webhook event sent - used to check the status of PaymentIntents.
|
||||
# event_type = event['type']
|
||||
# else:
|
||||
# data = request_data['data']
|
||||
# event_type = request_data['type']
|
||||
# data_object = data['object']
|
||||
|
||||
# if event_type == 'payment_intent.succeeded':
|
||||
# print('💰 Payment received!')
|
||||
# # Fulfill any orders, e-mail receipts, etc
|
||||
# # To cancel the payment you will need to issue a Refund (https://stripe.com/docs/api/refunds)
|
||||
# elif event_type == 'payment_intent.payment_failed':
|
||||
# print('❌ Payment failed.')
|
||||
# return jsonify({'status': 'success'})
|
||||
|
||||
|
||||
# if __name__ == '__main__':
|
||||
# app.run()
|
||||
@ -18,6 +18,8 @@
|
||||
<!-- <link rel="stylesheet" type="text/css" href="{% static 'css/black.css' %}"> -->
|
||||
<link rel="stylesheet" type="text/css" href="{% static 'css/style.css' %}">
|
||||
|
||||
<script src="https://js.stripe.com/v3/"></script>
|
||||
{% block header %}{% endblock %}
|
||||
</head>
|
||||
<body>
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user