Skip to content

bootpay/backend-go

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

50 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Bootpay Go Server Side Library

๋ถ€ํŠธํŽ˜์ด ๊ณต์‹ Go ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค.

Go Reference

๋ชฉ์ฐจ


์„ค์น˜ํ•˜๊ธฐ

go get -u github.com/bootpay/backend-go/v2

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

import (
    bootpay "github.com/bootpay/backend-go/v2"
)

func main() {
    // API ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
    api := bootpay.Api{}.New(
        "5b8f6a4d396fa665fdc2b5ea",           // application_id
        "rm6EYECr6aroQVG2ntW0A6LpWnkTgP4uQ3H18sDDUYw=", // private_key
        nil,  // http.Client (nil์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ)
        "",   // mode: "", "development", "test", "stage"
    )

    // ํ† ํฐ ๋ฐœ๊ธ‰ (ํ•„์ˆ˜)
    token, err := api.GetToken()
    if err != nil {
        panic(err)
    }
    fmt.Println(token)
}

ํ™˜๊ฒฝ ์„ค์ •

Mode Base URL
"" (๊ธฐ๋ณธ๊ฐ’) https://api.bootpay.co.kr/v2
"development" https://dev-api.bootpay.co.kr/v2
"test" https://test-api.bootpay.co.kr/v2
"stage" https://stage-api.bootpay.co.kr/v2

API ๋ชฉ๋ก

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

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

func GetToken(api *bootpay.Api) {
    token, err := api.GetToken()
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(token)
}

2. ๊ฒฐ์ œ ๋‹จ๊ฑด ์กฐํšŒ

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

func GetReceipt(api *bootpay.Api) {
    receiptId := "62afc194e38c300021b345d4"
    receipt, err := api.GetReceipt(receiptId)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(receipt)
}

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

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

์ฃผ์˜์‚ฌํ•ญ:

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

๋ถ€๋ถ„์ทจ์†Œ ์ง€์› PG์‚ฌ: ์ด๋‹ˆ์‹œ์Šค, KCP, ๋‹ค๋‚ , ํŽ˜์ด๋ ˆํ„ฐ, ๋‚˜์ด์ŠคํŽ˜์ด, ์นด์นด์˜คํŽ˜์ด, ํŽ˜์ด์ฝ”

