Skip to content

๐Ÿš€ An I'mport REST API Client for Human

License

Notifications You must be signed in to change notification settings

kde713/iamporter-python

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

27 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

iamporter-python

๐Ÿš€ An I'mport REST API client for Human

CircleCI Maintainability CodeCov PyPI Version License

iamporter-python ๋Š” ์•„์ž„ํฌํŠธ์—์„œ ์ œ๊ณตํ•˜๋Š” REST API๋ฅผ ์‰ฝ๊ฒŒ ํ™œ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑ๋œ Python ํด๋ผ์ด์–ธํŠธ์ž…๋‹ˆ๋‹ค.


Why iamporter-python?

  • ์‹ค์ œ ํ”„๋กœ๋•์…˜ ์„œ๋น„์Šค์— ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐœ๋ฐœ๋œ ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.
  • Wrappingํ•œ ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ๋ผ๋„ ์‰ฝ๊ฒŒ ์•„์ž„ํฌํŠธ API๋ฅผ ์š”์ฒญํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Docstring์ด ์ž‘์„ฑ๋˜์–ด ์žˆ์–ด PyCharm๊ณผ ๊ฐ™์€ IDE์—์„œ ์ž๋™์™„์„ฑ์„ ์‚ฌ์šฉํ•  ๋•Œ ๋”์šฑ ํŽธ๋ฆฌํ•ฉ๋‹ˆ๋‹ค.

Disclaimer

  • ์ด์šฉ ์ค‘ ๋ฐœ์ƒํ•œ ๋ฌธ์ œ์— ๋Œ€ํ•˜์—ฌ ์ฑ…์ž„์„ ์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ, Issue์— help-wanted ๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋„์›€์„ ๋“œ๋ฆฌ๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • Python 2๋ฅผ ์ง€์›ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

Installation

pip install iamporter

Specification

iamporter.Iamporter
  • Succeed: API ์‘๋‹ต์ด OK์ธ ๊ฒฝ์šฐ Response Body ์˜ response ํ•„๋“œ๋ฅผ dict ํƒ€์ž…์œผ๋กœ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
  • Failed: HTTP ์‘๋‹ต ์ฝ”๋“œ๊ฐ€ 403์ธ ๊ฒฝ์šฐ ImpUnAuthorized, ์ด์™ธ์˜ ๊ฒฝ์šฐ ImpApiError Exception์„ ๋ฐœ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
iamporter.api
  • API ๊ฒฐ๊ณผ์™€ ๊ด€๊ณ„์—†์ด IamportResponse ์ธ์Šคํ„ด์Šค๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

Usage (General Way)

REST API๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ํŽธํ•˜๊ฒŒ Wrappingํ•œ Iamporter ๊ฐ์ฒด๋ฅผ ํ†ตํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ™œ์šฉํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ค€๋น„

