Exemplo n.º 1
0
    def post(self, request, format=None):
        merchant_uid = request.data.get('merchantUid', None)
        imp_uid = request.data.get('impUid', None)
        imp_success = request.data.get('impSuccess', None)
        if merchant_uid and imp_uid:
            iamport = Iamport(settings.IAMPORT_API_KEY,
                              settings.IAMPORT_API_SECRET)
            meta = iamport.find(merchant_uid=merchant_uid)
            payment = models.Payment.objects.get(merchant_uid=merchant_uid)
            payment.meta = meta
            payment.imp_uid = imp_uid

            pay_status = meta['status']
            if imp_success == 'true':
                payment.status = 'paid'
                payment.alert_status = 'confirmed'
                payment.save()
                order = payment.order
                order.status = 'paid'
                order.save()
            else:
                payment.status = pay_status
                payment.alert_status = 'required'
                payment.save()

            return Response(status=status.HTTP_200_OK, data={'status': 'ok'})
        else:
            return Response(
                status=status.HTTP_203_NON_AUTHORITATIVE_INFORMATION,
                data={
                    'error':
                    'Payment failed! Please contact to [email protected]'
                })
Exemplo n.º 2
0
def payinfo_view(request, cart_pk):
    order = Cart.objects.get(pk=cart_pk)
    iamport = Iamport(imp_key=settings.IAMPORT_KEY,
                      imp_secret=settings.IAMPORT_SECRET)
    response = iamport.find(imp_uid=order.order_id)
    context = {
        'order': order,
        'rsp': response,
    }
    return render(request, 'users/payinfo.html', context)
Exemplo n.º 3
0
    def get_payment(merchant_uid):
        merchant_uid = merchant_uid

        imp_key = os.environ.get("IMPORT_REST_API")
        imp_secret = os.environ.get("IMPORT_REST_API_SECRET")

        iamport = Iamport(imp_key=imp_key, imp_secret=imp_secret)
        response = iamport.find(merchant_uid=merchant_uid)

        print(response)
        return response
Exemplo n.º 4
0
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)

        iamport = Iamport(
            imp_key='8161721766694252',
            imp_secret=
            'kJqNZpHNzkWkA55fMJ9h1GyOm5ataB1vkrikRZ8qk4KUaQaWAjeB0MpmRAQ2bRxwjPRaP0B94m4fdecO'
        )

        pay_information = iamport.find(merchant_uid=self.object.merchant_uid)
        context['pay_info'] = pay_information
        return context
Exemplo n.º 5
0
def payment_reservations_save_view(request):
    if request.method == 'POST':
        restaurant = int(request.POST.get('restaurant'))
        information = int(request.POST.get('information'))
        name = request.POST.get('name')
        party = int(request.POST.get('party'))
        phone_number = int(request.POST.get('phone_number'))
        email = request.POST.get('email')
        price = int(request.POST.get('price'))
        reservation = Reservation.objects.create(
            user=request.user,
            information=get_object_or_404(ReservationInfo, pk=information),
            restaurant=get_object_or_404(Restaurant, pk=restaurant),
            name=name,
            party=party,
            phone_number=phone_number,
            email=email,
            price=price,
        )
        # 예약 가능 인원 수에서 예약 인원만큼 빼 줌
        get_object_or_404(ReservationInfo, pk=information).acceptable_size_of_party_update(party)
        iamport = Iamport(imp_key=settings.IMP_KEY,
                          imp_secret=settings.IMP_SECRET)
        # 입력한 imp_uid로부터 결제정보를 가져옴
        payment = iamport.find(imp_uid=request.POST.get('imp_uid'))
        # Payment 모델에 있는 모든 필드를 리스트에 담음
        all_fields = [f.name for f in Payment._meta.get_fields()]
        # 주문 해야할 금액과 실제 결제 금액이 일치하는지 검증 후 일치하지 않으면 자동으로 취소
        # 취소 되었을 경우에는 취소 되어진 결제정보로 데이터베이스에 저장
        # 또한, 취소 되었을 경우 취소되었다는 메일 보냄(celery로 비동기 처리, celery config dev로 바꾸고 배포 관련 처리 하고 주석 빼야 함)
        if not iamport.is_paid(int(request.POST.get('price')), imp_uid=request.POST.get('imp_uid')):
            cancel = iamport.cancel(u'가격 불일치', imp_uid=request.POST.get('imp_uid'))
            # send_mail_task.delay('Test', 'Test', '*****@*****.**')
            Payment.objects.create(
                **{key: value for key, value in cancel.items() if key in all_fields},
                reservation=reservation
            )
        else:
            Payment.objects.create(
                **{key: value for key, value in payment.items() if key in all_fields},
                reservation=reservation
            )
            return HttpResponse('success')
        return HttpResponse('failed')
Exemplo n.º 6
0
 def post(self, request, pk):
     reservation = get_object_or_404(Reservation, pk=pk)
     iamport = Iamport(imp_key=settings.IMP_KEY,
                       imp_secret=settings.IMP_SECRET)
     payment = iamport.find(imp_uid=request.data.get('imp_uid'))
     if not iamport.is_paid(int(request.data.get('price')),
                            imp_uid=request.data.get('imp_uid')):
         cancel = iamport.cancel(u'가격 불일치',
                                 imp_uid=request.data.get('imp_uid'))
         serializer = PaymentSerializer(data=cancel)
     else:
         serializer = PaymentSerializer(data=payment)
     if serializer.is_valid(raise_exception=True):
         try:
             serializer.save(reservation=reservation)
         except IntegrityError:
             raise exceptions.ValidationError
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 7
0
 def post(self, request, pk):
     reservation = get_object_or_404(Reservation, pk=pk)
     iamport = Iamport(imp_key=settings.IMP_KEY,
                       imp_secret=settings.IMP_SECRET)
     # 입력한 imp_uid로부터 결제정보를 가져옴
     payment = iamport.find(imp_uid=request.data.get('imp_uid'))
     # 주문 해야할 금액과 실제 결제 금액이 일치하는지 검증 후 일치하지 않으면 자동으로 취소
     # 취소 되었을 경우에는 취소 되어진 결제정보로 데이터베이스에 저장
     # 또한, 취소 되었을 경우 취소되었다는 메일 보냄(celery로 비동기 처리, celery config dev로 바꾸고 배포 관련 처리 하고 주석 빼야 함)
     if not iamport.is_paid(int(request.data.get('price')),
                            imp_uid=request.data.get('imp_uid')):
         cancel = iamport.cancel(u'가격 불일치',
                                 imp_uid=request.data.get('imp_uid'))
         # send_mail_task.delay('Test', 'Test', '*****@*****.**')
         serializer = PaymentSerializer(data=cancel)
     else:
         serializer = PaymentSerializer(data=payment)
     if serializer.is_valid(raise_exception=True):
         try:
             serializer.save(reservation=reservation)
         except IntegrityError:
             raise exceptions.ValidationError
         return Response(serializer.data, status=status.HTTP_201_CREATED)
     return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
Exemplo n.º 8
0
def test_find():
    iamport = Iamport()
    result = iamport.find(imp_uid='test')
    assert dict == type(result)
    result = iamport.find(merchant_uid='test')
    assert dict == type(result)