func ReceiptCancel(api *bootpay.Api) {
    payload := bootpay.CancelData{
        ReceiptId:      "62afc3c5cf9f6d001b7d101a",
        CancelId:       fmt.Sprintf("%d", time.Now().UnixMilli()), // ์ค‘๋ณต ์ทจ์†Œ ๋ฐฉ์ง€์šฉ
        CancelUsername: "๊ด€๋ฆฌ์ž",
        CancelMessage:  "ํ…Œ์ŠคํŠธ ๊ฒฐ์ œ ์ทจ์†Œ",
        // CancelPrice:  500,  // ๋ถ€๋ถ„ ์ทจ์†Œ์‹œ ๊ธˆ์•ก ์ง€์ •
        // CancelTaxFree: 0,   // ๋ถ€๋ถ„ ์ทจ์†Œ์‹œ ๋ฉด์„ธ ๊ธˆ์•ก
    }

    result, err := api.ReceiptCancel(payload)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

4. ์ž๋™/๋นŒ๋ง/์ •๊ธฐ ๊ฒฐ์ œ

4-1. ์นด๋“œ ๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰

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

func GetBillingKey(api *bootpay.Api) {
    payload := bootpay.BillingKeyPayload{
        SubscriptionId:  fmt.Sprintf("%d", time.Now().UnixMilli()),
        Pg:              "nicepay",
        OrderName:       "์ •๊ธฐ๊ฒฐ์ œ ํ…Œ์ŠคํŠธ ์•„์ดํ…œ",
        CardNo:          "5570********1074",
        CardPw:          "**",
        CardExpireYear:  "**",
        CardExpireMonth: "**",
        CardIdentityNo:  "",
    }

    billingKey, err := api.GetBillingKey(payload)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(billingKey)
}

4-2. ๊ณ„์ขŒ ๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰

๊ณ ๊ฐ์˜ ๊ณ„์ขŒ ์ •๋ณด๋กœ ๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ์ถœ๊ธˆ๋™์˜ ํ™•์ธ ์ ˆ์ฐจ๊นŒ์ง€ ์ง„ํ–‰ํ•ด์•ผ ๋นŒ๋งํ‚ค๊ฐ€ ๋ฐœ๊ธ‰๋ฉ๋‹ˆ๋‹ค.

Step 1: ๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰ ์š”์ฒญ

func RequestSubscribeAutomaticTransferBillingKey(api *bootpay.Api) {
    payload := bootpay.BillingKeyPayload{
        SubscriptionId:        fmt.Sprintf("%d", time.Now().UnixMilli()),
        Pg:                    "nicepay",
        OrderName:             "์ •๊ธฐ๊ฒฐ์ œ ํ…Œ์ŠคํŠธ ์•„์ดํ…œ",
        Username:              "ํ™๊ธธ๋™",
        AuthType:              "ARS",  // "ARS" ๋˜๋Š” "๊ฐ„ํŽธ์ธ์ฆ"
        BankName:              "๊ตญ๋ฏผ",
        BankAccount:           "6756123412342472",
        IdentityNo:            "901014",
        CashReceiptType:       "์†Œ๋“๊ณต์ œ",  // "์†Œ๋“๊ณต์ œ" ๋˜๋Š” "์ง€์ถœ์ฆ๋น™"
        CashReceiptIdentityNo: "01012341234",
        Phone:                 "01012341234",
    }

    result, err := api.RequestSubscribeAutomaticTransferBillingKey(payload)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

Step 2: ์ถœ๊ธˆ ๋™์˜ ํ™•์ธ

func PublishAutomaticTransferBillingKey(api *bootpay.Api) {
    receiptId := "6655069ca691573f1bb9c28a"

    result, err := api.PublishAutomaticTransferBillingKey(receiptId)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)  // ๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰๋จ
}

4-3. ๊ฒฐ์ œ ์š”์ฒญํ•˜๊ธฐ

๋ฐœ๊ธ‰๋œ ๋นŒ๋งํ‚ค๋กœ ์›ํ•˜๋Š” ์‹œ์ ์— ์›ํ•˜๋Š” ๊ธˆ์•ก์œผ๋กœ ๊ฒฐ์ œ ์Šน์ธ ์š”์ฒญ์„ ํ•ฉ๋‹ˆ๋‹ค.

func RequestSubscribe(api *bootpay.Api) {
    payload := bootpay.SubscribePayload{
        BillingKey: "62afc52dcf9f6d001d7d1035",
        OrderName:  "์ •๊ธฐ๊ฒฐ์ œ ํ…Œ์ŠคํŠธ",
        OrderId:    fmt.Sprintf("%d", time.Now().UnixMilli()),
        Price:      1000,
        Items: []bootpay.Item{
            {
                Name:  "ํ…Œ์ŠคํŠธ ์ƒํ’ˆ",
                Qty:   1,
                Id:    "item_1",
                Price: 1000,
            },
        },
    }

    result, err := api.RequestSubscribe(payload)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

4-4. ๊ฒฐ์ œ ์˜ˆ์•ฝํ•˜๊ธฐ

๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰ ์ดํ›„ ์›ํ•˜๋Š” ์‹œ์ ์— ๊ฒฐ์ œ๋ฅผ ์˜ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (๋นŒ๋งํ‚ค๋‹น ์ตœ๋Œ€ 10๊ฑด)

func ReserveSubscribe(api *bootpay.Api) {
    reserveTime := time.Now().Add(time.Minute * 10).Format("2006-01-02T15:04:05-07:00")

    payload := bootpay.SubscribePayload{
        BillingKey:       "62aff193cf9f6d001a7d10be",
        OrderName:        "์ •๊ธฐ๊ฒฐ์ œ ํ…Œ์ŠคํŠธ",
        OrderId:          fmt.Sprintf("%d", time.Now().UnixMilli()),
        ReserveExecuteAt: reserveTime,
        Price:            1000,
    }

    result, err := api.ReserveSubscribe(payload)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

4-5. ์˜ˆ์•ฝ ์กฐํšŒํ•˜๊ธฐ

func ReserveSubscribeLookup(api *bootpay.Api) {
    reserveId := "6490149ca575b40024f0b70d"

    result, err := api.ReserveSubscribeLookup(reserveId)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

4-6. ์˜ˆ์•ฝ ์ทจ์†Œํ•˜๊ธฐ

func ReserveCancel(api *bootpay.Api) {
    reserveId := "62aff2a0cf9f6d001a7d10c4"

    result, err := api.ReserveCancelSubscribe(reserveId)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

4-7. ๋นŒ๋งํ‚ค ์‚ญ์ œํ•˜๊ธฐ

๋ฐœ๊ธ‰๋œ ๋นŒ๋งํ‚ค๋ฅผ ์‚ญ์ œํ•ฉ๋‹ˆ๋‹ค. ์‚ญ์ œํ•˜๋”๋ผ๋„ ์˜ˆ์•ฝ๋œ ๊ฒฐ์ œ๊ฑด์€ ์ทจ์†Œ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

func DestroyBillingKey(api *bootpay.Api) {
    billingKey := "62afc52dcf9f6d001d7d1035"

    result, err := api.DestroyBillingKey(billingKey)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

4-8. ๋นŒ๋งํ‚ค ์กฐํšŒํ•˜๊ธฐ

ํด๋ผ์ด์–ธํŠธ์—์„œ ๋นŒ๋งํ‚ค ๋ฐœ๊ธ‰์‹œ, ๋ณด์•ˆ์ƒ ํด๋ผ์ด์–ธํŠธ ์ด๋ฒคํŠธ์— ๋นŒ๋งํ‚ค๋ฅผ ์ „๋‹ฌํ•ด์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

receiptId๋กœ ์กฐํšŒ:

func LookupBillingKey(api *bootpay.Api) {
    receiptId := "62afccb3cf9f6d001b7d101d"

    result, err := api.LookupBillingKey(receiptId)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

billingKey๋กœ ์กฐํšŒ:

func LookupBillingKeyByKey(api *bootpay.Api) {
    billingKey := "66542dfb4d18d5fc7b43e1b6"

    result, err := api.LookupBillingKeyByKey(billingKey)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

5. ํšŒ์› ํ† ํฐ ๋ฐœ๊ธ‰์š”์ฒญ

ใ…‡ใ…‡ํŽ˜์ด ์‚ฌ์šฉ์„ ์œ„ํ•ด ๊ฐ€๋งน์  ํšŒ์›์˜ ํ† ํฐ์„ ๋ฐœ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค.

func GetUserToken(api *bootpay.Api) {
    payload := bootpay.EasyUserTokenPayload{
        UserId: "user_1234",
        Email:  "test1234@gmail.com",
        Name:   "ํ™๊ธธ๋™",
        Gender: 0,
        Birth:  "19861014",
        Phone:  "01012345678",
    }

    result, err := api.GetUserToken(payload)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

๋˜๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ:

func RequestUserToken(api *bootpay.Api) {
    payload := bootpay.UserTokenRequest{
        UserId: "gosomi1",
        Phone:  "01012345678",
    }

    result, err := api.RequestUserToken(payload)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

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

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

์„œ๋ฒ„ ์Šน์ธ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ:

  1. 100% ์•ˆ์ •์ ์ธ ๊ฒฐ์ œ ํ›„ ๊ณ ๊ฐ ์•ˆ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ
  2. ๋‹จ์ผ ํŠธ๋žœ์žญ์…˜ ๊ฐœ๋…์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ (์žฌ๊ณ  ํŒŒ์•…์ด ์ค‘์š”ํ•œ ์ปค๋จธ์Šค)
func ServerConfirm(api *bootpay.Api) {
    receiptId := "62afda41cf9f6d001f7d105f"

    result, err := api.ServerConfirm(receiptId)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

7. ๋ณธ์ธ ์ธ์ฆ

7-1. ๋ณธ์ธ์ธ์ฆ ๊ฒฐ๊ณผ ์กฐํšŒ

๋‹ค๋‚  ๋ณธ์ธ์ธ์ฆ ํ›„ ๊ฒฐ๊ณผ๊ฐ’์„ ์กฐํšŒํ•ฉ๋‹ˆ๋‹ค.

func Certificate(api *bootpay.Api) {
    receiptId := "6285ffa6cf9f6d0022c4346b"

    result, err := api.Certificate(receiptId)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

7-2. ๋ณธ์ธ์ธ์ฆ REST API ์š”์ฒญ

func RequestAuthentication(api *bootpay.Api) {
    authData := bootpay.Authentication{
        Pg:               "๋‹ค๋‚ ",
        Method:           "๋ณธ์ธ์ธ์ฆ",
        Username:         "ํ™๊ธธ๋™",
        IdentityNo:       "9001011",  // ์ƒ๋…„์›”์ผ + ์ฃผ๋ฏผ๋ฒˆํ˜ธ ๋’ท 1์ž๋ฆฌ
        Carrier:          "SKT",      // SKT, KT, LGU+, SKT_MVNO, KT_MVNO, LGU+_MVNO
        Phone:            "01012345678",
        SiteUrl:          "https://www.example.com",
        OrderName:        "ํšŒ์› ๋ณธ์ธ์ธ์ฆ",
        AuthenticationId: fmt.Sprintf("%d", time.Now().UnixMilli()),
        ClientIp:         "127.0.0.1",
        AuthenticateType: "sms",  // "sms" ๋˜๋Š” "pass"
    }

    result, err := api.RequestAuthentication(authData)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

7-3. ๋ณธ์ธ์ธ์ฆ ์Šน์ธ

func ConfirmAuthentication(api *bootpay.Api) {
    authParams := bootpay.AuthenticationParams{
        ReceiptId: "636a020d1fc1920373e6d8ff",
        Otp:       "613026",
    }

    result, err := api.ConfirmAuthentication(authParams)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

7-4. ๋ณธ์ธ์ธ์ฆ SMS ์žฌ์ „์†ก

func RealarmAuthentication(api *bootpay.Api) {
    authParams := bootpay.AuthenticationParams{
        ReceiptId: "636a020d1fc1920373e6d8ff",
    }

    result, err := api.RealarmAuthentication(authParams)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

8. ์—์Šคํฌ๋กœ ์ด์šฉ์‹œ PG์‚ฌ๋กœ ๋ฐฐ์†ก์ •๋ณด ๋ณด๋‚ด๊ธฐ

ํ˜„๊ธˆ ๊ฑฐ๋ž˜์— ํ•œํ•ด ๊ตฌ๋งค์ž์˜ ์•ˆ์ „๊ฑฐ๋ž˜๋ฅผ ๋ณด์žฅํ•˜๋Š” ๋งค๋งค๋ณดํ˜ธ์„œ๋น„์Šค์ž…๋‹ˆ๋‹ค.

์ง€์› PG์‚ฌ: ์ด๋‹ˆ์‹œ์Šค, KCP

func ShippingStart(api *bootpay.Api) {
    shipping := bootpay.Shipping{
        ReceiptId:      "628ae7ffd01c7e001e9b6066",
        ReceiptUrl:     "https://example.com/receipt",
        TrackingNumber: "123456789",
        DeliveryCorp:   "CJ๋Œ€ํ•œํ†ต์šด",
        ShippingPrepayment: true,  // ์„ ๋ถˆ ์—ฌ๋ถ€
        ShippingDay:    3,         // ๋ฐฐ์†ก์ผ
        User: bootpay.ShippingUser{
            Username: "ํ™๊ธธ๋™",
            Phone:    "01012345678",
            Address:  "์„œ์šธํŠน๋ณ„์‹œ ์ข…๋กœ๊ตฌ",
            Zipcode:  "03000",
        },
        Company: bootpay.ShippingCompany{
            Name:    "๋ถ€ํŠธํŽ˜์ด",
            Phone:   "02-1234-5678",
            Zipcode: "06000",
            Addr1:   "์„œ์šธํŠน๋ณ„์‹œ ๊ฐ•๋‚จ๊ตฌ",
            Addr2:   "ํ…Œํ—ค๋ž€๋กœ 123",
        },
    }

    result, err := api.PutShippingStart(shipping)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

9. ํ˜„๊ธˆ์˜์ˆ˜์ฆ

9-1. ํ˜„๊ธˆ์˜์ˆ˜์ฆ ๋ฐœํ–‰ํ•˜๊ธฐ

๋ถ€ํŠธํŽ˜์ด API๋ฅผ ํ†ตํ•ด ๊ฒฐ์ œ๋œ ๊ฑด์— ๋Œ€ํ•˜์—ฌ ํ˜„๊ธˆ์˜์ˆ˜์ฆ์„ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.

func RequestCashReceiptByBootpay(api *bootpay.Api) {
    cashReceipt := bootpay.CashReceiptData{
        ReceiptId:       "62e0f11f1fc192036b1b3c92",
        Username:        "ํ™๊ธธ๋™",
        Email:           "test@bootpay.co.kr",
        Phone:           "01012345678",
        IdentityNo:      "01012345678",
        CashReceiptType: "์†Œ๋“๊ณต์ œ",  // "์†Œ๋“๊ณต์ œ" ๋˜๋Š” "์ง€์ถœ์ฆ๋น™"
    }

    result, err := api.RequestCashReceiptByBootpay(cashReceipt)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

9-2. ํ˜„๊ธˆ์˜์ˆ˜์ฆ ๋ฐœํ–‰ ์ทจ์†Œ

func RequestCashReceiptCancelByBootpay(api *bootpay.Api) {
    cancelData := bootpay.CancelData{
        ReceiptId:      "62e0f11f1fc192036b1b3c92",
        CancelUsername: "๊ด€๋ฆฌ์ž",
        CancelMessage:  "๊ณ ๊ฐ ์š”์ฒญ์œผ๋กœ ์ทจ์†Œ",
    }

    result, err := api.RequestCashReceiptCancelByBootpay(cancelData)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

9-3. ๋ณ„๊ฑด ํ˜„๊ธˆ์˜์ˆ˜์ฆ ๋ฐœํ–‰

๋ถ€ํŠธํŽ˜์ด ๊ฒฐ์ œ์™€ ์ƒ๊ด€์—†์ด ํ˜„๊ธˆ์˜์ˆ˜์ฆ์„ ๋ฐœํ–‰ํ•ฉ๋‹ˆ๋‹ค.

func RequestCashReceipt(api *bootpay.Api) {
    purchasedAt := time.Now().Format("2006-01-02T15:04:05-07:00")

    cashReceipt := bootpay.CashReceiptData{
        Pg:              "ํ† ์Šค",
        Price:           1000,
        OrderName:       "ํ…Œ์ŠคํŠธ ์ƒํ’ˆ",
        CashReceiptType: "์†Œ๋“๊ณต์ œ",
        IdentityNo:      "01012345678",
        OrderId:         fmt.Sprintf("%d", time.Now().UnixMilli()),
        PurchasedAt:     purchasedAt,
        Currency:        "KRW",
    }

    result, err := api.RequestCashReceipt(cashReceipt)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

9-4. ๋ณ„๊ฑด ํ˜„๊ธˆ์˜์ˆ˜์ฆ ๋ฐœํ–‰ ์ทจ์†Œ

func RequestCashReceiptCancel(api *bootpay.Api) {
    cancelData := bootpay.CancelData{
        ReceiptId:      "62f4be7f1fc192036f9f4bc6",
        CancelUsername: "๊ด€๋ฆฌ์ž",
        CancelMessage:  "๊ณ ๊ฐ ์š”์ฒญ์œผ๋กœ ์ทจ์†Œ",
    }

    result, err := api.RequestCashReceiptCancel(cancelData)
    if err != nil {
        fmt.Println("error:", err.Error())
        return
    }
    fmt.Println(result)
}

์‘๋‹ต ํƒ€์ž…

Go SDK๋Š” ์ƒ์„ธ ์‘๋‹ต ํƒ€์ž…์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. types.go ํŒŒ์ผ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • AccessTokenResponse - ํ† ํฐ ๋ฐœ๊ธ‰ ์‘๋‹ต
  • ReceiptResponse - ๊ฒฐ์ œ ์ •๋ณด ์‘๋‹ต
  • CertificateResponse - ๋ณธ์ธ์ธ์ฆ ์‘๋‹ต
  • SubscriptionBillingResponse - ๋นŒ๋งํ‚ค ์‘๋‹ต
  • UserTokenResponse - ์‚ฌ์šฉ์ž ํ† ํฐ ์‘๋‹ต
  • ๋“ฑ...

10. Commerce API

๋ถ€ํŠธํŽ˜์ด Commerce API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‚ฌ์šฉ์ž, ์ƒํ’ˆ, ์ฃผ๋ฌธ, ์ •๊ธฐ๊ตฌ๋… ๋“ฑ์„ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

10-1. Commerce API ์ดˆ๊ธฐํ™”

import (
    commerce "github.com/bootpay/backend-go/v2/commerce"
)

func main() {
    api := commerce.ApiCommerce{}.New(
        "hxS-Up--5RvT6oU6QJE0JA",           // client_key
        "r5zxvDcQJiAP2PBQ0aJjSHQtblNmYFt6uFoEMhti_mg=", // secret_key
        nil,  // http.Client (nil์ด๋ฉด ๊ธฐ๋ณธ๊ฐ’ ์‚ฌ์šฉ)
        "development", // mode: "", "development", "stage"
    )

    // ํ† ํฐ ๋ฐœ๊ธ‰
    token, err := api.GetToken()
    if err != nil {
        panic(err)
    }
}

10-2. ์‚ฌ์šฉ์ž ๊ด€๋ฆฌ

// ์‚ฌ์šฉ์ž ๋ชฉ๋ก ์กฐํšŒ
users, err := api.UserList(map[string]interface{}{
    "page":  1,
    "limit": 10,
})

// ์‚ฌ์šฉ์ž ์ƒ์„ธ ์กฐํšŒ
user, err := api.UserDetail("USER_ID")

// ํšŒ์›๊ฐ€์ž…
newUser, err := api.UserJoin(map[string]interface{}{
    "login_id": "test@example.com",
    "login_pw": "password123",
    "name":     "ํ™๊ธธ๋™",
    "email":    "test@example.com",
    "phone":    "010-1234-5678",
})

// ์‚ฌ์šฉ์ž ์ •๋ณด ์ˆ˜์ •
updatedUser, err := api.UserUpdate(map[string]interface{}{
    "user_id": "USER_ID",
    "name":    "์ˆ˜์ •๋œ ์ด๋ฆ„",
})

10-3. ์ƒํ’ˆ ๊ด€๋ฆฌ

// ์ƒํ’ˆ ๋ชฉ๋ก ์กฐํšŒ
products, err := api.ProductList(map[string]interface{}{
    "page":  1,
    "limit": 10,
})

// ์ƒํ’ˆ ์ƒ์„ฑ
product, err := api.ProductCreate(map[string]interface{}{
    "name":        "ํ…Œ์ŠคํŠธ ์ƒํ’ˆ",
    "price":       10000,
    "description": "์ƒํ’ˆ ์„ค๋ช…",
})

// ์ƒํ’ˆ ์ƒ์„ธ ์กฐํšŒ
productDetail, err := api.ProductDetail("PRODUCT_ID")

// ์ƒํ’ˆ ์ˆ˜์ •
updatedProduct, err := api.ProductUpdate(map[string]interface{}{
    "product_id": "PRODUCT_ID",
    "name":       "์ˆ˜์ •๋œ ์ƒํ’ˆ๋ช…",
    "price":      15000,
})

10-4. ์ฃผ๋ฌธ ๊ด€๋ฆฌ

// ์ฃผ๋ฌธ ๋ชฉ๋ก ์กฐํšŒ
orders, err := api.OrderList(map[string]interface{}{
    "page":  1,
    "limit": 10,
})

// ์ฃผ๋ฌธ ์ƒ์„ธ ์กฐํšŒ
order, err := api.OrderDetail("ORDER_ID")

// ์›”๋ณ„ ์ฃผ๋ฌธ ์กฐํšŒ
monthOrders, err := api.OrderMonth("USER_GROUP_ID", "2024-12")

10-5. ์ •๊ธฐ๊ตฌ๋… ๊ด€๋ฆฌ

// ์ •๊ธฐ๊ตฌ๋… ๋ชฉ๋ก ์กฐํšŒ
subscriptions, err := api.OrderSubscriptionList(nil)

// ์ •๊ธฐ๊ตฌ๋… ์ƒ์„ธ ์กฐํšŒ
subscription, err := api.OrderSubscriptionDetail("ORDER_SUBSCRIPTION_ID")

// ์ •๊ธฐ๊ตฌ๋… ์ผ์‹œ์ •์ง€
err = api.OrderSubscriptionPause(map[string]interface{}{
    "order_subscription_id": "ORDER_SUBSCRIPTION_ID",
    "pause_days":            30,
    "reason":                "์ผ์‹œ์ •์ง€ ์‚ฌ์œ ",
})

// ์ •๊ธฐ๊ตฌ๋… ์žฌ๊ฐœ
err = api.OrderSubscriptionResume(map[string]interface{}{
    "order_subscription_id": "ORDER_SUBSCRIPTION_ID",
})

// ์ •๊ธฐ๊ตฌ๋… ํ•ด์ง€
err = api.OrderSubscriptionTermination(map[string]interface{}{
    "order_subscription_id": "ORDER_SUBSCRIPTION_ID",
    "reason":                "ํ•ด์ง€ ์‚ฌ์œ ",
})

10-6. ์ฒญ๊ตฌ์„œ ๊ด€๋ฆฌ

// ์ฒญ๊ตฌ์„œ ๋ชฉ๋ก ์กฐํšŒ
invoices, err := api.InvoiceList(nil)

// ์ฒญ๊ตฌ์„œ ์ƒ์„ฑ
invoice, err := api.InvoiceCreate(map[string]interface{}{
    "user_id": "USER_ID",
    "amount":  50000,
    "title":   "์ฒญ๊ตฌ์„œ ์ œ๋ชฉ",
})

// ์ฒญ๊ตฌ์„œ ์•Œ๋ฆผ ์ „์†ก
err = api.InvoiceNotify("INVOICE_ID", []int{1, 2}) // 1: SMS, 2: Email

๋” ์ž์„ธํ•œ Commerce API ์‚ฌ์šฉ ์˜ˆ์ œ๋Š” commerce_test ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.


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

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


Documentation

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


๊ธฐ์ˆ ๋ฌธ์˜

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


License

MIT License

About

bootpay server side plugin for golang

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages