real 2transaction - nicepayments/nicepay-manual GitHub Wiki
๊ฐ๋งน์ ์ ์ฅ์์๋ ๊ณ ๊ฐ์ ๊ฒฐ์ ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ ๋จ๊ณ์ ํธ๋์ญ์ ์ ๊ฑฐ์ณ์ผ ํฉ๋๋ค.
์ฒซ์งธ, ๊ณ ๊ฐ์ ๊ฒฐ์ ์๋จ์ด ์ ํจํ์ง ํ์ธํ๋ '์ธ์ฆ' ๋จ๊ณ, ๊ทธ๋ฆฌ๊ณ ๋์งธ, ์ค์ ๊ธ์ก์ ์ด์ฒดํ๋ '์น์ธ' ๋จ๊ณ๋ก ๊ตฌ์ฑ๋ฉ๋๋ค.
์ด ๋ ๋จ๊ณ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ฑฐ์น๋ฉด ๊ณ ๊ฐ์ ๊ฒฐ์ ๊ฐ ์๋ฃ๋๋ฉฐ, ๊ฐ๋งน์ ์ ํ๋งค๋ ์ํ์ ๋ํ ๊ธ์ก์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
์ด๋ฅผ 2 Transaction ๊ฒฐ์ ๋ฐฉ์์ด๋ผ ์ ์ํฉ๋๋ค.
๊ฐ๋งน์ ํ ์คํธ ์์ ์ Server ์น์ธ & basic ์ธ์ฆ์ผ๋ก ๋ฐ๊ธ ๋ฐ์ clientId ๋ฐ secretKey๋ก ์๋ ์ฐ๋์ ์งํํฉ๋๋ค.
๊ฒฐ์ ์ฐฝ JS SDK ์ฝ์
<script src="https://pay.nicepay.co.kr/v1/js/"></script> // (1)
- (1):
https://pay.nicepay.co.kr/v1/js/
- ๊ฐ๋งน์ ์ด ๊ฒฐ์ ์ฐฝ์ ์ผ๊ด๋๊ณ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ ์ํ JS SDK
๊ฒฐ์ ์ฐฝ JS ํธ์ถ ์ฝ๋
<script src="https://pay.nicepay.co.kr/v1/js/"></script>
<script>
function serverAuth() {
AUTHNICE.requestPay({ // (1) ๋์ด์คํ์ด๋จผ์ธ ๊ฒฐ์ ์ฐฝ ํธ์ถ ํจ์
clientId: 'R2_xxx', // (2) ๊ฐ๋งน์ ์ด์ ํ๊ฒฝ 2Transaction(Server ์น์ธ & basic ์ธ์ฆ)
method: 'card', // (3) ๊ณ ๊ฐ ๊ฒฐ์ ์๋จ
orderId: 'your-unique-orderid', // (4) ๊ฐ๋งน์ ๊ณ ์ ์ฃผ๋ฌธ์ ๋ณด
amount: 1004, // (5) ๊ฐ๋งน์ ์ํ ๊ธ์ก
goodsName: '๋์ด์คํ์ด-์ํ', // (6) ๊ฐ๋งน์ ์ํ ๋ช
returnUrl: 'http://localhost:4567/serverAuth' // (7) ๊ฐ๋งน์ ์ธ์ฆ ๊ฒฐ๊ณผ ์๋ต๋ฐ์ URL
});
}
</script>
- (1):
AUTHNICE.requestPay
- ๋์ด์คํ์ด๋จผ์ธ ๊ฒฐ์ ์ฐฝ ํธ์ถ ํจ์
- (2):
clientId: 'R2_xxx'
- ๊ฐ๋งน์ ํ ์คํธ ์์ ์ key ์ ๋ณด์์ ๋ฐ๊ธ ๋ฐ์ clientId
- (3):
method: 'card'
- ๊ณ ๊ฐ์ด ์ ํํ ๊ฒฐ์ ์๋จ
- ์ด์ํ๊ฒฝ์์ ์ ๊ณตํ๋ ์ธ์ฆ ๊ฒฐ์ ์ฐฝ ๊ฒฐ์ ์๋จ
- (4):
orderId: 'your-unique-orderid'
- ๊ฐ๋งน์ ๊ณ ์ ์ฃผ๋ฌธ์ ๋ณด
- ๋์ด์คํ์ด๋จผ์ธ ์์ ๊ฐ๋งน์ ์ด ์์ฒญํ ๊ฒฐ์ ์์ฒญ์ด ์ค๋ณต์ฒ๋ฆฌ๊ฐ ๋์ง ์๋๋ก ๊ฒ์ฆ
- (5):
amount: 1004
- ๊ฒฐ์ ๊ธ์ก
- ๊ฐ๋งน์ ์์ ํ๋งคํ๋ ์ํ ๊ธ์ก
- (6):
returnUrl: 'http://localhost:4567/serverAuth'
- ๊ฐ๋งน์ ์์ ์ธ์ฆ์ ๋ํ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ ๋ฐ์ URL
- 2 Transaction ์ธ์ฆ ์๋ต ๋ช ์ธ์
์ธ์ฆ ์์ฒญ์ ๋ํ F&Q
Q1. [P006]. clientId๊ฐ ์ ํจํ์ง ์์ต๋๋ค.(GID ํ๋ ์คํจ)
์ด์ clientId๋ R1_ or R2_ ์ผ๋ก ์์ํฉ๋๋ค.
์ธ์ฆ ์์ฒญ์ด ์ ์์ ์ธ ์ฒ๋ฆฌ๊ฐ ๋์๋ค๋ฉด ์ธ์ฆ ์์ฒญ์ returnUrl
ํ๋์ ๊ธฐ์
ํ URL๋ก ์ธ์ฆ์ ๋ํ ์๋ต ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ์ ์์ต๋๋ค.
MIME ์ ํ: application/x-www-form-urlencoded
authResultCode: 0000 // (1)
authResultMsg: ์ธ์ฆ ์ฑ๊ณต
tid: {{์ธ์ฆ ์ฑ๊ณต์ ๋ํ TID 30์}} // (2)
clientId: {{R2_xxx server ์น์ธ & basic ์ธ์ฆ}}
orderId: {{๊ฐ๋งน์ ๊ณ ์ ์ฃผ๋ฌธ๋ฒํธ}}
amount: 1004
authToken: {{NICEUNTxxx 40์}}
signature: {{hex(sha256(authToken + clientId + amount + secretKey}} // (3)
- (1):
authResultCode: 0000
- ์ธ์ฆ ๊ฒฐ๊ณผ ์ฝ๋
- ์ฑ๊ณต ์ "0000"์ ๋ฐํํฉ๋๋ค.
- (2):
tid: {{์ธ์ฆ ์ฑ๊ณต์ ๋ํ TID 30์}}
- ์ธ์ฆ ์ฑ๊ณต ์ ์น์ธ ์์ฒญ์ ์ํ ํธ๋์ญ์ ID
- ๊ฑฐ๋ ์์ฒญ ๋ฐ ์ทจ์, ๊ฑฐ๋์กฐํ ๋ฑ์ผ๋ก ์ฌ์ฉ๊ฐ๋ฅํ ID ์ ๋๋ค.
- (3):
signature: {{hex(sha256(authToken + clientId + amount + secretKey}}
- ์๋ต์ ๋ฌด๊ฒฐ์ฑ์ ๊ฒ์ฆํ๊ธฐ ์ํ ์๋ช ๊ฐ
- ์ธ์ฆ ์๋ต์ ๋ํด ๊ฐ๋งน์ ์ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฆ ๊ฐ๋ฅ
์ธ์ฆ ์๋ต ์์ ์์ ๊ฒฐ์ ๊ฐ ๋ฐ์ํ์ง ์์ต๋๋ค.
์๋๋ฐ์ค ํ๊ฒฝ์์๋ ๋ฐ๊ธ๋ TID๋ก ์น์ธ ์์ฒญ ์, ์น์ธ์๋ต ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํฉ๋๋ค.
์ด์ ์๋น์ค ํ๊ฒฝ์์๋ ๋ฐ๊ธ๋ TID๋ก ์น์ธ ์์ฒญ ์, ์นด๋์ฌ์ ์ธ์ฆ๋ ๊ฒฐ์ ๋ฅผ ๊ณ ๊ฐ์๊ฒ ๊ฒฐ์ ๊ธ์ก์ ์ฒญ๊ตฌํ๋๋ก ์์ฒญํ์ฌ ๊ฒฐ์ ๊ฐ ์๋ฃ๋ฉ๋๋ค.
์น์ธ ์์ฒญ curl
curl -request POST
--url 'https://api.nicepay.co.kr/v1/payments/{tid}' \ # (1)
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Basic {base64(clientId:secretKey)}' \ # (2)
--data '{
"amount": 1004 # (3)
}'
- (1):
--url 'https://api.nicepay.co.kr/v1/payments/{tid}'
- ์น์ธ์์ฒญ API ํธ์ถ
- ์ธ์ฆ ์๋ต ๊ฒฐ๊ณผ๋ก ๋ฐ์ TID๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒฐ์ ์์ฒญ
- (2):
--header 'Authorization: Basic {base64(clientId:secretKey)}'
- ์น์ธ ์์ฒญ ์ ํน์ ๊ฐ๋งน์ ์ ์ธ๊ฐ ์ฒ๋ฆฌ
- Server ์น์ธ & basic ์ธ์ฆ์ผ๋ก ๋ฐ๊ธ ๋ฐ์ ํค ์ ๋ณด๋ก base64 ์ธ์ฝ๋ฉ
- (3):
"amount": 1004
- ๊ฒฐ์ ๊ธ์ก
- ์น์ธ ์์ฒญ์ ์ํ ํ์ ๊ฐ
Terminal์์ base64 ์ธ์ฝ๋ฉํ๊ธฐ
echo -n 'clientId:secretKey' | base64
Windows PowerShell์ ์ด์ฉํ ์ธ์ฝ๋ฉ
powershell "[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('clientId:secretKey'))"
์น์ธ ์๋ต์ ๋ํ ์ค๋ช
์น์ธ ์๋ต์ ๊ฒฐ์ ๊ณผ์ ์ค์์ ๊ณ ๊ฐ์ ์นด๋์ฌ์ ์ํด ํน์ ๊ธ์ก์ ๊ฒฐ์ ๊ฐ ํ๊ฐ๋์์์ ๋ํ๋ด๋ ๋ฉ์์ง์ ๋๋ค.
๊ฐ๋งน์ ์ ์ค์๊ฐ์ผ๋ก ์๋ต ๋ฐ์๋ณผ ์๋ ์๊ณ , ๋์์ ๊ฒฐ์ ์๋จ์ ๋ํ ์นํ URL์ ๋ฑ๋กํ์์ ๊ฒฝ์ฐ, ์นํ ์ ํตํด ๊ฒฐ์ ํต๋ณด๋ฅผ ์๋ฒ๋ก ์ ๋ฌ๋ฐ์ ์ ์์ต๋๋ค.
์นํ ์ ํตํด ๊ฒฐ์ ํต๋ณด๋ฅผ ๋ฐ๋ ๊ฒฝ์ฐ, ๋ณ๋์ ์๋ต์ด ํด๋น URL๋ก ์ ์ก๋์ด, ๊ฐ๋งน์ ์ ๊ฒฐ์ ์ฒ๋ฆฌ์ ๋ํ ์ถ๊ฐ์ ์ธ ๊ฒ์ฆ์ ์งํํ ์ ์์ต๋๋ค.
์ด์ํ๊ฒฝ ์น์ธ ์๋ต ๋ฐ์ดํฐ
{
"resultCode": "0000",
"resultMsg": "์ ์ ์ฒ๋ฆฌ๋์์ต๋๋ค.",
"tid": "{{tid}}",
"cancelledTid": null,
"orderId": "{{unique_orderId}",
"ediDate": "2023-08-14T17:07:28.021+0900",
"signature": "{{hex(sha256(tid + amount + ediDate+ SecretKey))}}",
"status": "paid",
"paidAt": "2023-08-14T17:07:27.000+0900",
"failedAt": "0",
"cancelledAt": "0",
"payMethod": "card",
"amount": 1004,
"balanceAmt": 1004,
"goodsName": "์ํ๋ช
",
"mallReserved": null,
"useEscrow": false,
"currency": "KRW",
"channel": "pc",
"approveNo": "000000",
"buyerName": null,
"buyerTel": null,
"buyerEmail": null,
"receiptUrl": "https://npg.nicepay.co.kr/issue/IssueLoader.do?type=0&innerWin=Y&TID={{tid}}",
"mallUserId": null,
"issuedCashReceipt": false,
"coupon": null,
"card": {
"cardCode": "{{์นด๋์ฌ์ฝ๋}}",
"cardName": "{{์นด๋์ฌ}}",
"cardNum": "{{์ ์ฉ์นด๋ ๋ฒํธ}}", // PCI-DSS ์ 6์๋ฆฌ, ๋ค 4์๋ฆฌ ์ธ ๋ง์คํน ์ฒ๋ฆฌ
"cardQuota": 0,
"isInterestFree": false,
"cardType": "credit",
"canPartCancel": true,
"acquCardCode": "{{๋งค์
์ฌ ์ฝ๋}}",
"acquCardName": "{{๋งค์
์ฌ ๋ช
}}"
},
"vbank": null,
"bank": null,
"cellphone": null,
"cancels": null,
"cashReceipts": null,
"messageSource": "nicepay"
}