Skip to content

Latest commit

ย 

History

History
408 lines (367 loc) ยท 14.8 KB

File metadata and controls

408 lines (367 loc) ยท 14.8 KB

Bootpay Server Side Package for Node.js alt text

Bootpay Node.js Server Side Library

๋ถ€ํŠธํŽ˜์ด ๊ณต์‹ Node.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค (์„œ๋ฒ„์‚ฌ์ด๋“œ ์šฉ)

nodeํ™˜๊ฒฝ์—์„œ ์ž‘์„ฑ๋œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜, ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • PG ๊ฒฐ์ œ์ฐฝ ์—ฐ๋™์€ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. (Javascript, Android, iOS, React Native, Flutter ๋“ฑ)
  • ๊ฒฐ์ œ ๊ฒ€์ฆ ๋ฐ ์ทจ์†Œ, ๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰, ๋ณธ์ธ์ธ์ฆ ๋“ฑ์˜ ์ˆ˜ํ–‰์€ ์„œ๋ฒ„์‚ฌ์ด๋“œ์—์„œ ์ง„ํ–‰๋ฉ๋‹ˆ๋‹ค. (Java, PHP, Python, Ruby, Node.js, Go, ASP.NET ๋“ฑ)

๊ธฐ๋Šฅ

  1. (๋ถ€ํŠธํŽ˜์ด ํ†ต์‹ ์„ ์œ„ํ•œ) ํ† ํฐ ๋ฐœ๊ธ‰ ์š”์ฒญ

  2. ๊ฒฐ์ œ ๊ฒ€์ฆ

  3. ๊ฒฐ์ œ ์ทจ์†Œ (์ „์•ก ์ทจ์†Œ / ๋ถ€๋ถ„ ์ทจ์†Œ)

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

    4-1. ๋ฐœ๊ธ‰๋œ ๋นŒ๋งํ‚ค๋กœ ๊ฒฐ์ œ ์Šน์ธ ์š”์ฒญ

    4-2. ๋ฐœ๊ธ‰๋œ ๋นŒ๋งํ‚ค๋กœ ๊ฒฐ์ œ ์Šน์ธ ์˜ˆ์•ฝ ์š”์ฒญ

    4-2-1. ๋ฐœ๊ธ‰๋œ ๋นŒ๋งํ‚ค๋กœ ๊ฒฐ์ œ ์Šน์ธ ์˜ˆ์•ฝ - ์ทจ์†Œ ์š”์ฒญ

    4-3. ๋นŒ๋งํ‚ค ์‚ญ์ œ

  5. (๋ถ€ํŠธํŽ˜์ด ๋‹จ๋…) ์‚ฌ์šฉ์ž ํ† ํฐ ๋ฐœ๊ธ‰

  6. (๋ถ€ํŠธํŽ˜์ด ๋‹จ๋…) ๊ฒฐ์ œ ๋งํฌ ์ƒ์„ฑ

  7. ์„œ๋ฒ„ ์Šน์ธ ์š”์ฒญ

  8. ๋ณธ์ธ ์ธ์ฆ ๊ฒฐ๊ณผ ์กฐํšŒ

npm์œผ๋กœ ์„ค์น˜ํ•˜๊ธฐ

npm install --save bootpay-backend-nodejs

์‚ฌ์šฉํ•˜๊ธฐ

async function getAccessToken() { 
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )    
    try {
        let response = await Bootpay.getAccessToken()
        console.log(response)
    } catch(e) {
        console.log(e)
    }
};

ํ•จ์ˆ˜ ๋‹จ์œ„์˜ ์ƒ˜ํ”Œ ์ฝ”๋“œ๋Š” ์ด๊ณณ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

1. ํ† ํฐ ๋ฐœ๊ธ‰

๋ถ€ํŠธํŽ˜์ด์™€ ์„œ๋ฒ„๊ฐ„ ํ†ต์‹ ์„ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ถ€ํŠธํŽ˜์ด ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ํ† ํฐ์„ ๋ฐœ๊ธ‰๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.
๋ฐœ๊ธ‰๋œ ํ† ํฐ์€ 30๋ถ„๊ฐ„ ์œ ํšจํ•˜๋ฉฐ, ์ตœ์ดˆ ๋ฐœ๊ธ‰์ผ๋กœ๋ถ€ํ„ฐ 30๋ถ„์ด ์ง€๋‚  ๊ฒฝ์šฐ ํ† ํฐ ๋ฐœ๊ธ‰ ํ•จ์ˆ˜๋ฅผ ์žฌํ˜ธ์ถœ ํ•ด์ฃผ์…”์•ผ ํ•ฉ๋‹ˆ๋‹ค.

