inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Bắt đầu với thanh toán bằng Python/Django (Feat. I'mport) - Phần cơ bản

Triển khai chế độ xem Order_detail

결제 중간 이탈

Đã giải quyết

324

rnwoghd551088

3 câu hỏi đã được viết

0

order_detail까지 모두 잘 따라 만들었습니다.

이전에 테스트했을 때는 분명 안그랬던거 같은데...

 

결제를 하다가 중간에 나오거나 되돌아가면, 이게 redirect되면서 order_detail의 페이지로 이동합니다.

 

제 생각에는 결제를 시도하기 위한 페이지로 다시 돌아가는게 맞다고 생각하는데...

원래 이게 맞는건지, 아니면 제 코드가 잘못된건지 여쭤볼 수 있을까요?

models.py

class OrderPayment(AbstractPortonePayment):
    order = models.ForeignKey(Order, on_delete=models.CASCADE, db_constraint=False, help_text="주문")

    def update(self):
        super().update()
        if self.is_paid_ok:
            self.order.status = Order.Status.PAID
            self.order.save()
            # 다수의 결제시도
            self.order.orderpayment_set.exclude(pk=self.pk).delete()
        elif self.pay_status in (self.PayStatus.CANCELED, self.PayStatus.FAILED):
            self.order.status = Order.Status.FAILED_PAYMENT
            self.order.save()

    @classmethod
    def create_by_order(cls, order: Order) -> "OrderPayment":
        return cls.objects.create(
            order=order,
            name=order.name,
            desired_valuation=order.valuation,
            buyer_name=order.user.name,
            buyer_email=order.user.email,
        )

views.py

# 주문 생성
@login_required
def order_new(request, pk):
    membership = Membership.objects.filter(pk=pk).first()

    order = Order.create_from_membership_list(request.user, membership)

    return redirect('membership:order_pay', order.pk)


# 주문 결제
@login_required
def order_pay(request, pk):
    order = get_object_or_404(Order, pk=pk, user=request.user)

    if not order.can_pay():
        messages.error(request, "현재 결제를 할 수 없는 주문입니다.")
        return redirect(order)

    payment = OrderPayment.create_by_order(order)

    payment_props = {
        "pg": "uplus",
        "pay_method": 'card',
        "merchant_uid": payment.merchant_uid,
        "name": payment.name,
        "amount": payment.desired_valuation,
        "buyer_name": payment.buyer_name,
        "buyer_email": payment.buyer_email,
        "buyer_tel": str(request.user.phone_number),
        "buyer_addr": request.user.address,
        "buyer_postcode": "00000"
    }

    return render(
        request,
        'membership/order_pay.html',
        {
            'portone_shop_id': settings.PORTONE_SHOP_ID,
            'payment_props': payment_props,
            'next_url': reverse('membership:order_check', args=[order.pk, payment.pk]),
        }
    )


# 결제 점검
@login_required
def order_check(request, order_pk, payment_pk):
    payment = get_object_or_404(OrderPayment, pk=payment_pk, order__pk=order_pk)
    payment.update()
    return redirect('membership:order_detail', order_pk)


@login_required
def order_detail(request, pk):
    order = get_object_or_404(Order, pk=pk, user=request.user)
    return render(
        request,
        'membership/order_detail.html',
        {
            'order': order
        }
    )

python django

Câu trả lời 2

0

rnwoghd551088

제가 잘 못 생각했던게 문제였습니다...!

0

pyhub

안녕하세요.

말씀하신 아래의 "결제를 하다가 중간에 나오거나 되돌아가면" 상황은 어떤 상황이실까요?

결제를 하다가 중간에 나오거나 되돌아가면, 이게 redirect되면서 order_detail의 페이지로 이동합니다.

 

결제 과정은 IMP.request_pay 자바스크립트 함수를 호출하면, 전적으로 포트원 API를 통해서 처리됩니다.

image

결제가 성공하거나 실패를 하면, 위 IMP.request_pay 함수의 두번째 인자로 지정한 함수가 호출이 되구요. 그 함수의 response 인자를 통해 결제상황을 파악하실 수 있습니다.

location.href = next_url; 부분을 주석처리하시고, response 인자를 console.log(response); 출력하시어 현재의 결제상황을 파악해보시겠어요? 포트원 설정 상의 뭔가 이슈가 있으실 수도 있으실 듯 합니다.

 

현재 구현은 결제 성공/실패 유무에 상관없이, 포트원 결제 과정이 끝나면 order_check 페이지를 통해 서버 단에서 payment 정보를 갱신한 후에, order_detail 페이지로 전환토록 구성되어있습니다.

 

(질문)KG이니시스 팝업차단 문제 발생(강의 13. 자바스크립트만으로 포트원 결제 구현하기, 7분18초)

1

156

2

로그아웃 405 에러

0

171

1

웹훅 사용과 관련하여 질문 드립니다.

0

242

2

cancel에 대해 질문을 드립니다.

0

146

2

m_redirect_url에 대해 문의 드립니다.

0

150

1

cancle에 대해 문의 드립니다.

0

294

3

db_constraint=False 에 대해 질문 드립니다.

0

168

2

pip 설치시 에러가 발생합니다.

0

499

2

주문 로직

0

367

3

결제 기능을 비동기적으로 처리할 필요는 없나요..?

0

407

3

배포환경과 개발환경 패키지 관리, 도커환경 디버깅 팁이 있을까요?

0

287

4

8강 주문 모델 설계에서 따로 ManyToMany 관계를 위한 모델을 선언해준 이유?

0

136

2

product model에서 category는 FK로 주셨는데, status는 왜 chocies로 주신 이유?

0

94

2

선생님 from iamport import Iamport 에서 에러가 생깁니다.

0

152

2

db_index=True로 설정하는 이유

0

140

2

안녕하세요 파이참 폼링크 제출했습니다

0

106

1

포트원 UI가 바뀌면서 포트원 404에러가 발생합니다.

0

590

5

djlint 편집시 무한 동작

0

129

1

결제 실패

0

229

1

환불을 구현 하려면 어떤식으로 해야 되나여?

0

498

1

next js 에서 결제 구현할때 에러 발생하는데 디버깅 팁 주실수 있나요?

0

311

1

사용자가 진행을 중단하였습니다.

0

342

3

결제창 출력이 되지 않습니다.

0

857

2

포트원 결제 payment_detail 이전 과정 문제

0

490

4