빌링키

카드번호를 내가 저장하지 않고 매달 자동으로 받는 유일한 방법이에요. 결제사가 손님 카드를 대신 맡고, 가게에는 그 카드를 가리키는 값 하나만 줘요.

쉽게 말하면

단골이 카드를 맡기고 갔다고 생각해 보세요. 그런데 카드 실물은 사장님 금고가 아니라 은행 대여금고에 들어가요. 사장님 손에 남는 건 그 금고를 가리키는 번호표 한 장이에요. 매달 회비를 받을 때는 번호표를 은행에 내밀고 "이 손님 카드에서 9,900원 받아 주세요"라고 부탁해요. 카드번호는 끝까지 사장님 눈에 안 보여요. 이 번호표가 빌링키예요.

그래서 빌링키는 카드가 아니에요. 카드를 가리키는 값이에요. 이 차이가 이 문서의 나머지를 전부 설명해요.

직접 보관하는 방법
우리 장부에 저장 · 카드번호 16자리 · 유효기간 · 뒷면 세 자리

매달 청구는 되지만, 장부가 한 번 새면 손님 카드가 그대로 남의 손에 들어가요. 사고 범위가 가게 밖으로 나가요.

빌링키를 쓰는 방법
우리 장부에 저장 · 빌링키 한 줄 · 카드사 이름 · 뒷 네 자리(표시용)

카드 원본은 결제사가 들고 있어요. 새더라도 남이 그 카드를 다른 가게에서 긁을 수는 없어요.

왜 카드번호를 직접 안 받나

카드 원본을 가게가 들고 있으려면 카드사 수준의 보안 요건을 갖춰야 해요. 작은 가게가 감당할 종류의 일이 아니에요. 그래서 실무는 반대로 굴러가요. 결제사가 카드를 맡고, 가게는 열쇠만 받아요.

보관하는 것가게가 지는 부담새면 벌어지는 일
카드번호 원본카드사 수준의 보안 요건과 점검을 가게가 직접 짊어져요손님 카드가 어디서든 쓰일 수 있어요. 손님 전체에게 알리고 카드 재발급을 부탁해야 해요
빌링키비밀값 하나를 안전하게 두는 일이면 돼요내 상점 이름으로만 청구가 나가요. 결제사에 말해 그 키를 죽이면 그 자리에서 끊겨요
아무것도 저장 안 함부담이 없어요. 대신 매달 손님이 직접 결제해야 해요샐 것이 없어요. 대신 손님이 한 달만 깜빡해도 그 달 매출이 사라져요

빌링키도 비밀값이에요

부담이 줄었을 뿐이지 없어진 게 아니에요. 빌링키는 환경 변수에 두는 비밀값과 같은 급으로 다뤄요. 코드 안에 적어 두거나 엑셀로 주고받는 순간 API 키가 새는 것과 똑같은 사고가 돼요.

빌링키가 생기는 순서

손님이 처음 카드를 등록하는 그 한 번에만 일어나는 일이에요. 다섯 걸음이고, 사장님 서버가 카드번호를 만지는 걸음은 하나도 없어요.

  1. 1손님이 카드 등록 화면을 열어요. 이 화면은 대개 결제사가 띄워요. 내 사이트가 그린 입력칸이 아니라는 점이 핵심이에요.
  2. 2손님이 카드 정보를 결제사에 직접 넣어요. 값은 내 서버를 거치지 않고 결제사로 바로 가요.
  3. 3결제사가 카드가 살아 있는지 확인해요. 결제사에 따라 아주 작은 금액을 승인했다가 바로 취소하는 방식을 쓰기도 해요. 손님 명세서에 잠깐 보였다 사라지는 건 이것이에요.
  4. 4결제사가 빌링키를 내줘요. 글자와 숫자가 섞인 한 줄이에요. 카드번호처럼 생기지 않았어요.
  5. 5내 쪽은 그 한 줄만 저장해요. 손님에게 보여줄 용도로 카드사 이름과 뒷 네 자리 정도를 같이 받아 두면 화면에서 "신한카드 1234"로 표시할 수 있어요.

정기결제는 따로 신청받는 곳이 많아요

일반 결제가 승인됐다고 정기결제까지 되는 게 아니에요. 결제사에 따라 빌링 기능을 별도 항목으로 심사해요. PG 가맹 심사 때 "매달 자동으로 받을 겁니다"를 미리 말해 두세요. 오픈 직전에 알면 일정이 통째로 밀려요.

매달 결제되는 날 벌어지는 일

결제일에는 손님이 아무것도 안 해요. 화면도 안 뜨고 문자로 확인번호를 받지도 않아요. 내 서버가 혼자 결제사에 청구를 넣어요. 이 조용함이 편리함이자 위험이에요.

