토스 페이먼츠 트러블 슈팅

꽃봉우리·2024년 12월 21일

사실 트러블 슈팅이라고 하기엔 좀 어이없는? 트러블 슈팅이였지만 적어봅니다..

토스페이먼츠 오류

시뮬레이터로 결제 테스트를 하던 와중에 갑자기 결제가 제대로 되지 않은 문제가 발생했다. 분명히 잘 작동하던 로직들이였는데 무슨 문제인가 싶었고 로그를 찍어둔게 있어서 확인해봤다.

"data": {
    "message": "주문 수정 중 오류가 발생했습니다: fromisoformat: argument must be str",
    "strror"
}

결제완료 시점에 문제가 발생했는데 시간 포멧이 잘못된거 같았다... (뭐가 문제지..?) 에러 확인하고 좀 찾아봤는데 시간을 넣을 때 none으로 들어와서 로그를 다시 찍어봤더니 좀 황당했다..

{
  "mId": "~~~~~~~",
  "status": "WAITING_FOR_DEPOSIT", 
  "method": "가상계좌",
  "virtualAccount": {
    "accountNumber": "~~~~~~~~",
    "dueDate": "2024-12-28T22:17:45+09:00",
    "expired": false
  }
}

로그를 찍었을 때 토스쪽에서 받는 response를 보니까 status에서 문제를 알 수 있었다. 그 전에는 다른 결제 방식으로 결제를 했지만 가상 계좌로 결제를 하면 status처럼 결제 대기 상태를 받아오고 있지만 그 전에 코드에서는

request.payment_status = PaymentStatus.PAYMENT_COMPLETED
    request.order_status = OrderStatus.ORDER_COMPLETED
    request.approved_at = _convert_to_kst(response['approvedAt'])

이런 식으로 결제가 완료되면 approved_at을 한국 시간으로 변경을 하고 있었지만, 가상 계좌는 결제 대기중이라 approved_at이 None으로 받아오고 있어서 난 에러였다.

찾아보니 토스에서 주는 status가 꽤 세분화되어 있었다

토스페이먼츠 주요 상태값
READY: 결제 생성
PENDING: 결제 진행 중
WAITING_FOR_DEPOSIT: 가상계좌 입금 대기
SUCCESS: 결제 완료
EXPIRED: 가상계좌 입금 기한 만료
CANCELED: 결제 취소
PARTIAL_CANCELED: 부분 취소
ABORTED: 결제 중단
FAILED: 결제 실패

WAITING_FOR_DEPOSIT: 가상계좌 입금 대기 이것때문에 오류가 난거라니 다행히 에러처리를 진작에 해서 좀 다행이긴하다.

위 코드를 가상계좌 결제인 상태일 때도 처리하기 위해서 조금 바꿨다.

# approvedAt이 None인 경우 처리 추가
    if response.get('approvedAt') is None:
        current_time = datetime.now().isoformat()
        request.approved_at = _convert_to_kst(current_time)
    else:
        request.approved_at = _convert_to_kst(response['approvedAt'])

이렇게 none일때랑 정상적으로 들어올 때 처리를 하면 해결완료!

0개의 댓글