async function getAccessToken() { 
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )    
    try {
        let response = await Bootpay.getAccessToken()
        console.log(response)
    } catch(e) {
        console.log(e)
    }
}

2. ๊ฒฐ์ œ ๊ฒ€์ฆ

๊ฒฐ์ œ์ฐฝ ๋ฐ ์ •๊ธฐ๊ฒฐ์ œ์—์„œ ์Šน์ธ/์ทจ์†Œ๋œ ๊ฒฐ์ œ๊ฑด์— ๋Œ€ํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ์ œ๊ฑด์ธ์ง€ ์„œ๋ฒ„๊ฐ„ ํ†ต์‹ ์œผ๋กœ ๊ฒฐ์ œ๊ฒ€์ฆ์„ ํ•ฉ๋‹ˆ๋‹ค.

async function verify() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    const token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let result
        try {
            result = await Bootpay.verify('612df0250d681b001de61de6')
        } catch (e) {
            return console.log(e)
        }
        console.log(result)
    }
}

3. ๊ฒฐ์ œ ์ทจ์†Œ (์ „์•ก ์ทจ์†Œ / ๋ถ€๋ถ„ ์ทจ์†Œ)

price๋ฅผ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์ „์•ก์ทจ์†Œ ๋ฉ๋‹ˆ๋‹ค.

  • ํœด๋Œ€ํฐ ๊ฒฐ์ œ์˜ ๊ฒฝ์šฐ ์ด์›”๋  ๊ฒฝ์šฐ ์ดํ†ต์‚ฌ ์ •์ฑ…์ƒ ์ทจ์†Œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค
  • ์ •์‚ฐ๋ฐ›์œผ์‹ค ๊ธˆ์•ก๋ณด๋‹ค ์ทจ์†Œ๊ธˆ์•ก์ด ํด ๊ฒฝ์šฐ PG์‚ฌ ์ •์ฑ…์ƒ ์ทจ์†Œ๋˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ PG์‚ฌ์— ๋ฌธ์˜ํ•˜์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ€์ƒ๊ณ„์ขŒ์˜ ๊ฒฝ์šฐ CMS ํŠน์•ฝ์ด ๋˜์–ด์žˆ์ง€ ์•Š์œผ๋ฉด ์ทจ์†Œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ๊ฒฐ์ œ ํ…Œ์ŠคํŠธ์‹œ์—๋Š” ๊ฐ€์ƒ๊ณ„์ขŒ๋กœ ํ…Œ์ŠคํŠธ ํ•˜์ง€ ์•Š๊ธธ ์ถ”์ฒœํ•ฉ๋‹ˆ๋‹ค.

๋ถ€๋ถ„์ทจ๋Š” ์นด๋“œ๋กœ ๊ฒฐ์ œ๋œ ๊ฑด๋งŒ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ผ๋ถ€ PG์‚ฌ๋งŒ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์š”์ฒญ์‹œ price์— ๊ธˆ์•ก์„ ์ง€์ •ํ•˜์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

  • (์ง€์›๊ฐ€๋Šฅ PG์‚ฌ: ์ด๋‹ˆ์‹œ์Šค, kcp, ๋‹ค๋‚ , ํŽ˜์ด๋ ˆํ„ฐ, ๋‚˜์ด์ŠคํŽ˜์ด, ์นด์นด์˜คํŽ˜์ด, ํŽ˜์ด์ฝ”)

๊ฐ„ํ˜น ๊ฐœ๋ฐœ์‚ฌ์—์„œ ์‹ค์ˆ˜๋กœ ์—ฌ๋Ÿฌ๋ฒˆ ๋ถ€๋ถ„์ทจ์†Œ๋ฅผ ๋ณด๋‚ด์„œ ์—ฌ๋Ÿฌ๋ฒˆ ์ทจ์†Œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์žˆ๊ธฐ๋•Œ๋ฌธ์—, ๋ถ€ํŠธํŽ˜์ด์—์„œ๋Š” ๋ถ€๋ถ„์ทจ์†Œ ์ค‘๋ณต ์š”์ฒญ์„ ๋ง‰๊ธฐ ์œ„ํ•ด cancel_id ๋ผ๋Š” ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค. cancel_id๋ฅผ ์ง€์ •ํ•˜์‹œ๋ฉด, ํ•ด๋‹น ๊ฑด์— ๋Œ€ํ•ด ์ค‘๋ณต ์š”์ฒญ๋ฐฉ์ง€๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

