update dg payment
This commit is contained in:
parent
69f9f4a416
commit
65e3cdeb94
10 changed files with 69 additions and 60 deletions
|
@ -28,7 +28,7 @@
|
|||
rel="stylesheet" type="text/css">
|
||||
<link href="//fonts.googleapis.com/css?family=Josefin+Slab:100,300,400,600,700,100italic,300italic,400italic,600italic,700italic"
|
||||
rel="stylesheet" type="text/css">
|
||||
<link href="{% static 'digitalglarus/css/font-awesome.min.css' %}"
|
||||
<link href="{% static 'digitalglarus/bower_components/font-awesome/css/font-awesome.min.css' %}"
|
||||
rel="stylesheet" type="text/css">
|
||||
|
||||
{% render_block "css" postprocessor "compressor.contrib.sekizai.compress" %}
|
||||
|
@ -65,7 +65,7 @@
|
|||
<div class="pull-right u_P user">
|
||||
{% if request.user.is_authenticated %}
|
||||
<div class="user_loggedin">
|
||||
<h4>{{ request.user.name }}
|
||||
<h4><a href="{% url 'membership' %}">{{ request.user.name }}</a>
|
||||
<a href="{% url 'logout_glarus' %}"><i class="fa fa-1x fa-sign-out"
|
||||
aria-hidden="true"></i></a>
|
||||
</h4>
|
||||
|
|
|
@ -1,17 +1,17 @@
|
|||
from django.conf.urls import url
|
||||
|
||||
from django.utils.translation import ugettext_lazy as _
|
||||
|
||||
from . import views
|
||||
from .views import ContactView, IndexView, AboutView
|
||||
|
||||
urlpatterns = [
|
||||
# url(r'^$', IndexView.as_view(), name='home'),
|
||||
url(_(r'home/?$'), IndexView.as_view(), name='home'),
|
||||
url(_(r'about/?$'), AboutView.as_view(), name='about'),
|
||||
# url(r'^$', IndexView.as_view(), name='home'),
|
||||
# url(_(r'home/?$'), IndexView.as_view(), name='home'),
|
||||
# url(_(r'about/?$'), AboutView.as_view(), name='about'),
|
||||
url(_(r'contact/?$'), ContactView.as_view(), name='contact'),
|
||||
url(_(r'supporters/?$'), views.supporters, name='supporters'),
|
||||
url(r'calendar_api/(?P<month>\d+)/(?P<year>\d+)?$',views.CalendarApi.as_view()),
|
||||
url(r'calendar_api/',views.CalendarApi.as_view()),
|
||||
url(r'calendar_api/(?P<month>\d+)/(?P<year>\d+)?$', views.CalendarApi.as_view()),
|
||||
url(r'calendar_api/', views.CalendarApi.as_view()),
|
||||
url(_(r'support-us/?$'), views.support, name='support'),
|
||||
url(r'^blog/(?P<slug>\w[-\w]*)/$', views.blog_detail, name='blog-detail'),
|
||||
url(r'blog/$', views.blog, name='blog'),
|
||||
|
|
|
@ -446,8 +446,8 @@ AUTH_USER_MODEL = 'membership.CustomUser'
|
|||
|
||||
# PAYMENT
|
||||
|
||||
STRIPE_API_PUBLIC_KEY = 'pk_test_QqBZ50Am8KOxaAlOxbcm9Psl' # used in frontend to call from user browser
|
||||
STRIPE_API_PRIVATE_KEY = 'sk_test_dqAmbKAij12QCGfkYZ3poGt2' # used in backend payment
|
||||
STRIPE_API_PUBLIC_KEY = 'pk_test_ZRg6P8g5ybiHE6l2RW5pSaYV' # used in frontend to call from user browser
|
||||
STRIPE_API_PRIVATE_KEY = 'sk_test_uIPMdgXoRGydrcD7fkwcn7dj' # used in backend payment
|
||||
STRIPE_DESCRIPTION_ON_PAYMENT = "Payment for ungleich GmbH services"
|
||||
|
||||
# EMAIL MESSAGES
|
||||
|
|
|
@ -23,13 +23,13 @@ urlpatterns += i18n_patterns('',
|
|||
url(r'^admin/', include(admin.site.urls)),
|
||||
url(r'^digitalglarus/login/', include(membership_urls)),
|
||||
url(r'^digitalglarus/', include('digitalglarus.urls',
|
||||
namespace="digitalglarus"),
|
||||
namespace="digitalglarus")),
|
||||
url(r'^blog/', include('ungleich.urls', namespace='ungleich')),
|
||||
url(r'^ungleich_page/',
|
||||
include('ungleich_page.urls', namespace='ungleich_page'),
|
||||
name='ungleich_page'),
|
||||
url(r'^blog/',include('ungleich.urls',namespace='ungleich')),
|
||||
url(r'^', include('cms.urls')),
|
||||
url(r'^', include('cms.urls'))
|
||||
)
|
||||
|
||||
if settings.DEBUG:
|
||||
|
|
|
@ -4,7 +4,7 @@ from .views import DjangoHostingView, RailsHostingView, PaymentVMView, \
|
|||
NodeJSHostingView, LoginView, SignupView, IndexView
|
||||
|
||||
urlpatterns = [
|
||||
url(r'pricing/?$', VMPricingView.as_view(), name='pricing'),
|
||||
# url(r'pricing/?$', VMPricingView.as_view(), name='pricing'),
|
||||
url(r'index/?$', IndexView.as_view(), name='index'),
|
||||
url(r'django/?$', DjangoHostingView.as_view(), name='djangohosting'),
|
||||
url(r'nodejs/?$', NodeJSHostingView.as_view(), name='nodejshosting'),
|
||||
|
|
|
@ -8,6 +8,7 @@ from django.core.mail import send_mail
|
|||
from django.core.validators import RegexValidator
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.sites.models import Site
|
||||
|
||||
from utils.stripe_utils import StripeUtils
|
||||
|
||||
REGISTRATION_MESSAGE = {'subject': "Validation mail",
|
||||
|
@ -132,8 +133,12 @@ class StripeCustomer(models.Model):
|
|||
Check if there is a registered stripe customer with that email
|
||||
or create a new one
|
||||
"""
|
||||
|
||||
try:
|
||||
stripe_utils = StripeUtils()
|
||||
stripe_customer = cls.objects.get(user__email=email)
|
||||
#check if user is not in stripe but in database
|
||||
stripe_utils.check_customer(stripe_customer.stripe_id,stripe_customer.user,token)
|
||||
return stripe_customer
|
||||
|
||||
except StripeCustomer.DoesNotExist:
|
||||
|
@ -142,7 +147,7 @@ class StripeCustomer(models.Model):
|
|||
stripe_utils = StripeUtils()
|
||||
stripe_data = stripe_utils.create_customer(token, email)
|
||||
|
||||
stripe_customer = StripeCustomer.objects.\
|
||||
stripe_customer = StripeCustomer.objects. \
|
||||
create(user=user, stripe_id=stripe_data.get('id'))
|
||||
|
||||
return stripe_customer
|
||||
|
@ -157,6 +162,10 @@ class CreditCards(models.Model):
|
|||
ccv = models.CharField(max_length=4, validators=[RegexValidator(r'\d{3,4}', _('Wrong CCV number.'))])
|
||||
payment_type = models.CharField(max_length=5, default='N')
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
# override saving to database
|
||||
pass
|
||||
|
||||
|
||||
class Calendar(models.Model):
|
||||
datebooked = models.DateField()
|
||||
|
@ -170,10 +179,9 @@ class Calendar(models.Model):
|
|||
super(Calendar, self).__init__(*args, **kwargs)
|
||||
|
||||
@classmethod
|
||||
def add_dates(cls,dates,user):
|
||||
def add_dates(cls, dates, user):
|
||||
old_dates = Calendar.objects.filter(user_id=user.id)
|
||||
if old_dates:
|
||||
old_dates.delete()
|
||||
for date in dates:
|
||||
Calendar.objects.create(datebooked=date,user=user)
|
||||
|
||||
Calendar.objects.create(datebooked=date, user=user)
|
||||
|
|
|
@ -125,7 +125,7 @@
|
|||
for coworking. It is a perfect try-out package!
|
||||
<br>
|
||||
</p>
|
||||
<a class="btn btn-primary" href="/login/buy/month/">Buy Now</a>
|
||||
<a class="btn btn-primary" href="{% url 'payment' time='month' %}">Buy Now</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -146,7 +146,7 @@
|
|||
membership.
|
||||
<br>
|
||||
</p>
|
||||
<a class="btn btn-primary" href="/login/buy/year/">Buy Now</a>
|
||||
<a class="btn btn-primary" href="{% url 'payment' time='year' %}">Buy Now</a>
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
<img src="https://unsplash.imgix.net/photo-1413834932717-29e7d4714192?w=1024&q=50&fm=jpg&s=d9d6cbc32dd4968d0c21e331436a6af6"
|
||||
|
|
|
@ -1,17 +1,18 @@
|
|||
{% load static %}
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<script type="text/javascript" src="{% static 'digitalglarus/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'digitalglarus/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
<link href="{% static 'digitalglarus/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
|
||||
<link href="{% static 'digitalglarus/bower_components/font-awesome/css/font-awesome.min.css' %}" rel="stylesheet" type="text/css">
|
||||
<link href="{% static 'digitalglarus/bower_components/bootstrap/dist/css/bootstrap.min.css' %}" rel="stylesheet"
|
||||
type="text/css">
|
||||
{% if request.session.next == None %}
|
||||
<script>
|
||||
type = "text/javascript" >
|
||||
setTimeout(function () {
|
||||
window.location.href = "/";
|
||||
window.location.href = "{% url 'membership' %}";
|
||||
}, 5000);
|
||||
</script>
|
||||
{% endif %}
|
||||
|
@ -25,7 +26,7 @@
|
|||
{% if msg == 'succeeded' %}
|
||||
Thank You for Your payment!<br> <p>redirecting...</p>
|
||||
{% else %}
|
||||
Your payment was not processed correctly.<br> Reason: {{ msg }}
|
||||
Your payment was not processed correctly. Please contact us <a href="{% url 'digitalglarus:contact' %}">here</a>!
|
||||
{% endif %}
|
||||
</h3>
|
||||
</div>
|
||||
|
|
|
@ -8,9 +8,9 @@ from django.contrib.auth import logout
|
|||
from django.http import HttpResponseRedirect
|
||||
from django.contrib.auth import login
|
||||
|
||||
from .models import CustomUser
|
||||
from .models import CustomUser,StripeCustomer
|
||||
from .forms import (LoginForm, RegisterForm, PaymentForm)
|
||||
from .payment import StripePayment
|
||||
from utils.stripe_utils import StripeUtils
|
||||
|
||||
|
||||
def validate_email(request, validate_slug):
|
||||
|
@ -49,10 +49,12 @@ class CreditCardView(View):
|
|||
template = 'templates/creditcard.html'
|
||||
request.session['next'] +=1
|
||||
elif next == 2:
|
||||
msg = StripePayment.make_payment(request.user, request.session['amount'],
|
||||
request.session['token'],request.session['time'])
|
||||
customer = StripeCustomer.get_or_create(email=request.user.email,token=request.session['token'])
|
||||
stripe_utils = StripeUtils()
|
||||
charge = stripe_utils.make_charge(request.session['amount'],customer=customer.stripe_id)
|
||||
template = 'templates/validated.html'
|
||||
context['msg'] = msg
|
||||
import ipdb;ipdb.set_trace()
|
||||
context['msg'] = charge.get('status')
|
||||
request.session['next'] = None
|
||||
return render(request, template, context)
|
||||
|
||||
|
@ -63,7 +65,6 @@ class CreditCardView(View):
|
|||
if form.is_valid():
|
||||
ret = form.save(request.user)
|
||||
amount = 35 if time == 'month' else 360
|
||||
amount = amount * 100 # payments are in 'cents'
|
||||
request.session['token'] = stripe_token
|
||||
request.session['amount'] = amount
|
||||
request.session['next'] +=1
|
||||
|
|
|
@ -1,58 +1,49 @@
|
|||
import stripe
|
||||
from django.conf import settings
|
||||
from django.db import models
|
||||
|
||||
|
||||
stripe.api_key = settings.STRIPE_API_PRIVATE_KEY
|
||||
|
||||
class StripeUtils(object):
|
||||
|
||||
CURRENCY = 'chf'
|
||||
INTERVAL = 'month'
|
||||
SUCCEEDED_STATUS = 'succeeded'
|
||||
|
||||
def __init__(self):
|
||||
self.stripe = stripe
|
||||
self.stripe.api_key = settings.STRIPE_API_PRIVATE_KEY
|
||||
|
||||
def check_customer(self, id,user,token):
|
||||
customers = self.stripe.Customer.all()
|
||||
if not customers.get('data'):
|
||||
customer = self.create_customer(token,user.email)
|
||||
else:
|
||||
try:
|
||||
customer = stripe.Customer.retrieve(id)
|
||||
except stripe.InvalidRequestError:
|
||||
customer = self.create_customer(token,user.email)
|
||||
user.stripecustomer.stripe_id=customer.get('id')
|
||||
user.stripecustomer.save()
|
||||
return customer
|
||||
|
||||
def create_customer(self, token, email):
|
||||
stripe.api_key = settings.STRIPE_API_PRIVATE_KEY
|
||||
customer = stripe.Customer.create(
|
||||
source=token,
|
||||
description='description for testing',
|
||||
email=email
|
||||
source=token,
|
||||
description='description for testing',
|
||||
email=email
|
||||
)
|
||||
return customer
|
||||
|
||||
def make_charge(self, amount=None, customer=None):
|
||||
amount = int(amount * 100) # stripe amount unit, in cents
|
||||
|
||||
charge = self.stripe.Charge.create(
|
||||
amount=amount, # in cents
|
||||
currency=self.CURRENCY,
|
||||
customer=customer
|
||||
)
|
||||
return charge
|
||||
|
||||
def create_plan(self, amount, name, id):
|
||||
self.stripe.Plan.create(
|
||||
amount=amount,
|
||||
interval=self.INTERVAL,
|
||||
name=name,
|
||||
currency=self.CURRENCY,
|
||||
id=id)
|
||||
|
||||
def make_payment(self, user, amount, token):
|
||||
import ipdb;ipdb.set_trace()
|
||||
try:
|
||||
# Use Stripe's library to make requests...
|
||||
charge = self.stripe.Charge.create(
|
||||
amount=amount,
|
||||
amount=amount, # in cents
|
||||
currency=self.CURRENCY,
|
||||
source=token,
|
||||
description=settings.STRIPE_DESCRIPTION_ON_PAYMENT
|
||||
customer=customer
|
||||
)
|
||||
|
||||
if charge.get('status') == self.SUCCEEDED_STATUS:
|
||||
# do something
|
||||
pass
|
||||
return charge['status']
|
||||
return charge
|
||||
except self.stripe.error.CardError as e:
|
||||
# Since it's a decline, stripe.error.CardError will be caught
|
||||
body = e.json_body
|
||||
|
@ -74,3 +65,11 @@ class StripeUtils(object):
|
|||
except Exception as e:
|
||||
# maybe send email
|
||||
return "Currently its not possible to make payments."
|
||||
|
||||
def create_plan(self, amount, name, id):
|
||||
self.stripe.Plan.create(
|
||||
amount=amount,
|
||||
interval=self.INTERVAL,
|
||||
name=name,
|
||||
currency=self.CURRENCY,
|
||||
id=id)
|
||||
|
|
Loading…
Reference in a new issue