카카오 페이

모바일에서 실행하는 법

  • 핸드폰이랑 pc랑 같은 와이파이로 접속하고 pc ipv4주소를 백엔드 기본폴더에
    있는 .config_secret폴더 development.json파일 allowed_hosts 항목에 추가

  • 카카오 개발자에서 웹 플랫폼 사이트 도메인에 ip 추가

  • kakao.py 에서 fail,cancel,approval url주소도 pc ip주소로 변경

  • 런서버 할 때 python manage.py runserve 000.000.000.000:8000 처럼
    pc ip주소 뒤에 붙여서 런서버하면 핸드폰으로 들어가짐

주문하기

로그인한 상태로만 주문 가능, rest-auth/kakao/ url에서 카카오 로그인하거나
python manage.py createsuperuser로 admin 유저 만들어서 로그인

order객체 형식

{
    "user": null,
    "created_at": null,
    "price": null,
    "order": "",
    "tid": "",
    "is_paid":""
}

사용자가 주문 버튼 눌렀을 때 장바구니에 있는 제품들 또는 바로 결제할 제품

  • user
    주문한 username , request.user로 자동으로 할당하는게 좋을듯 지금은 수동으로 username 넣어줘야됨
  • created_at
    주문 시간. 자동으로 들어가서 보내줄 필요 없음
  • price
    총 가격. 한번에 결제될 제품들 총 가격
  • order
    string형식으로 주어져야됨 '제품id,제품수량; 다른제품id,제품수량'
    한 제품은 제품id와 제품 수량이 콤마로 구분, 여러 제품이 한 번에 주문될 경우
    세미콜론으로 구분 (배열 아니고 스트링임)
  • tid
    넣어줄 필요 없음, default =NULL, 카카오페이 결제 시 자동으로 할당되는 값. 결제 승인에 쓰임
  • is_paid
    만들어진 주문에 대해서 결제된 주문은 is_paid = true로 db에 남음, 결제를 기다리고 있는 주문은 is_paid=false로 카카오 페이 결제시 username과 같이 구분자로 사용됨

-> 프론트가 보내줘야 되는 필드는 user, price, order

주문 흐름

  • 프론트에서 오더 객체를 생성한 뒤 로그인된 상태로 /pay url로 접근

  • db에서 주문자에 해당하는 미결제된 order를 찾아서 카카오 api서버에 결제 요청
    -> 즉, 프론트에서는 주문이 들어왔을 때 /order url에 주문 정보를 이용해 post를 하고 /pay url에 진입하면됨!

  • 주문자가 결제 후 결제 완료를 누르면 카카오 api서버에 결제 승인 요청

  • 카카오 api서버는 결제 승인까지 완료 후

    {"aid": "A2646191710115764877", 
    "tid": "T2646191688640143932", 
    "cid": "TC0ONETIME", 
    "partner_order_id": "partner_order_id", 
    "partner_user_id": "partner_user_id", 
    "payment_method_type": "MONEY", 
    "item_name": "\uc544\uba54\ub9ac\uce74\ub178", 
    "quantity": 1, 
    "amount": {"total": 3500, "tax_free": 0, "vat": 350, "point": 0, "discount": 0}, "created_at": "2019-07-10T22:55:15", 
    "approved_at": "2019-07-10T22:55:24"}

    aid Request 고유 번호 String
    tid 결제 고유 번호 String
    cid 가맹점 코드 String
    sid subscription id. 정기(배치)결제 CID로 결제요청한 경우 발급 String
    partner_order_id 가맹점 주문번호 String
    partner_user_id 가맹점 회원 id String
    payment_method_type 결제 수단. CARD, MONEY 중 하나 String
    amount 결제 금액 정보 JSON Object
    card_info 결제 상세 정보(결제수단이 카드일 경우만 포함) JSON Object
    item_name 상품 이름. 최대 100자 String
    item_code 상품 코드. 최대 100자 String
    quantity 상품 수량 Integer
    created_at 결제 준비 요청 시각 Datetime
    approved_at 결제 승인 시각 Datetime

  • 위에 리스폰스된 데이터는 이용하는 부분 없고 그냥 버리는데 생각해보니까 저거 바탕으로 주문 내역 담는 모델 만들어 두면 좋을듯!

더해야 될 것

  • 오더 객체 생성, 결제 완료 후 매장 페이지에 띄워 줘야됨 (crated_at, order)
  • 매장에서 음료 완성되면 완료 선택 후 다시 없앰

-> 백에서 모델을 더 만들거나 프론트에서만 처리하는 방법도 있을듯