[Django]Iamport 연동하기 - 3

Edit

[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),
]

이 다음으로는 유저가 실제 결제를 할 수 있는 화면을 만들어보자.

%23%23%23%5BDjango%5DIamport%20%uC5F0%uB3D9%uD558%uAE30%20-%203%0A@%28Postach.io%29%5Bdjango%2C%20iamport%2C%20published%5D%0A%0A%uC774%uC804%uAE4C%uC9C4%20%uACB0%uC81C%uC5D0%20%uB300%uD55C%20model%20%uBD80%uBD84%uC774%uC600%uB2E4%uBA74%20%uC774%uBC88%uC5D0%uB294%20%uC7A5%uACE0%uC758%20view%uB97C%20%uB2E4%uB8E8%uC5B4%20%uBCFC%20%uAC83%uC774%uB2E4.%20billing%uC758%20view%uB97C%20%uC791%uC131%uD574%uBCF4%uC790.%0Apython%203.6%20%2C%20django%201.10%0A%0A%60%60%60python%0A%23%20biliing/views.py%0Afrom%20django.shortcuts%20import%20render%0Afrom%20django.http%20import%20JsonResponse%0Afrom%20.models%20import%20%28%0A%09PointTransaction%2C%20%0A%09Point%2C%0A%29%0A%0A%0Aclass%20PointCheckoutAjaxView%28View%29%3A%0A%20%20%20%20def%20post%28self%2C%20request%2C%20*args%2C%20**kwargs%29%3A%0A%20%20%20%20%20%20%20%20if%20not%20request.user.is_authenticated%28%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20JsonResponse%28%7B%7D%2C%20status%3D401%29%0A%0A%20%20%20%20%20%20%20%20user%20%3D%20request.user%0A%20%20%20%20%20%20%20%20amount%20%3D%20request.POST.get%28%27amount%27%29%0A%20%20%20%20%20%20%20%20type%20%3D%20request.POST.get%28%27type%27%29%0A%0A%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20trans%20%3D%20PointTransaction.objects.create_new%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20user%3Duser%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20amount%3Damount%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20type%3Dtype%0A%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20except%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20trans%20%3D%20None%0A%0A%20%20%20%20%20%20%20%20if%20trans%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22works%22%3A%20True%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22merchant_id%22%3A%20trans%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20JsonResponse%28data%29%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20JsonResponse%28%7B%7D%2C%20status%3D401%29%0A%0A%0Aclass%20PointImpAjaxView%28View%29%3A%0A%20%20%20%20def%20post%28self%2C%20request%2C%20*args%2C%20**kwargs%29%3A%0A%20%20%20%20%20%20%20%20if%20not%20request.user.is_authenticated%28%29%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20JsonResponse%28%7B%7D%2C%20status%3D401%29%0A%0A%20%20%20%20%20%20%20%20user%20%3D%20request.user%0A%20%20%20%20%20%20%20%20merchant_id%20%3D%20request.POST.get%28%27merchant_id%27%29%0A%20%20%20%20%20%20%20%20imp_id%20%3D%20request.POST.get%28%27imp_id%27%29%0A%20%20%20%20%20%20%20%20amount%20%3D%20request.POST.get%28%27amount%27%29%0A%0A%20%20%20%20%20%20%20%20try%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20trans%20%3D%20PointTransaction.objects.get%28%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20user%3Duser%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20order_id%3Dmerchant_id%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20amount%3Damount%0A%20%20%20%20%20%20%20%20%20%20%20%20%29%0A%20%20%20%20%20%20%20%20except%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20trans%20%3D%20None%0A%0A%20%20%20%20%20%20%20%20if%20trans%20is%20not%20None%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20trans.transaction_id%20%3D%20imp_id%0A%20%20%20%20%20%20%20%20%20%20%20%20trans.success%20%3D%20True%0A%20%20%20%20%20%20%20%20%20%20%20%20trans.save%28%29%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20data%20%3D%20%7B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%22works%22%3A%20True%0A%20%20%20%20%20%20%20%20%20%20%20%20%7D%0A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20JsonResponse%28data%29%0A%20%20%20%20%20%20%20%20else%3A%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20JsonResponse%28%7B%7D%2C%20status%3D401%29%0A%0Adef%20charge_point%28request%29%3A%0A%20%20%20%20template%20%3D%20%27charge.html%27%0A%20%20%20%20%0A%20%20%20%20return%20render%28request%2C%20template%29%0A%60%60%60%0A%0A%uC2E4%uC81C%20%uC720%uC800%uAC00%20%uACB0%uC81C%uB97C%20%uC9C4%uD589%uD558%uAC8C%20%uB418%uBA74%20%uB450%20%uAC00%uC9C0%20%uACFC%uC815%uC744%20%uAC70%uCE58%uAC8C%20%uB41C%uB2E4.%20%uCCAB%uBC88%uC9F8%uB294%20%uC720%uC800%uAC00%20%uC11C%uBC84%uC5D0%20%uC694%uCCAD%uD55C%20%uAE08%uC561%uC744%20%uC544%uC5E0%uD3EC%uD2B8%uC5D0%20%uBCF4%uB0B4%uB294%20%uACFC%uC815%uACFC%20%uB450%20%uBC88%uC9F8%uB294%20%uC720%uC800%uAC00%20%uACB0%uC81C%uB97C%20%uB2E4%20%uD558%uACE0%20%uB098%uC11C%20%uC11C%uBC84%uC5D0%20%uC800%uC7A5%uB41C%20%uACB0%uC81C%20%uC815%uBCF4%uC640%20%uC544%uC5E0%uD3EC%uD2B8%uC5D0%20%uC800%uC7A5%uB41C%20%uC815%uBCF4%28%uC2E4%uC81C%20%uACB0%uC81C%20%uC815%uBCF4%29%uB97C%20%uBE44%uAD50%uD558%uB294%20%uACFC%uC815%uC774%uB2E4.%20%0A%0A%uC774%uC81C%20url.py%uC5D0%20view%uB97C%20%uC5F0%uACB0%uD558%uC790.%0A%60%60%60python%0A%23%20urls.py%0Afrom%20django.conf.urls%20import%20url%0Afrom%20django.contrib%20import%20admin%0Afrom%20billing.views%20import%20%28%0A%20%20%20%20charge_point%2C%0A%20%20%20%20PointCheckoutAjaxView%2C%0A%20%20%20%20PointImpAjaxView%2C%0A%29%0A%0Aurlpatterns%20%3D%20%5B%0A%20%20%20%20url%28r%27%5Echarge/%24%27%2C%20charge_point%29%2C%0A%20%20%20%20url%28r%27%5Echeckout/%24%27%2C%20PointCheckoutAjaxView.as_view%28%29%2C%20name%3D%27point_checkout%27%29%2C%0A%20%20%20%20url%28r%27%5Evalidation/%24%27%2C%20PointImpAjaxView.as_view%28%29%2C%20name%3D%27point_validation%27%29%2C%0A%0A%20%20%20%20url%28r%27%5Eadmin/%27%2C%20admin.site.urls%29%2C%0A%5D%0A%0A%60%60%60%0A%0A%uC774%20%uB2E4%uC74C%uC73C%uB85C%uB294%20%uC720%uC800%uAC00%20%uC2E4%uC81C%20%uACB0%uC81C%uB97C%20%uD560%20%uC218%20%uC788%uB294%20%uD654%uBA74%uC744%20%uB9CC%uB4E4%uC5B4%uBCF4%uC790.