비인증 결제

JungHoon Han·2023년 2월 22일
0

내일배움캠프

목록 보기
75/78
post-thumbnail

다음주에 시작하는 최종프로젝트를 앞두고, 팀원은 아직 정해지지 않았지만 우선 프로젝트 기획을 하고있다. 나는 최종프로젝트에 구독형 서비스를 하고싶다는 생각이 있었기 때문에 구독 서비스에 포커스를 맞추고 어떻게 결제를 진행해야 하는지 찾아보고 있다.
우선, 비인증 결제를 진행해야 하는데 비인증 결제는 보안상의 이슈가 발생 할 확률이 높아 PG사 가입 시 입점심사가 까다롭다고 한다는 점을 참고하면 좋을 것 같다.
비인증 결제는 크게 2가지로 나뉘는데
1. 빌링키 결제 : 최초 등록된 결제정보로 '반복적'인 결제가 이루어지는 방식
2. 키인 결제 : 구매자 인증 없이 카드번호 입력만으로 결제되는 방식(일회성 결제)

내가 사용해야 할 건 빌링키 결제이고, 빌링키 결제를 진행 하더라도 스케줄링을 어떻게 진행할건지 찾아보았다.
아임포트가 자료가 가장 많이나오는거같아 아임포트 기준으로 찾아보았는데, 로직을 간단하게 정리하면
1. 사용자가 구독할 상품을 결제
2. 결제가 성공하면 다음 결제일 생성

let today = new Date(); // 결제가 성공한 시간
let schedule_at_time = new Date(
  today.getFullYear(), 
  today.getMonth() + 1, 
  today.getDate()); 
// 다음 결제일 생성(지금부터 1달 뒤)
  1. axios, ajax 등으로 DB에 다음 결제정보 전송
axios({
    url: \`https://api.iamport.kr/subscribe/payments/schedule\`,
    method: "post",
    headers: { "Authorization": access_token }, 
    data: {
      customer_uid: "gildong_0001_1234", // 카드(빌링키)와 1:1로 대응하는 값
      schedules: [
        {
          merchant_uid: "order_monthly_0001", // 주문 번호
          schedule_at: 1519862400, // 결제 시도 시각 in Unix Time Stamp. 예: 다음 달 1일
          amount: 8900,
          name: "월간 이용권 정기결제",
          buyer_name: "홍길동",
          buyer_tel: "01012345678",
          buyer_email: "gildong@gmail.com"
        }
      ]
    }
  });
  1. 예약한 시간에 결제 결과 수신
  2. 만약 잔액부족 등 으로 결제 실패 시 로그인 정보를 수정하여 서비스 이용 불가능하게 변경하고, 다음로직 설정(다음날 다시 시도 하거나, 아예 끝 내거나 등 기획 필요)
  3. 구독 해지 로직 필요

대략 이정도 인 것 같다.
토스페이먼츠도 개발자를 위한 설명이 잘 나와있는데 좀 더 찾아보고 선택하여 사용하는게 좋을것같다.

빌링키를 이용한 정기결제 참고
정기결제 로직 참고
아임포트 정기결제 참고

profile
Node.js 주니어 개발자

0개의 댓글