보낼 때 담는 것왜 필요한가빠지면 생기는 일
빌링키어느 손님 카드에서 받을지 가리켜요청구 자체가 안 나가요. 가장 빨리 드러나는 실수예요
금액이번 달에 받을 값이에요. 요금제를 바꿨으면 여기가 달라져요옛 금액이 그대로 나가서 손님이 명세서를 보고 문의해요
주문번호이번 청구를 가리키는 이름표예요. 같은 번호로 두 번 들어오면 결제사가 걸러 줄 수 있어요재시도할 때마다 새 결제가 만들어져서 한 달에 두 번 빠져나가요
결제 실패 시 할 일잔액 부족과 카드 만료는 다른 사고라 답도 달라요조용히 실패한 채로 한 달이 지나가요. 손님은 해지한 줄 알고 있어요

장면 1 · 구독 손님이 두 달 만에 전화했다

저 계속 쓰고 있었는데, 왜 지난달부터 결제가 안 됐죠?

카드가 재발급되면서 빌링키가 죽었는데 아무도 못 봤을 때 나오는 전화예요. 손님은 결제가 되고 있는 줄 알았고, 사장님은 두 달치 매출을 이미 잃었어요. 여기서 필요한 건 결제 실패를 사람에게 알리는 장치 하나예요. 실패한 손님에게 안내하고 다시 청구하는 방법은 결제 실패 재청구에서 따로 다뤄요.

빌링키가 못 쓰게 되는 순간

빌링키는 영원하지 않아요. 죽는 이유가 정해져 있고, 대부분 사장님 잘못이 아니라 손님 카드 사정이에요. 그래서 미리 알아 두는 것 말고는 막을 방법이 없어요.

언제무슨 일인가사장님이 할 일
카드 유효기간이 지났어요가장 흔한 이유예요. 날짜가 정해져 있어서 미리 셀 수 있는 유일한 경우예요만료 전에 카드 다시 등록해 달라고 안내해요
손님이 카드를 잃어버려 재발급받았어요번호가 바뀌면서 옛 키가 끊겨요. 예고가 없어요실패 알림을 받고 그날 안에 손님에게 연락해요
손님이 카드사에서 자동결제를 막았어요가게가 아니라 카드사 쪽에서 끊긴 상태예요해지 의사인지 물어봐요. 붙잡을 자리는 여기예요
결제사를 다른 곳으로 바꿨어요빌링키는 그 결제사 안에서만 뜻이 있어요. 원칙적으로 들고 갈 수 없어요손님 전원에게 카드 재등록을 받아야 해요. 결제사를 고를 때 가장 무거운 대목이에요
손님이 구독을 그만뒀어요더 쓰면 안 되는 키가 됐어요해지 처리와 함께 키를 지워요. 남겨 두면 실수로 청구될 여지가 남아요

확인해 보세요

지금 쓰는 결제사보다 수수료가 싼 곳을 찾았어요. 옮기기 전에 반드시 계산해야 하는 건?

새면 무슨 일이 생기나

빌링키가 새도 남이 그 카드를 다른 가게에서 긁지는 못해요. 키는 내 상점 안에서만 뜻이 있는 값이니까요. 그래서 사고의 모양이 카드 유출과 달라요.

빌링키가 샜을 때
내 상점 이름으로 손님에게 청구가 나감 · 손님 명세서에 내 가게 이름 · 문의와 이의제기가 나에게 옴

돈은 내 정산으로 들어오지만 그게 더 나쁜 상황이에요. 손님 눈에는 내 가게가 마음대로 긁은 것으로 보여요.

발견했을 때 하는 일
1. 결제사에 키 무효화 요청 2. 잘못 나간 청구 취소 3. 손님에게 먼저 알림 4. 어디서 샜는지 확인

순서가 중요해요. 원인을 찾기 전에 청구부터 멈춰요. 손님에게 먼저 말하면 [[chargeback|차지백]]으로 번지는 걸 줄일 수 있어요.

샌 자리는 대개 정해져 있어요

빌링키가 새는 자리는 결제사가 아니라 내 쪽이에요. 화면 주소에 키를 붙여 보내거나, 관리자 목록에 키를 그대로 뿌리거나, 개발자에게 엑셀로 넘겨준 자리에서 나요. 화면에는 뒷 네 자리만 보여주고 키 자체는 서버 밖으로 안 나가게 해요.

직접 해보기

만들기 전에 이 한 문장을 넣어 보세요