async function cancel() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try { 
            response = await Bootpay.cancel({
                receiptId: '612df0250d681b001de61de6',
                price: 1000,
                name: '์ทจ์†Œ์ž๋ช…',
                reason: '์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค'                
            })
        } catch (e) {
            console.log(e)
            return
        }
        console.log(response)
    }
}

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

REST API ๋ฐฉ์‹์œผ๋กœ ๊ณ ๊ฐ์œผ๋กœ๋ถ€ํ„ฐ ์นด๋“œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•˜์—ฌ, PG์‚ฌ์—๊ฒŒ ๋นŒ๋งํ‚ค๋ฅผ ๋ฐœ๊ธ‰๋ฐ›์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐœ๊ธ‰๋ฐ›์€ ๋นŒ๋งํ‚ค๋ฅผ ์ €์žฅํ•˜๊ณ  ์žˆ๋‹ค๊ฐ€, ์›ํ•˜๋Š” ์‹œ์ , ์›ํ•˜๋Š” ๊ธˆ์•ก์— ๊ฒฐ์ œ ์Šน์ธ ์š”์ฒญํ•˜์—ฌ ์ข€ ๋” ์ž์œ ๋กœ์šด ๊ฒฐ์ œ์‹œ๋‚˜๋ฆฌ์˜ค์— ์ ์šฉ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ๋น„์ธ์ฆ ์ •๊ธฐ๊ฒฐ์ œ(REST API) ๋ฐฉ์‹์„ ์ง€์›ํ•˜๋Š” PG์‚ฌ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
async function getBillingKey() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try { 
            response = await Bootpay.requestSubscribeBillingKey({
                orderId: (new Date()).getTime(),
                pg: 'nicepay',
                itemName: '์ •๊ธฐ๊ฒฐ์ œ 30์ผ๊ถŒ',
                cardNo: '[ ์นด๋“œ ๋ฒˆํ˜ธ ]',
                cardPw: '[ ์นด๋“œ ๋น„๋ฐ€๋ฒˆํ˜ธ ์•ž 2์ž๋ฆฌ ]',
                expireYear: '[ ์นด๋“œ ๋งŒ๋ฃŒ ์—ฐ๋„ ]',
                expireMonth: '[ ์นด๋“œ ๋งŒ๋ฃŒ ์›” ]',
                identifyNumber: '[ ์นด๋“œ ์†Œ์œ ์ฃผ ์ƒ๋…„์›”์ผ ํ˜น์€ ๋ฒ•์ธ ๋ฒˆํ˜ธ ]',
                extra: {
                    subscribeTestPayment: 1 // 100์› ๊ฒฐ์ œ ํ›„ ๊ฒฐ์ œ๊ฐ€ ๋˜๋ฉด billing key๋ฅผ ๋ฐœํ–‰, ๊ฒฐ์ œ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์—๋Ÿฌ
                }
            })
        } catch (e) {
            console.log(e)
            return
        }
        console.log(response)
    }
}

4-1. ๋ฐœ๊ธ‰๋œ ๋นŒ๋งํ‚ค๋กœ ๊ฒฐ์ œ ์Šน์ธ ์š”์ฒญ

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

async function subscribeBilling() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try {
            response = await Bootpay.requestSubscribeBillingPayment({
                billingKey: '612deb53019943001fb52312',
                itemName: 'ํ…Œ์ŠคํŠธ',
                price: 1000,
                orderId: (new Date()).getTime(),
                feedbackUrl: 'https://dev-api.bootpay.co.kr/callback',
                feedbackContentType: 'json'
            })
        } catch (e) {
            return console.log(e)
        }
        console.log(response)
    }
}

4-2. ๋ฐœ๊ธ‰๋œ ๋นŒ๋งํ‚ค๋กœ ๊ฒฐ์ œ ์˜ˆ์•ฝ ์š”์ฒญ

์›ํ•˜๋Š” ์‹œ์ ์— 4-1๋กœ ๊ฒฐ์ œ ์Šน์ธ ์š”์ฒญ์„ ๋ณด๋‚ด๋„ ๋˜์ง€๋งŒ, ๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰ ์ดํ›„์— ๋ฐ”๋กœ ๊ฒฐ์ œ ์˜ˆ์•ฝ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋นŒ๋งํ‚ค๋‹น ์ตœ๋Œ€ 5๊ฑด)

