토스 빌링 페이

정훈·2022년 8월 3일
0

개발 공부

목록 보기
1/4
post-thumbnail

토스 페이먼츠

빌링(billing) 서비스 연동 과정

drawing

처음

drawing

토스페이먼츠 페이지에서 테스트 클라이언트 키와 테스트 시크릿 키를 확인합니다!

이제 개발을 시작하면 됩니다.

빌링결제할 카드 정보 저장

<head>
  <title>결제하기</title>
  <script src="https://js.tosspayments.com/v1"></script>
</head>
<body>
  <script>
    var clientKey = 'test_client_key'  //테스트 클라이언트키
    var tossPayments = TossPayments(clientKey)              // 클라이언트 키로 초기화하기
    tossPayments.requestBillingAuth('카드', {               // 결제 수단 파라미터(카드 또는 계좌이체 등록 가능 현재는 카드로 실행)
  // 결제 정보 파라미터
    customerKey: 'xmEpW2OuOQQS_NgBKi6cs',                  //사용자 고유번호
    successUrl: 'http://localhost:8080/success',
    failUrl: 'http://localhost:8080/fail',
  })
  </script>
</body>

위에 html 코드를 통해 토스에서 제공하는 P.G 페이지를 불러옵니다.

import webbrowser
import socket
import http.client
from django.db import connection

webbrowser.open("test.html",1,True)

host = 'localhost'
port=8080

with socket.socket() as s:
    s.bind((host,port))
    s.listen(1)
    ms,kd=s.accept()
    msg = ms.recv(1000)
    ms.close()

msg=str(msg)

customerKeyF = msg.find("customerKey=")
customerKeyL = msg.find("&")
authKeyF = msg.find("authKey=")
authKeyL = msg.find(" ",20)
customerKey = msg[customerKeyF+12:customerKeyL]
authKey = msg[authKeyF+8:authKeyL]

conn = http.client.HTTPSConnection("api.tosspayments.com")

payload = "{\"customerKey\":\""+customerKey+"\"}"

headers = {
    'Authorization': "Basic dGVzdF9za19LbWE2MFJaYmxycTlvUTU1amFacnd6WVdCbjE0Og==",
    'Content-Type': "application/json"
    }

conn.request("POST", "/v1/billing/authorizations/"+authKey, payload, headers)            #url 마지막에 authKey값 추가

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

이런 식으로 파이썬에서 위에 있는 HTML코드를 실행시키고 반환되는 URL을 읽습니다.

파이썬 코드 실행

첫 실행 화면

카드 등록 화면

카드등록 완료


이제 여기서 나온 authKey를 가지고 옵니다.

  • customerKey : 가맹점에서 사용하는 사용자별 고유 ID입니다.
  • authKey : 토스에서 제공하는 빌링키를 얻을 때 사용하는 인증 키입니다.

빌링키(billing key) 발급 받기

이제 빌링키를 발급받을 차례입니다.빌링키 발급 API

import http.client

conn = http.client.HTTPSConnection("api.tosspayments.com")

payload = "{\"customerKey\":\"xmEpW2OuOQQS_NgBKi6cs\"}"

headers = {
    'Authorization': "Basic dGVzdF9za19LbWE2MFJaYmxycTlvUTU1amFacnd6WVdCbjE0Og==",
    'Content-Type': "application/json"
    }

conn.request("POST", "/v1/billing/authorizations/authKey", payload, headers)            #url 마지막에 authKey값 추가

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

위 코드를 실행 시키면

{
  "mId": "tosspayments",
  "customerKey": "xmEpW2OuOQQS_NgBKi6cs",
  "authenticatedAt": "2021-01-01T10:00:00+09:00",
  "method": "카드",
  "billingKey": "빌링키 값",
  "cardCompany": "현대",
  "cardNumber": "433028******0916"
}

위에 json파일을 받을 수 있습니다.
이렇게 얻은 빌링키와 카드 정보를 가지고 카드 결제를 할 수 있습니다.

import http.client

conn = http.client.HTTPSConnection("api.tosspayments.com")

payload = "{\"amount\":5000,\"customerKey\":\"xmEpW2OuOQQS_NgBKi6cs\",\"orderId\":\"mqSI2B5tiWqGCepVwrgx1\",\"cutomerEmail\":\"사용자 이메일\",\"cutomerName\":\"Hun\",\"orderName\":\"subscribe\",\"taxFreeAmount\":0}"

headers = {
    'Authorization': "Basic dGVzdF9za19LbWE2MFJaYmxycTlvUTU1amFacnd6WVdCbjE0Og==",
    'Content-Type': "application/json"
    }

conn.request("POST", "/v1/billing/빌링키 값", payload, headers)

res = conn.getresponse()
data = res.read()

print(data.decode("utf-8"))

위에서 받아온 빌링키값을 conn.request부분에 추가하고
파이썬 코드를 실행 시키게 되면 결제가 이루어집니다.

{
  "mId": "tosspayments",
  "version": "1.3",
  "paymentKey": "5zJ4xY7m0kODnyRpQWGrN2xqGlNvLrKwv1M9ENjbeoPaZdL6",
  "orderId": "-uwgfWwHGHMStSAhXr3NB",
  "orderName": "토스 프라임 구독",
  "currency": "KRW",
  "method": "카드",
  "totalAmount": 4900,
  "balanceAmount": 4900,
  "suppliedAmount": 4455,
  "vat": 455,
  "status": "DONE",
  "requestedAt": "2021-01-01T10:01:30+09:00",
  "approvedAt": "2021-01-01T10:05:40+09:00",
  "useEscrow": false,
  "cultureExpense": false,
  "card": {
    "company": "현대",
    "number": "433012******1234",
    "installmentPlanMonths": 0,
    "isInterestFree": false,
    "approveNo": "00000000",
    "useCardPoint": false,
    "cardType": "신용",
    "ownerType": "개인",
    "acquireStatus": "READY",
    "receiptUrl": "https://merchants.tosspayments.com/web/serve/merchant/test_ck_7DLJOpm5QrlABQAK0W58PNdxbWnY/receipt/5zJ4xY7m0kODnyRpQWGrN2xqGlNvLrKwv1M9ENjbeoPaZdL6"
  },
  "virtualAccount": null,
  "transfer": null,
  "mobilePhone": null,
  "giftCertificate": null,
  "cashReceipt": null,
  "discount": null,
  "cancels": null,
  "secret": null,
  "type": "BILLING",
  "easyPay": null,
  "taxFreeAmount": 0
}

API 호출 결과로 HTTP 상태 코드 200이 돌아오면 결제 승인 성공입니다.

상태 코드와 함께 위와 같은 응답 본문이 함께 돌아옵니다. 카드 결제에 대한 승인 응답이기 때문에 card 필드가 포함 되어 있어야 합니다.

정상 작동 거래 내역

토스페이먼츠 페이지에서 테스트 결제 내역을 확인해 보신다면 아래와 같은 페이지 처럼 결제가 이루어진것을 확인 해볼 수 있습니다.

profile
누군가에게 빛이 되길...

0개의 댓글