TIL을 날짜 별로 말고 주제별로 정리하는 게 좋을 거 같다.
Version 2

순서
고객이 앱을 통해 결제 요청
클라이언트가 그 내용을 정리해서 토스에 보냄
그럼 토스가 결제창을 띄워서 보여줌
결제창에서 해야 할 일은 결제 수단에 대한 인증을 진행해야 함 ⇒ 아마 이 과정에서 결제 수단에 대한 정보를 프론트엔드에 줘야 할 수도 있겠네(원하는 모양대로)
인증 여부에 따라 분기가 된다.
결제 인증이 성공됐다면 successUrl로 이동한다.
/success?orderId={ORDER_ID}&paymentKey={PAYMENT_KEY}&amount={AMOUNT}
위의 Url로 query 파라미터를 들고 이동한다. 참고로 이건 프론트쪽 Url일 수도 서버쪽일 수도 있는데 위 그림에서는 프론트 쪽 Url이라고 돼있다.
그러면 ORDER_ID, PAYMENT_KEY, AMOUNT를 서버에 저장해주면 된다.

그 이후 프론트가 서버에 저 파라미터로 서버에 요청을 보내면 그걸로 DB(결제)에 저장을 하면 된다.
그 정보로 하여금 백엔드는 토스 API 서버로 승인요청을 보내게 된다.
Go To 6 (결제 승인)
결제 인증이 실패했다면 failUrl로 이동한다.
/fail?code={ERROR_CODE}&message={ERROR_MESSAGE}&orderId={ORDER_ID}서버는 결제 승인 요청을 Toss 서버로 보내줘야 한다.
결제 승인에 대한 Response Body다. 이것도 선별해서 DB(결제 승인)에 저장하면 된다.
결제 취소
https://api.tosspayments.com/v1/payments/{paymentKey}/canceltransactionKey를 가지고 있다.https://api.tosspayments.com/v1/payments/wi6l-EBYXg5AI0ndBCqNH/cancel프론트쪽의 명세를 보려면
https://docs.tosspayments.com/sdk/v2/js
우리가 개발해야 하는 API 통신에 대한 정보를 보려면
https://docs.tosspayments.com/reference
orderId는 프론트쪽에서 만들어서 주는 방법도 괜찮은 거 같고
아니면 우리가 만들어서 주는 것도 괜찮은 거 같다.
결제와 주문 관련 ERD를 수정해야 하므로 어디서부터 사고를 시작하면 될까…
먼저 장바구니는 프론트엔드에서 관리한다.
⇒ 대신 amount 검증 필요
프론트에서 장바구니로 하여금 주문 객체를 만들어줄 것을 요청한다.
그럼 장바구니의 내용을 토대로 주문 객체에 대한 정보를 전달해준다.
orderId: ~,
orderName: "~~~~",
customerEmail: "customer123@gmail.com",
customerName: "김토스",
그럼 해당 정보를 토대로 프론트엔드가 고객에게 결제창을 띄워줄 것이고 그렇게 success url을 거쳐 우리 백엔드는 그 정보로 결제 승인 요청을 하게 된다.
결제 승인에 대한 response body를 저장하면 된다.
결제 취소에 대한 건은 계속 쌓아주는 걸로
https://docs.tosspayments.com/guides/v2/payment-window/integration
다시 정리
이슈 사항
기본적으로 프론트엔드에게 많이 맡기자라는 생각으로 처음부터 생각한 설계입니다.