구독 기능을 만들 계획이면 요청에 이 문장을 그대로 붙여 보세요. "카드번호는 우리 쪽에 저장하지 말고 결제사 빌링키만 저장하는 구조로 만들어 주세요. 화면에는 카드사 이름과 뒷 네 자리만 보여 주세요." 나중에 고치면 손님 카드를 다시 받아야 하는 종류의 결정이라, 처음 한 문장이 값이 나가요.

스튜디오에서 적어 보기

자주 묻는 것

Q. 빌링키만 있으면 아무 때나 청구할 수 있나요?
기술로는 가능해요. 그래서 법과 결제사 규정이 그 위를 덮어요. 손님이 동의한 금액과 주기를 벗어난 청구는 분쟁이 되고, 해지한 뒤에 나간 청구는 거의 그대로 환불이에요. 무엇을 언제 받겠다고 약속했는지는 구독(정기결제)에 적혀 있어요.
Q. 손님이 카드를 바꾸면 제가 새 번호를 받아서 고쳐 주면 되나요?
그렇게 하면 안 돼요. 사장님이 카드번호를 받아 적는 순간 이 방식의 이유가 사라져요. 손님이 등록 화면에서 직접 새 카드를 넣게 하고, 새 빌링키로 갈아 끼우세요.
Q. 테스트로 발급받은 빌링키로 실제 결제가 되나요?
안 돼요. 시험용 키와 실제 키는 서로 다른 세상에 있어요. 오픈 전에는 시험용으로 전 과정을 돌려 보고, 문을 연 뒤 실제 키로 첫 청구가 정말 들어오는지 한 건만 눈으로 확인하세요.
Q. 손님 한 명이 카드를 두 장 등록할 수 있나요?
가능해요. 그러면 빌링키도 두 개예요. 그 중 어느 것으로 청구할지 손님이 고르게 하거나 기본 카드를 정해 두어야 해요. 안 정해 두면 한 장이 죽었을 때 어느 쪽으로 재시도할지 아무도 몰라요.
Q. 구독을 해지한 손님의 빌링키는 바로 지워야 하나요?
청구에 쓰는 키는 지우는 쪽이 안전해요. 다만 정산과 분쟁 대응에 필요한 결제 기록 자체는 남겨야 해요. 지우는 것은 청구할 수 있는 열쇠이고, 남기는 것은 지난 거래의 영수증이에요.

더 깊이 (안 읽어도 괜찮아요)

왜 결제사를 옮기면 손님을 다시 받아야 하나 · 빌링키는 결제사가 자기 금고 안의 카드를 가리키려고 만든 값이에요. 다른 결제사에게 그 값을 내밀면 가리키는 대상이 없어요. 결제사끼리 카드 정보를 옮겨 주는 절차가 있는 경우도 있지만, 조건과 서류가 붙고 모든 카드가 넘어가지도 않아요. 그래서 결제사 선택은 수수료만 보고 정할 문제가 아니에요. 구독 손님이 많아질수록 옮기는 값이 같이 비싸져요.

한 달에 두 번 빠져나가는 사고의 구조 · 청구를 보냈는데 답이 늦게 오면 실패로 보여요. 이때 그냥 다시 보내면 결제사 쪽에서는 두 건이 돼요. 앞의 요청이 사실은 성공했기 때문이에요. 막는 방법은 재시도할 때 같은 주문번호를 쓰는 거예요. 결제사는 같은 번호를 두 번 받으면 한 건으로 처리해 줄 수 있어요. 재시도 규칙 전반은 시간 초과와 재시도에 있어요.

결제일을 손님마다 다르게 둘지 한 날로 몰지 · 가입일 기준으로 각자 결제하면 손님은 자연스럽지만, 실패가 매일 조금씩 나서 챙기는 일이 매일 생겨요. 매달 같은 날로 몰면 실패도 그날 몰려서 하루 안에 정리할 수 있는 대신, 그날 결제사 쪽이 붐벼요. 손님 수가 적을 때는 한 날로 몰아 두는 편이 사장님 시간을 아껴요.

이것만 기억하세요

  • ·빌링키는 카드가 아니라 결제사 금고에 있는 카드를 가리키는 번호표예요
  • ·카드번호를 내 쪽에 저장하는 순간 이 방식의 이유가 사라져요. 새 카드도 손님이 직접 넣게 해요
  • ·결제일에 손님은 아무것도 안 해요. 그래서 실패가 조용해요. 실패를 사람에게 알리는 장치가 있어야 해요
  • ·빌링키는 발급한 결제사 안에서만 통해요. 결제사를 옮기면 구독 손님 전원에게 카드를 다시 받아야 해요
  • ·해지하면 키를 지우고, 지난 결제 기록은 남겨요. 지우는 것과 남기는 것이 서로 달라요
VibeCampusNew build