๐ An I'mport REST API client for Human
iamporter-python ๋ ์์ํฌํธ์์ ์ ๊ณตํ๋ REST API๋ฅผ ์ฝ๊ฒ ํ์ฉํ๊ธฐ ์ํด ์์ฑ๋ Python ํด๋ผ์ด์ธํธ์ ๋๋ค.
- ์ค์ ํ๋ก๋์ ์๋น์ค์ ์ ์ฉํ๊ธฐ ์ํด ๊ฐ๋ฐ๋ ํ๋ก์ ํธ์ ๋๋ค.
- Wrappingํ ๋ฉ์๋๊ฐ ๊ตฌํ๋์ง ์์ ๊ฒฝ์ฐ๋ผ๋ ์ฝ๊ฒ ์์ํฌํธ API๋ฅผ ์์ฒญํ ์ ์์ต๋๋ค.
- Docstring์ด ์์ฑ๋์ด ์์ด PyCharm๊ณผ ๊ฐ์ IDE์์ ์๋์์ฑ์ ์ฌ์ฉํ ๋ ๋์ฑ ํธ๋ฆฌํฉ๋๋ค.
- ์ด์ฉ ์ค ๋ฐ์ํ ๋ฌธ์ ์ ๋ํ์ฌ ์ฑ
์์ ์ง์ง ์์ต๋๋ค. ๋จ, Issue์
help-wanted
๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋์์ ๋๋ฆฌ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ฒ ์ต๋๋ค. - Python 2๋ฅผ ์ง์ํ์ง ์์ต๋๋ค.
pip install iamporter
- Succeed: API ์๋ต์ด OK์ธ ๊ฒฝ์ฐ Response Body ์ response ํ๋๋ฅผ
dict
ํ์ ์ผ๋ก ๋ฐํํฉ๋๋ค. - Failed: HTTP ์๋ต ์ฝ๋๊ฐ 403์ธ ๊ฒฝ์ฐ
ImpUnAuthorized
, ์ด์ธ์ ๊ฒฝ์ฐImpApiError
Exception์ ๋ฐ์์ํต๋๋ค.
- API ๊ฒฐ๊ณผ์ ๊ด๊ณ์์ด
IamportResponse
์ธ์คํด์ค๋ฅผ ๋ฐํํฉ๋๋ค.
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': "[email protected]",
'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': "[email protected]",
'addr': "์ฌ๋ ๊ณณ ์ฃผ์",
'postcode': "00000",
},
)
client.create_payment(
merchant_uid="your_merchant_uid",
customer_uid="your_customer_uid",
name="์ฃผ๋ฌธ๋ช
",
amount=10000,
)
๋น์ธ์ฆ ํด์ธ์นด๋ ๊ฒฐ์ ์ญ์
.create_payment
๋ฉ์๋๋ฅผ ์ฌ์ฉํด์ฃผ์๋ฉด ๋ฉ๋๋ค.
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-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 |
from iamporter.api import Payments
api_instance = Payments(auth)
response = api_instance.get("your_imp_uid")
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)
๋ณธ ํ๋ก์ ํธ๋ ์ด๋ ํ ํํ์ ๊ธฐ์ฌ๋ผ๋ ํ์ํฉ๋๋ค. Issue๋ PR๋ฅผ ์ฌ๋ ค์ฃผ์๋ฉด ๋น ๋ฅธ ์๊ฐ ์์ ํ์ธํ๊ฒ ์ต๋๋ค. ๊ธฐํ ๋ฌธ์๋ [email protected] ์ผ๋ก ๋ถํ๋๋ฆฝ๋๋ค.