[Django]Iamport 연동하기 - 3
[Django]Iamport 연동하기 - 3
이전까진 결제에 대한 model 부분이였다면 이번에는 장고의 view를 다루어 볼 것이다. billing의 view를 작성해보자.
python 3.6 , django 1.10
# biliing/views.py
from django.shortcuts import render
from django.http import JsonResponse
from .models import (
PointTransaction,
Point,
)
class PointCheckoutAjaxView(View):
def post(self, request, *args, **kwargs):
if not request.user.is_authenticated():
return JsonResponse({}, status=401)
user = request.user
amount = request.POST.get('amount')
type = request.POST.get('type')
try:
trans = PointTransaction.objects.create_new(
user=user,
amount=amount,
type=type
)
except:
trans = None
if trans is not None:
data = {
"works": True,
"merchant_id": trans
}
return JsonResponse(data)
else:
return JsonResponse({}, status=401)
class PointImpAjaxView(View):
def post(self, request, *args, **kwargs):
if not request.user.is_authenticated():
return JsonResponse({}, status=401)
user = request.user
merchant_id = request.POST.get('merchant_id')
imp_id = request.POST.get('imp_id')
amount = request.POST.get('amount')
try:
trans = PointTransaction.objects.get(
user=user,
order_id=merchant_id,
amount=amount
)
except:
trans = None
if trans is not None:
trans.transaction_id = imp_id
trans.success = True
trans.save()
data = {
"works": True
}
return JsonResponse(data)
else:
return JsonResponse({}, status=401)
def charge_point(request):
template = 'charge.html'
return render(request, template)
실제 유저가 결제를 진행하게 되면 두 가지 과정을 거치게 된다. 첫번째는 유저가 서버에 요청한 금액을 아엠포트에 보내는 과정과 두 번째는 유저가 결제를 다 하고 나서 서버에 저장된 결제 정보와 아엠포트에 저장된 정보(실제 결제 정보)를 비교하는 과정이다.
이제 url.py에 view를 연결하자.
# urls.py
from django.conf.urls import url
from django.contrib import admin
from billing.views import (
charge_point,
PointCheckoutAjaxView,
PointImpAjaxView,
)
urlpatterns = [
url(r'^charge/$', charge_point),
url(r'^checkout/$', PointCheckoutAjaxView.as_view(), name='point_checkout'),
url(r'^validation/$', PointImpAjaxView.as_view(), name='point_validation'),
url(r'^admin/', admin.site.urls),
]
이 다음으로는 유저가 실제 결제를 할 수 있는 화면을 만들어보자.