PortOne 결제

airwalk·2024년 2월 13일
post-thumbnail

PortOne 결제방식

결제

  • 클라이언트가 스크립트를 조작해서 결제를 요청,완료할 수 있기 때문에 아래 단계를 거쳐 결제를 진행해야 함.

    • 클라이언트가 서버한테 상품 결제한다고 알림.

    • 백엔드 상품 사전 등록

      • 상품에 대한 가격정보를 사전에 등록
        axios({
            url: "https://api.iamport.kr/payments/prepare",
            method: "post",
            headers: {
              "Content-Type": "application/json",
              Authorization: `Bearer ${access_token}`,
            },
            data: {
              merchant_uid: "ORD20180131-0000012", // 가맹점 주문번호 (unique key)
              amount: 64900, // 결제 예정금액
            },
          })
      • 사전등록 완료되면 주문번호, 가격 DB 저장 후 merchant_uid 클라이언트에게 전달
    • 클라이언트 결제 진행

      IMP.request_pay(
            {
              pg: "kcp.AO09C",
              pay_method: "card",
              merchant_uid: "ORD20180131-0000012", // 주문번호
              name: "노르웨이 회전 의자",
              amount: 1234, // 숫자 타입
              buyer_email: "gildong@gmail.com",
              buyer_name: "홍ㅂㅈㄷㄹ길동",
              buyer_tel: "010-4242-4242",
              buyer_addr: "서울특별시 강남구 신사동",
              buyer_postcode: "01181",
            },
            function (rsp) {
              console.log(rsp);
            }
          );
      • 사전 등록 정보와 불일치
      • response
- 벡엔드- 클라이언트에서 결제완료건 검증
    - 클라이언트에서 결제완료시 웹 훅으로 `imp_uid` `merchant_uid` 받음.
    - 결제 고유번호(**`imp_uid`**)로  portOne에서 상품의 정보를 획득
    - `merchant_uid` 을 통해 DB 정보 조회
        
        ![](https://velog.velcdn.com/images/airwalk741/post/f810662d-e689-4386-bde6-81c3ad3aac7a/image.png)

        
    - 상품 정보의 가격과 DB에 저장된 상품의 가격 비교
        - 일치 ⇒ DB에 저장
        - 불일치 ⇒ 알림

0개의 댓글