์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. imp_auth ์ธ์ž์— IamportAuth ์ธ์Šคํ„ด์Šค๋ฅผ ์ „๋‹ฌํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. (ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด imp_url ์ธ์ž์— ๋ณ„๋„๋กœ ๊ตฌ์ถ•ํ•œ ๋ชฉ์—… ์„œ๋ฒ„ url์„ ๋„˜๊ฒจ ์ดˆ๊ธฐํ™”ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€ https://api.iamport.kr/ ์ž…๋‹ˆ๋‹ค.)

from iamporter import Iamporter

client = Iamporter(imp_key="YOUR_IAMPORT_REST_API_KEY", imp_secret="YOUR_IAMPORT_REST_API_SECRET")

์˜ˆ์™ธ ์ฒ˜๋ฆฌ

  • ํ•„์ˆ˜๊ฐ’์ด ๋ˆ„๋ฝ๋œ ๊ฒฝ์šฐ KeyError ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋ผ์ด์–ธํŠธ ๊ฐ์ฒด ์ดˆ๊ธฐํ™” ์‹œ ์ธ์ฆ์ •๋ณด๊ฐ€ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ ๊ฒฝ์šฐ๋‚˜ API ์‘๋‹ต HTTP Status Code๊ฐ€ 403 ์ธ ๊ฒฝ์šฐ iamporter.errors.ImpUnAuthorized ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ์ด์™ธ์— API ์‘๋‹ต์ด OK๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ iamporter.errors.ImpApiError ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
    • .response ํ•„๋“œ์— API ์‘๋‹ต์ด IamportResponse ํƒ€์ž…์œผ๋กœ ๋‹ด๊ฒจ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ์ œ ๋‚ด์—ญ ์กฐํšŒ

์•„์ž„ํฌํŠธ ๊ณ ์œ ๋ฒˆํ˜ธ (imp_uid)๋‚˜ ๊ฐ€๋งน์ ์ง€์ • ๊ณ ์œ ๋ฒˆํ˜ธ (merchant_uid)๋ฅผ ์ด์šฉํ•ด ๊ฒฐ์ œ ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

client.find_payment(imp_uid="your_imp_uid")
client.find_payment(merchant_uid="your_merchant_uid")

๊ฒฐ์ œ ์ทจ์†Œ

๊ฒฐ์ œ๋ฅผ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค. ์ทจ์†Œ ์‚ฌ์œ (reason), ์ทจ์†Œ ์š”์ฒญ ๊ธˆ์•ก(amount), ์ทจ์†Œ ์š”์ฒญ ๊ธˆ์•ก ์ค‘ ๋ฉด์„ธ๊ธˆ์•ก(tax_free) ๊ฐ’์„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

client.cancel_payment(imp_uid="your_imp_uid")
client.cancel_payment(merchant_uid="your_merchant_uid", amount=10000, tax_free=5000)

๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰

์ •๊ธฐ ๊ฒฐ์ œ ๋“ฑ์— ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋นŒ๋งํ‚ค๋ฅผ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. PG์‚ฌ ์ฝ”๋“œ(pg), ์นด๋“œ์†Œ์œ ์ž ์ •๋ณด(customer_info)๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

client.create_billkey(
    customer_uid="your_customer_uid",
    card_number="1234-1234-1234-1234",
    expiry="2022-06",
    birth="960712",
    pwd_2digit="12",
    customer_info={
        'name': "์†Œ์œ ์ž ์ด๋ฆ„",
        'tel': "01000000000",
        'email': "someone@example.com",
        'addr': "์‚ฌ๋Š” ๊ณณ ์ฃผ์†Œ",
        'postcode': "00000",    
    },
)

๋นŒ๋งํ‚ค ์กฐํšŒ

๋นŒ๋งํ‚ค ๋“ฑ๋ก ์ •๋ณด๋ฅผ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

client.find_billkey(customer_uid="your_customer_uid")

๋นŒ๋งํ‚ค ์‚ญ์ œ

๋นŒ๋งํ‚ค ๋“ฑ๋ก์ •๋ณด๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค.

client.delete_billkey(customer_uid="your_customer_uid")

๋น„์ธ์ฆ ๊ฒฐ์ œ ์š”์ฒญ

๊ตฌ๋งค์ž๋กœ ๋ถ€ํ„ฐ ๋ณ„๋„์˜ ์ธ์ฆ๊ณผ์ •์„ ๊ฑฐ์น˜์ง€ ์•Š๊ณ  ์‹ ์šฉ์นด๋“œ ์ •๋ณด ๋˜๋Š” ๋นŒ๋งํ‚ค๋ฅผ ์ด์šฉํ•ด ๊ฒฐ์ œ๋ฅผ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์นด๋“œ์ •๋ณด๋ฅผ ์ง€์ •ํ•œ ๊ฒฝ์šฐ customer_uid๋ฅผ ํ•จ๊ผ ์ง€์ •ํ•˜๋ฉด ํ•ด๋‹น ์นด๋“œ ์ •๋ณด๋กœ ๊ฒฐ์ œ ํ›„ ๋นŒ๋งํ‚ค๊ฐ€ ์ €์žฅ๋ฉ๋‹ˆ๋‹ค.

from iamporter import Iamporter
client = Iamporter(imp_key="YOUR_IAMPORT_REST_API_KEY", imp_secret="YOUR_IAMPORT_REST_API_SECRET")
client.create_payment(
    merchant_uid="your_merchant_uid",
    name="์ฃผ๋ฌธ๋ช…",
    amount=10000,
    card_number="1234-1234-1234-1234",
    expiry="2022-06",
    birth="960712",
    pwd_2digit="12",
    buyer_info={
        'name': "๊ตฌ๋งค์ž ์ด๋ฆ„",
        'tel': "01000000000",
        'email': "someone@example.com",
        'addr': "์‚ฌ๋Š” ๊ณณ ์ฃผ์†Œ",
        'postcode': "00000",    
    },
)
client.create_payment(
    merchant_uid="your_merchant_uid",
    customer_uid="your_customer_uid",
    name="์ฃผ๋ฌธ๋ช…",
    amount=10000,
)

๋น„์ธ์ฆ ํ•ด์™ธ์นด๋“œ ๊ฒฐ์ œ ์—ญ์‹œ .create_payment ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Usage (Alternative Way)

Iamporter ๊ฐ์ฒด์— wrapping ๋˜์–ด ์žˆ์ง€ ์•Š์€ API๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์ง์ ‘ API-Level์—์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค.

์ค€๋น„

์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ธ์ฆ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

from iamporter import IamportAuth

auth = IamportAuth(imp_key="YOUR_IAMPORT_REST_API_KEY", imp_secret="YOUR_IAMPORT_REST_API_SECRET")

API Method List

๋ชจ๋“  API-Level Class ๋“ค์€ iamporter.api ์— ์œ„์น˜ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ API ์™€ ๋Œ€์‘๋˜๋Š” Class์™€ method์˜ ์ด๋ฆ„์ด ์ •ํ•ด์ง€๋Š”์ง€์— ๋Œ€ํ•œ ์˜ˆ์ž…๋‹ˆ๋‹ค. (๋ชจ๋“  ๋Œ€์‘ ๋ชฉ๋ก์ด ์•„๋‹™๋‹ˆ๋‹ค.)

API Class Method
GET /payments/{imp_uid}/balance Payments get_balance
GET /payments/{imp_uid} Payments get
GET /payments/find/{merchant_uid}/{payment_status} Payments get_find
GET /payments/findAll/{merchant_uid}/{payment_status} Payments get_findall
POST /subscribe/payments/onetime Subscribe post_payments_onetime
POST /subscribe/payments/again Subscribe post_payments_again
DELETE /subscribe/customers/{customer_uid} Subscribe delete_customers

๋Œ€์‘๋˜๋Š” Method๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ์žˆ๋Š” API ํ˜ธ์ถœ

from iamporter.api import Payments

api_instance = Payments(auth)
response = api_instance.get("your_imp_uid")

๋Œ€์‘๋˜๋Š” Method๊ฐ€ ์—†๋Š” API ํ˜ธ์ถœ

from iamporter.api import Escrows

api_instance = Escrows(auth)
response = api_instance._post('/logis/{imp_uid}'.format(imp_uid="your_imp_uid"), sender="", receiver="", logis="")

์‘๋‹ต ์ฒ˜๋ฆฌ

๋ชจ๋“  API Level์˜ ์‘๋‹ต์€ IamportResponse ์ธ์Šคํ„ด์Šค๋กœ ๋ฐ˜ํ™˜๋ฉ๋‹ˆ๋‹ค.

response.status  # HTTP Status Code
response.code  # API ์‘๋‹ต code ํ•„๋“œ
response.message  # API ์‘๋‹ต message ํ•„๋“œ
response.data  # API ์‘๋‹ต response ํ•„๋“œ
response.is_succeed  # API ๊ฒฐ๊ณผ OK ์—ฌ๋ถ€
response.raw  # API ์‘๋‹ต ์›๋ฌธ (dict)

Contribution

๋ณธ ํ”„๋กœ์ ํŠธ๋Š” ์–ด๋– ํ•œ ํ˜•ํƒœ์˜ ๊ธฐ์—ฌ๋ผ๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. Issue๋‚˜ PR๋ฅผ ์˜ฌ๋ ค์ฃผ์‹œ๋ฉด ๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— ํ™•์ธํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ธฐํƒ€ ๋ฌธ์˜๋Š” kde713@gmail.com ์œผ๋กœ ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.