parent
6e204263a5
commit
8a0cd6bf81
6 changed files with 149 additions and 73 deletions
@ -0,0 +1,12 @@ |
||||
{% extends "templates/lilcity/index.html" %} {% load static %} {% block content %} |
||||
<div class="section"> |
||||
<div class="section__center center center_xs"> |
||||
<div class="done"> |
||||
<div class="done__title title">Произошла ошибка!</div> |
||||
<div class="done__foot"> |
||||
<a class="done__btn btn btn_md btn_stroke" href="/">ПЕРЕЙТИ К ГЛАВНОЙ</a> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endblock content %} |
||||
@ -0,0 +1,12 @@ |
||||
{% extends "templates/lilcity/index.html" %} {% load static %} {% block content %} |
||||
<div class="section"> |
||||
<div class="section__center center center_xs"> |
||||
<div class="done"> |
||||
<div class="done__title title">Вы успешно приобрели курс!</div> |
||||
<div class="done__foot"> |
||||
<a class="done__btn btn btn_md btn_stroke" href="/">ПЕРЕЙТИ К ГЛАВНОЙ</a> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
</div> |
||||
{% endblock content %} |
||||
@ -0,0 +1,9 @@ |
||||
{% extends "templates/lilcity/index.html" %} {% load static %} {% block content %} |
||||
<div class="section"> |
||||
<div class="section__center center"> |
||||
{% autoescape off %} |
||||
{{ widget }} |
||||
{% endautoescape %} |
||||
</div> |
||||
</div> |
||||
{% endblock content %} |
||||
@ -1,76 +1,107 @@ |
||||
from django.utils.decorators import method_decorator |
||||
from django.views.generic import View |
||||
from django.views.generic import View, TemplateView |
||||
from django.views.decorators.csrf import csrf_exempt |
||||
from django.http import HttpResponse |
||||
|
||||
from paymentwall.pingback import Pingback |
||||
|
||||
from .models import Purchase |
||||
|
||||
|
||||
@method_decorator(csrf_exempt, name='dispatch') |
||||
class PaymentwallCallbackView(View): |
||||
|
||||
CHARGEBACK = '1' |
||||
CREDIT_CARD_FRAUD = '2' |
||||
ORDER_FRAUD = '3' |
||||
BAD_DATA = '4' |
||||
FAKE_PROXY_USER = '5' |
||||
REJECTED_BY_ADVERTISER = '6' |
||||
DUPLICATED_CONVERSIONS = '7' |
||||
GOODWILL_CREDIT_TAKEN_BACK = '8' |
||||
CANCELLED_ORDER = '9' |
||||
PARTIALLY_REVERSED = '10' |
||||
|
||||
def get_request_ip(self): |
||||
x_forwarded_for = self.request.META.get('HTTP_X_FORWARDED_FOR') |
||||
if x_forwarded_for: |
||||
ip = x_forwarded_for.split(',')[0] |
||||
else: |
||||
ip = self.request.META.get('REMOTE_ADDR') |
||||
return ip |
||||
|
||||
def get(self, request, *args, **kwargs): |
||||
pingback = Pingback(request.GET.copy(), self.get_request_ip()) |
||||
|
||||
if pingback.validate(): |
||||
cart_id = pingback.get_product().get_id() |
||||
|
||||
# try: |
||||
# cart = CartModel.objects.get(pk=cart_id) |
||||
# except CartModel.DoesNotExist: |
||||
# log.error('Paymentwall pingback: Cant find cart, Paymentwall sent this data: {}'.format(request.GET.copy())) |
||||
# return HttpResponse(status=403) |
||||
|
||||
try: |
||||
purchase = Purchase.objects.get(transaction_id=pingback.get_reference_id()) |
||||
except Purchase.DoesNotExist: |
||||
# purchase = cart.create_purchase(transaction_id=pingback.get_reference_id()) |
||||
pass |
||||
|
||||
if pingback.is_deliverable(): |
||||
purchase.status = Purchase.COMPLETE |
||||
|
||||
elif pingback.is_cancelable(): |
||||
reason = pingback.get_parameter('reason') |
||||
|
||||
if reason == self.CHARGEBACK or reason == self.CREDIT_CARD_FRAUD or reason == self.ORDER_FRAUD or reason == self.PARTIALLY_REVERSED: |
||||
purchase.status = Purchase.CHARGEBACK |
||||
elif reason == self.CANCELLED_ORDER: |
||||
purchase.status = Purchase.REFUNDED |
||||
else: |
||||
purchase.status = Purchase.ERROR |
||||
|
||||
elif pingback.is_under_review(): |
||||
purchase.status = Purchase.PENDING |
||||
|
||||
else: |
||||
# log.error('Paymentwall pingback: Unknown pingback type, Paymentwall sent this data: {}'.format(request.GET.copy())) |
||||
pass |
||||
|
||||
# purchase.save() |
||||
return HttpResponse('OK', status=200) |
||||
else: |
||||
# log.error('Paymentwall pingback: Cant validate pingback, error: {} Paymentwall sent this data: {}'.format(pingback.get_error_summary(), request.GET.copy())) |
||||
pass |
||||
|
||||
from django.urls import reverse_lazy |
||||
|
||||
from paymentwall import Pingback, Product, Widget |
||||
|
||||
from apps.course.models import Course |
||||
from .models import CoursePayment |
||||
# from .models import Purchase |
||||
|
||||
|
||||
class CourseBuyView(TemplateView): |
||||
template_name = 'payment/paymentwall_widget.html' |
||||
|
||||
def get(self, request, pk=None, *args, **kwargs): |
||||
course = Course.objects.get(id=pk) |
||||
course_payment = CoursePayment.objects.create( |
||||
user=request.user, |
||||
course=course, |
||||
) |
||||
product = Product( |
||||
f'course_{course.id}', |
||||
course.price, |
||||
'RUB', |
||||
'test', |
||||
) |
||||
widget = Widget( |
||||
request.user.id, |
||||
'pw', |
||||
[product], |
||||
extra_params={ |
||||
'lang': 'ru_RU', |
||||
'success_url': reverse_lazy('payment-success'), |
||||
'failure_url': reverse_lazy('payment-error'), |
||||
} |
||||
) |
||||
|
||||
return self.render_to_response(context={'widget': widget.get_html_code()}) |
||||
|
||||
|
||||
# @method_decorator(csrf_exempt, name='dispatch') |
||||
# class PaymentwallCallbackView(View): |
||||
|
||||
# CHARGEBACK = '1' |
||||
# CREDIT_CARD_FRAUD = '2' |
||||
# ORDER_FRAUD = '3' |
||||
# BAD_DATA = '4' |
||||
# FAKE_PROXY_USER = '5' |
||||
# REJECTED_BY_ADVERTISER = '6' |
||||
# DUPLICATED_CONVERSIONS = '7' |
||||
# GOODWILL_CREDIT_TAKEN_BACK = '8' |
||||
# CANCELLED_ORDER = '9' |
||||
# PARTIALLY_REVERSED = '10' |
||||
|
||||
# def get_request_ip(self): |
||||
# x_forwarded_for = self.request.META.get('HTTP_X_FORWARDED_FOR') |
||||
# if x_forwarded_for: |
||||
# ip = x_forwarded_for.split(',')[0] |
||||
# else: |
||||
# ip = self.request.META.get('REMOTE_ADDR') |
||||
# return ip |
||||
|
||||
# def get(self, request, *args, **kwargs): |
||||
# pingback = Pingback(request.GET.copy(), self.get_request_ip()) |
||||
|
||||
# if pingback.validate(): |
||||
# cart_id = pingback.get_product().get_id() |
||||
|
||||
# # try: |
||||
# # cart = CartModel.objects.get(pk=cart_id) |
||||
# # except CartModel.DoesNotExist: |
||||
# # log.error('Paymentwall pingback: Cant find cart, Paymentwall sent this data: {}'.format(request.GET.copy())) |
||||
# # return HttpResponse(status=403) |
||||
|
||||
# try: |
||||
# purchase = Purchase.objects.get(transaction_id=pingback.get_reference_id()) |
||||
# except Purchase.DoesNotExist: |
||||
# # purchase = cart.create_purchase(transaction_id=pingback.get_reference_id()) |
||||
# pass |
||||
|
||||
# if pingback.is_deliverable(): |
||||
# purchase.status = Purchase.COMPLETE |
||||
|
||||
# elif pingback.is_cancelable(): |
||||
# reason = pingback.get_parameter('reason') |
||||
|
||||
# if reason == self.CHARGEBACK or reason == self.CREDIT_CARD_FRAUD or reason == self.ORDER_FRAUD or reason == self.PARTIALLY_REVERSED: |
||||
# purchase.status = Purchase.CHARGEBACK |
||||
# elif reason == self.CANCELLED_ORDER: |
||||
# purchase.status = Purchase.REFUNDED |
||||
# else: |
||||
# purchase.status = Purchase.ERROR |
||||
|
||||
# elif pingback.is_under_review(): |
||||
# purchase.status = Purchase.PENDING |
||||
|
||||
# else: |
||||
# # log.error('Paymentwall pingback: Unknown pingback type, Paymentwall sent this data: {}'.format(request.GET.copy())) |
||||
# pass |
||||
|
||||
# # purchase.save() |
||||
# return HttpResponse('OK', status=200) |
||||
# else: |
||||
# # log.error('Paymentwall pingback: Cant validate pingback, error: {} Paymentwall sent this data: {}'.format(pingback.get_error_summary(), request.GET.copy())) |
||||
# pass |
||||
|
||||
Loading…
Reference in new issue