|
| 1 | +# 결제 Flow |
| 2 | + |
| 3 | +```mermaid |
| 4 | +sequenceDiagram |
| 5 | + participant 사용자 as 사용자 |
| 6 | + participant 앱카드 as 앱카드 |
| 7 | + participant 원큐 오더 웹 as 원큐 오더 웹 |
| 8 | + participant 원큐 오더 서버 as 원큐 오더 서버 |
| 9 | + participant pg사 as PG |
| 10 | + participant 앱카드 서버 as 앱카드 서버 |
| 11 | + participant 카드사 as 카드사 |
| 12 | + participant 은행 as 은행 |
| 13 | + 사용자 ->> 원큐 오더 웹: 1. "결제하기" 클릭 |
| 14 | + 원큐 오더 웹 ->> 원큐 오더 서버: 2. 주문 생성 요청 |
| 15 | + 원큐 오더 서버 ->> 원큐 오더 서버: 3. orderId 생성 |
| 16 | + 원큐 오더 서버 ->> 원큐 오더 웹: 4. orderId, amount, merchantId 반환 |
| 17 | + 원큐 오더 웹 ->> pg사: 5. 결제 준비 요청 |
| 18 | + pg사 ->> pg사: 6. paymentId 생성 및 저장 |
| 19 | + pg사 ->> 원큐 오더 웹: 7. paymentId 응답 |
| 20 | + 원큐 오더 웹 ->> 사용자: 8. 결제 수단 선택 UI 표시 |
| 21 | + 사용자 ->> 원큐 오더 웹: 9. "우리카드" 선택 |
| 22 | + 원큐 오더 웹 ->> pg사: 10. 결제 수단 선택 요청 |
| 23 | + pg사 ->> pg사: 11. PG UI redirectUrl 생성 |
| 24 | + pg사 ->> 원큐 오더 웹: 12. redirectUrl 응답 |
| 25 | + 원큐 오더 웹 ->> 사용자: 13. PG UI 화면 노출 (WOORI Pay, 앱 없이 결제 버튼 등) |
| 26 | + 사용자 ->> pg사: 14. "WOORI Pay 결제" 클릭 |
| 27 | + pg사 ->> pg사: 15. 결제 방식 선택 이벤트 전달 |
| 28 | + pg사 ->> 앱카드 서버: 16. 결제 인증 API 호출 |
| 29 | + 앱카드 서버 ->> 앱카드 서버: 17. 인증 세션 시작 |
| 30 | + 앱카드 서버 ->> 앱카드 서버: 18. 인증 및 서명에 사용되는 챌린지 생성<br/>challenge="abcde" 생성 |
| 31 | + note right of 앱카드 서버: 캐시에 트랜잭션 ID와 챌린지 저장 |
| 32 | + 앱카드 서버 ->> pg사: 19. 딥 링크 반환 |
| 33 | + pg사 ->> 원큐 오더 서버: 20. 딥 링크 포함 결제 시작 응답 반환 |
| 34 | + 원큐 오더 서버 ->> 원큐 오더 웹: 21. 딥 링크를 원큐 오더 웹에 전달 |
| 35 | + 원큐 오더 웹 ->> 사용자: 22. 사용자에게 "앱카드에서 결제를 진행해주세요" 메시지와 함께 딥 링크 실행 버튼 표시 |
| 36 | + 사용자 ->> 앱카드: 23. 딥 링크를 열어 앱카드 실행 |
| 37 | + 앱카드 ->> 앱카드 서버: 24. 인증 및 서명을 위한 챌린지 요청 |
| 38 | + 앱카드 서버 ->> 앱카드: 25. 챌린지(임의의 문자열) 반환 |
| 39 | + 앱카드 ->> 사용자: 26. 인증을 위한 Face ID 요청 |
| 40 | + 사용자 ->> 앱카드: 27. 얼굴 인식 |
| 41 | + 앱카드 ->> 앱카드: 28. 챌린지 서명<br/>개인키로 signature = "sign(abcde)" 생성 |
| 42 | + 앱카드 ->> 앱카드 서버: 29. 서명 제출 |
| 43 | + 앱카드 서버 ->> 앱카드 서버: 30. 공개 키로 서명 검증 |
| 44 | +
|
| 45 | + alt 서명 성공 |
| 46 | + 앱카드 서버 ->> 앱카드 서버: 31. 상태: AUTHENTICATED |
| 47 | + 앱카드 서버 ->> pg사: 32. 결제 승인 요청 (txnId, cardNumber 등) |
| 48 | +
|
| 49 | + alt 신용카드 |
| 50 | + pg사 ->> 카드사: 33. 승인 요청 |
| 51 | + 카드사 ->> 카드사: 34. 유효성 및 한도 확인 |
| 52 | + alt 승인 성공 |
| 53 | + 카드사 ->> 카드사: 35. 결제 예약 |
| 54 | + 카드사 ->> pg사: 36. 승인 응답 |
| 55 | + else 승인 실패 |
| 56 | + 카드사 ->> pg사: 36. 실패 응답 |
| 57 | + end |
| 58 | + else 체크카드 |
| 59 | + pg사 ->> 카드사: 33. 승인 요청 |
| 60 | + 카드사 ->> 은행: 34. 잔액 확인 및 차감 |
| 61 | + alt 승인 성공 |
| 62 | + 은행 ->> 카드사: 35. 성공 응답 |
| 63 | + 카드사 ->> pg사: 36. 성공 응답 |
| 64 | + else 실패 |
| 65 | + 은행 ->> 카드사: 35. 실패 응답 |
| 66 | + 카드사 ->> pg사: 36. 실패 응답 |
| 67 | + end |
| 68 | + end |
| 69 | +
|
| 70 | + pg사 ->> pg사: 37. 결제 상태 업데이트 |
| 71 | + pg사 ->> 앱카드 서버: 38. 결제 결과 전송 |
| 72 | + 앱카드 서버 ->> 앱카드: 39. 결제 결과 전송 |
| 73 | + 앱카드 ->> 사용자: 40. 결제 완료 화면 표시 및<br/>돌아가서 결제를 완료해주세요 페이지 표시 |
| 74 | + 사용자 ->> 원큐 오더 웹: 41. 원큐 오더 웹으로 돌아감 |
| 75 | + 원큐 오더 웹 ->> 원큐 오더 서버: 42. 주문 결제 검증 요청 |
| 76 | + 원큐 오더 서버 ->> 원큐 오더 서버: 43. 주문 결제 검증 |
| 77 | + 원큐 오더 서버 ->> 원큐 오더 웹: 44. 주문 결제 검증 응답 |
| 78 | + 원큐 오더 웹 ->> 사용자: 45. 최종 주문 완료 |
| 79 | + else 서명 실패 |
| 80 | + 앱카드 서버 ->> 앱카드: 31. 인증 실패 응답 |
| 81 | + 앱카드 ->> 사용자: 32. 인증 실패 화면 표시 |
| 82 | + 앱카드 서버 ->> pg사: 33. 인증 실패 알림 |
| 83 | + pg사 ->> 원큐 오더 서버: 34. 실패 응답 |
| 84 | + 원큐 오더 서버 ->> 원큐 오더 서버: 35. 주문 상태 AUTH_FAILED |
| 85 | + 원큐 오더 서버 ->> 원큐 오더 웹: 36. 실패 응답 |
| 86 | + 원큐 오더 웹 ->> 사용자: 37. 결제 실패 화면 표시 |
| 87 | + end |
| 88 | +
|
| 89 | + note over 카드사, 은행: (신용카드 결제일 기준 자금 청구 발생) |
| 90 | + 카드사 ->> 카드사: 48. 청구 집계 |
| 91 | + 카드사 ->> 은행: 49. 자금 청구 |
| 92 | + 은행 ->> 은행: 50. 계좌 차감 |
| 93 | + 은행 ->> 카드사: 51. 청구 완료 응답 |
| 94 | + 카드사 ->> 카드사: 52. 청구 상태 업데이트 |
| 95 | +``` |
0 commit comments