결제 중간 이탈
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,
)# 주문 생성
@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
}
)
Answer 2
0
안녕하세요.
말씀하신 아래의 "결제를 하다가 중간에 나오거나 되돌아가면" 상황은 어떤 상황이실까요?
결제를 하다가 중간에 나오거나 되돌아가면, 이게 redirect되면서 order_detail의 페이지로 이동합니다.
결제 과정은 IMP.request_pay 자바스크립트 함수를 호출하면, 전적으로 포트원 API를 통해서 처리됩니다.

결제가 성공하거나 실패를 하면, 위 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
105
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
856
2
포트원 결제 payment_detail 이전 과정 문제
0
490
4

