[ 작업 환경 ]
Centos 7.8
Python 3.6
Flask 1.1
부트페이 활용 신청을 정상적으로 완료하여 승인이 된 후에 아래 작업을 진행해주셔야합니다.
1. 결제 검증 요청시 필요한 인증키와 어플리케이션 ID 확인하기
https://admin.bootpay.co.kr/install/key
2. 접근 허용 IP 관리 설정하기
권장대로 저는 사용하는 서버의 IP만을 허용하기로 했습니다.
이후 서버 IP가 변경되면 아래 설정 또한 함께 변경해줘야하니 추후 주의가 필요하겠습니다.
3. 어플리케이션 ID & Private Key & 허용된 IP에서의 요청 정상인지 확인
curl -H "Content-Type: application/json" \
-d '{"application_id": "[ REST용 Application ID ]", "private_key": "[ Project의 Private Key ( 보안 문제상 예제에 표기하지 않습니다. 부트페이 관리자에서 확인해주세요. ) ]"}' \
-X POST https://api.bootpay.co.kr/request/token
정상인 경우, status 200 으로 올바른 데이터가 return됩니다.
어플리케이션 ID가 틀렸거나 Private Key가 틀렸거나 허용되지 않은 IP에서의 요청이 들어올 경우 status 401 로 올바르지 않은 접근이라는 내용으로 return됩니다.
4. 정상 요청 여부 확인을 위한 access token 수령 및 결제 정보 확인하기 소스 예시
from bootpay_master.lib.BootpayApi import BootpayApi
bootpay = BootpayApi(
'[[ application_id ]]',
'[[ private_key ]]'
)
result = bootpay.get_access_token()
if result['status'] is 200:
verify_result = bootpay.verify('[[ receipt_id ]]')
if verify_result['status'] is 200:
# 원래 주문했던 금액이 일치하는가?
# 그리고 결제 상태가 완료 상태인가?
if verify_result['data']['status'] is 1 and verify_result['data']['price'] is price:
# TODO: 이곳이 상품 지급 혹은 결제 완료 처리를 하는 로직으로 사용하면 됩니다.
에러 발생시 아래 페이지를 참조하여 해결할 수 있습니다.
https://growingsaja.tistory.com/513
5. verify_result 예시
{
"status": 200,
"code": 0,
"message": "",
"data": {
"receipt_id": "5df6e67d4f74b4002a77e0eb",
"order_id": "1576461949",
"name": "테스트결제",
"price": 3000,
"tax_free": 1500,
"remain_price": 3000,
"remain_tax_free": 1500,
"cancelled_price": 0,
"cancelled_tax_free": 0,
"receipt_url": "https://app.bootpay.co.kr/bill/ZVN3cXdRNTlEbTYzVi8xNmIyWCtFS0VrcWJncXkweFBoT200WXRPQkgzVC9u%0AZz09LS1KNU1MRW5JdGNMa3RMZDRLLS1lWkhFaTFkMmVnVkR0SmRTMUxUNXdR%0APT0=%0A",
"unit": "krw",
"pg": "payapp",
"method": "card_rebill_rest",
"pg_name": "페이앱",
"method_name": "카드정기결제(REST)",
"payment_data": {
"card_name": "하나",
"card_no": "94308100****4569",
"card_quota": "00",
"card_auth_no": "09286221",
"receipt_id": "5df6e67d4f74b4002a77e0eb",
"n": "테스트결제",
"p": 3000,
"tid": "48585753",
"pg": "페이앱",
"pm": "카드정기결제(REST)",
"pg_a": "payapp",
"pm_a": "card_rebill_rest",
"o_id": "1576461949",
"p_at": "2019-12-16 11:05:50",
"s": 1,
"g": 2
},
"requested_at": "2019-12-16 11:05:50",
"purchased_at": "2019-12-16 11:05:50",
"status": 1,
"status_en": "complete",
"status_ko": "결제완료"
}
}
참고 부트페이 링크 : https://docs.bootpay.co.kr/rest/verify
6. 결제 정보 저장 DB 테이블 구조 예시
- idx
자사에서 구분하는 고유 id
- regdate
해당 데이터 insert 일시
- last_change
해당 데이터 최근 수정 일시
이외 나머지 컬럼들은 모두 부트페이 API 에서 제공해주는 데이터들입니다.
CREATE TABLE IF NOT EXISTS `bootpay_history` (
`idx` int(11) NOT NULL AUTO_INCREMENT,
`receipt_id` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`order_id` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`price` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`tax_free` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`remain_tax_free` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`remain_price` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`cancelled_price` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`cancelled_tax_free` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`receipt_url` text COLLATE utf8_unicode_ci,
`unit` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`pg` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`method` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`pg_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`method_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`card_name` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`card_no` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`card_quota` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`card_auth_no` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`requested_at` timestamp NULL DEFAULT NULL,
`purchased_at` timestamp NULL DEFAULT NULL,
`revoked_at` timestamp NULL DEFAULT NULL,
`status` varchar(50) COLLATE utf8_unicode_ci DEFAULT NULL,
`regdate` timestamp NULL DEFAULT NULL,
`last_change` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`idx`),
KEY `regdate` (`regdate`),
KEY `status` (`status`),
KEY `receipt_id` (`receipt_id`),
KEY `order_id` (`order_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;