async function subscribeBillingReserve() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try {
            response = await Bootpay.reserveSubscribeBilling({
                billingKey: '612deb53019943001fb52312',
                itemName: 'ํ…Œ์ŠคํŠธ',
                price: 1000,
                orderId: (new Date()).getTime(),
                userInfo: {
                    username: 'ํ…Œ์ŠคํŠธ',
                    phone: '01000000000'
                },
                feedbackUrl: 'https://dev-api.bootpay.co.kr/callback',
                feedbackContentType: 'json',
                schedulerType: 'oneshot',
                executeAt: ((new Date()).getTime() / 1000) + 5
            })
        } catch (e) {
            return console.log(e)
        }
        console.log(response)
    }
}

4-2-1. ๋ฐœ๊ธ‰๋œ ๋นŒ๋งํ‚ค๋กœ ๊ฒฐ์ œ ์˜ˆ์•ฝ - ์ทจ์†Œ ์š”์ฒญ

๋นŒ๋งํ‚ค๋กœ ์˜ˆ์•ฝ๋œ ๊ฒฐ์ œ๊ฑด์„ ์ทจ์†Œํ•ฉ๋‹ˆ๋‹ค.

async function subscribeBillingReserveCancel() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try {            
            response = await Bootpay.destroyReserveSubscribeBilling('612debc70d681b0039e6133d')
            console.log(response)
        } catch (e) {
            return console.log(e)
        }
        console.log(response)
    }
}

4-3. ๋นŒ๋งํ‚ค ์‚ญ์ œ

๋ฐœ๊ธ‰๋œ ๋นŒ๋งํ‚ค๋กœ ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋„๋ก, ์‚ญ์ œ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.

async function deleteBillingKey() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try {            
            response = await Bootpay.destroySubscribeBillingKey('612debc70d681b0039e6133d')
            console.log(response)
        } catch (e) {
            return console.log(e)
        }
        console.log(response)
    }
}

5. (๋ถ€ํŠธํŽ˜์ด ๋‹จ๋… - ๊ฐ„ํŽธ๊ฒฐ์ œ์ฐฝ, ์ƒ์ฒด์ธ์ฆ ๊ธฐ๋ฐ˜์˜ ์‚ฌ์šฉ์ž๋ฅผ ์œ„ํ•œ) ์‚ฌ์šฉ์ž ํ† ํฐ ๋ฐœ๊ธ‰

(๋ถ€ํŠธํŽ˜์ด ๋‹จ๋…) ๋ถ€ํŠธํŽ˜์ด์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ฐ„ํŽธ๊ฒฐ์ œ์ฐฝ, ์ƒ์ฒด์ธ์ฆ ๊ธฐ๋ฐ˜์˜ ๊ฒฐ์ œ ์‚ฌ์šฉ์„ ์œ„ํ•ด์„œ๋Š” ๊ฐœ๋ฐœ์‚ฌ์—์„œ ํšŒ์› ๊ณ ์œ ๋ฒˆํ˜ธ๋ฅผ ๊ด€๋ฆฌํ•ด์•ผํ•˜๋ฉฐ, ํ•ด๋‹น ํšŒ์›์— ๋Œ€ํ•œ ์‚ฌ์šฉ์ž ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. ์ด ํ† ํฐ๊ฐ’์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ฒฐ์ œ์š”์ฒญ ํ•˜์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

async function getUserToken() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try {            
            response = await Bootpay.requestUserToken({
                userId: '1234',
                email: 'test@gmail.com',
                name: 'ํ™๊ธธ๋™'
            })
            console.log(response)
        } catch (e) {
            return console.log(e)
        }
        console.log(response)
    }
}

6. ๊ฒฐ์ œ ๋งํฌ ์ƒ์„ฑ

(๋ถ€ํŠธํŽ˜์ด ๋‹จ๋…) ์š”์ฒญ ํ•˜์‹œ๋ฉด ๊ฒฐ์ œ๋งํฌ๊ฐ€ ๋ฆฌํ„ด๋˜๋ฉฐ, ํ•ด๋‹น url์„ ๊ณ ๊ฐ์—๊ฒŒ ์•ˆ๋‚ด, ๊ฒฐ์ œ ์œ ๋„ํ•˜์—ฌ ๊ฒฐ์ œ๋ฅผ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

async function requestPayment() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try {            
            response = await Bootpay.requestPayment({
                pg: 'kcp',
                method: 'card',
                orderId: (new Date).getTime(),
                price: 1000,
                itemName: 'ํ…Œ์ŠคํŠธ ๋ถ€ํŠธํŽ˜์ด ์ƒํ’ˆ',
                returnUrl: 'https://dev-api.bootpay.co.kr/callback',
                extra: {
                    expire: 30
                }
            })
        } catch (e) {
            return console.log(e)
        }
        console.log(response)
    }
}

7. ์„œ๋ฒ„ ์Šน์ธ ์š”์ฒญ

๊ฒฐ์ œ์Šน์ธ ๋ฐฉ์‹์€ ํด๋ผ์ด์–ธํŠธ ์Šน์ธ ๋ฐฉ์‹๊ณผ, ์„œ๋ฒ„ ์Šน์ธ ๋ฐฉ์‹์œผ๋กœ ์ด 2๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

ํด๋ผ์ด์–ธํŠธ ์Šน์ธ ๋ฐฉ์‹์€ javascript๋‚˜ native ๋“ฑ์—์„œ confirm ํ•จ์ˆ˜์—์„œ ์ง„ํ–‰ํ•˜๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค๋งŒ, ๊ฒฝ์šฐ์— ๋”ฐ๋ผ ์„œ๋ฒ„ ์Šน์ธ ๋ฐฉ์‹์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ์ด์œ 

  1. 100% ์•ˆ์ •์ ์ธ ๊ฒฐ์ œ ํ›„ ๊ณ ๊ฐ ์•ˆ๋‚ด๋ฅผ ์œ„ํ•ด - ํด๋ผ์ด์–ธํŠธ์—์„œ PG๊ฒฐ์ œ ์ง„ํ–‰ ํ›„ ์Šน์ธ ์™„๋ฃŒ๋  ๋•Œ onDone์ด ์ˆ˜ํ–‰๋˜์ง€ ์•Š์•„ (์ธํ„ฐ๋„ท ํ™˜๊ฒฝ ๋“ฑ), ๊ฒฐ์ œ ์ดํ›„ ๊ณ ๊ฐ์—๊ฒŒ ์•ˆ๋‚ดํ•˜์ง€ ๋ชปํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค
  2. ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜์˜ ๊ฐœ๋…์ด ํ•„์š”ํ•  ๊ฒฝ์šฐ - ์žฌ๊ณ ํŒŒ์•…์ด ์ค‘์š”ํ•œ ์ปค๋จธ์Šค๋ฅผ ์šด์˜ํ•  ๊ฒฝ์šฐ ํŠธ๋žœ์žญ์…˜ ๊ฐœ๋…์ด ํ•„์š”ํ•  ์ˆ˜ ์žˆ๊ฒ ์œผ๋ฉฐ, ์ด๋ฅผ ์œ„ํ•ด์„œ๋Š” ์„œ๋ฒ„ ์Šน์ธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
async function submit() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try {            
            response = await Bootpay.verify('612df0250d681b001de61de6')
        } catch (e) {
            return console.log(e)
        }
        console.log(response)
    }
}

8. ๋ณธ์ธ ์ธ์ฆ ๊ฒฐ๊ณผ ์กฐํšŒ

๋‹ค๋‚  ๋ณธ์ธ์ธ์ฆ ํ›„ ๊ฒฐ๊ณผ๊ฐ’์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋‚  ๋ณธ์ธ์ธ์ฆ์—์„œ ํ†ต์‹ ์‚ฌ, ์™ธ๊ตญ์ธ์—ฌ๋ถ€, ์ „ํ™”๋ฒˆํ˜ธ ์ด 3๊ฐ€์ง€ ์ •๋ณด๋Š” ๋‹ค๋‚ ์— ์ถ”๊ฐ€๋กœ ์š”์ฒญํ•˜์…”์•ผ ๋ฐ›์œผ์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

async function certificate() {
    const Bootpay = require('bootpay-backend-nodejs').Bootpay
    Bootpay.setConfig(
        '5b8f6a4d396fa665fdc2b5ea',
        'rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw='
    )
    let token = await Bootpay.getAccessToken()
    if (token.status === 200) {
        let response
        try {            
            response = await Bootpay.certificate('612df0250d681b001de61de6')
        } catch (e) {
            return console.log(e)
        }
        console.log(response)
    }
}

Example ํ”„๋กœ์ ํŠธ

์ ์šฉํ•œ ์ƒ˜ํ”Œ ํ”„๋กœ์ ํŠธ์„ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”

Documentation

๋ถ€ํŠธํŽ˜์ด ๊ฐœ๋ฐœ๋งค๋‰ด์–ผ์„ ์ฐธ์กฐํ•ด์ฃผ์„ธ์š”

๊ธฐ์ˆ ๋ฌธ์˜

๋ถ€ํŠธํŽ˜์ด ํ™ˆํŽ˜์ด์ง€ ์šฐ์ธก ํ•˜๋‹จ ์ฑ„ํŒ…์„ ํ†ตํ•ด ๊ธฐ์ˆ ๋ฌธ์˜ ์ฃผ์„ธ์š”!

License

MIT License.