๋ถํธํ์ด ๊ณต์ Go ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค.
- ์ค์นํ๊ธฐ
- PG API ์ฌ์ฉํ๊ธฐ
- API ๋ชฉ๋ก
- Commerce API ์ฌ์ฉํ๊ธฐ
- Example ํ๋ก์ ํธ
- Documentation
- ๊ธฐ์ ๋ฌธ์
- License
go get -u github.com/bootpay/backend-go/v2import (
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 |
๋ถํธํ์ด์ ์๋ฒ๊ฐ ํต์ ์ ํ๊ธฐ ์ํด์๋ ๋ถํธํ์ด ์๋ฒ๋ก๋ถํฐ ํ ํฐ์ ๋ฐ๊ธ๋ฐ์์ผ ํฉ๋๋ค. ๋ฐ๊ธ๋ ํ ํฐ์ 30๋ถ๊ฐ ์ ํจํ๋ฉฐ, 30๋ถ์ด ์ง๋ ๊ฒฝ์ฐ ํ ํฐ ๋ฐ๊ธ ํจ์๋ฅผ ์ฌํธ์ถ ํด์ฃผ์ ์ผ ํฉ๋๋ค.
func GetToken(api *bootpay.Api) {
token, err := api.GetToken()
if err != nil {
fmt.Println("error:", err.Error())
return
}
fmt.Println(token)
}๊ฒฐ์ ์ฐฝ ๋ฐ ์ ๊ธฐ๊ฒฐ์ ์์ ์น์ธ/์ทจ์๋ ๊ฒฐ์ ๊ฑด์ ๋ํ์ฌ ์ฌ๋ฐ๋ฅธ ๊ฒฐ์ ๊ฑด์ธ์ง ์๋ฒ๊ฐ ํต์ ์ผ๋ก ๊ฒฐ์ ๊ฒ์ฆ์ ํฉ๋๋ค.
func GetReceipt(api *bootpay.Api) {
receiptId := "62afc194e38c300021b345d4"
receipt, err := api.GetReceipt(receiptId)
if err != nil {
fmt.Println("error:", err.Error())
return
}
fmt.Println(receipt)
}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)
}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)
}๊ณ ๊ฐ์ ๊ณ์ข ์ ๋ณด๋ก ๋น๋งํค ๋ฐ๊ธ์ ์์ฒญํฉ๋๋ค. ์ถ๊ธ๋์ ํ์ธ ์ ์ฐจ๊น์ง ์งํํด์ผ ๋น๋งํค๊ฐ ๋ฐ๊ธ๋ฉ๋๋ค.
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) // ๋น๋งํค ๋ฐ๊ธ๋จ
}๋ฐ๊ธ๋ ๋น๋งํค๋ก ์ํ๋ ์์ ์ ์ํ๋ ๊ธ์ก์ผ๋ก ๊ฒฐ์ ์น์ธ ์์ฒญ์ ํฉ๋๋ค.
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)
}๋น๋งํค ๋ฐ๊ธ ์ดํ ์ํ๋ ์์ ์ ๊ฒฐ์ ๋ฅผ ์์ฝํ ์ ์์ต๋๋ค. (๋น๋งํค๋น ์ต๋ 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)
}func ReserveSubscribeLookup(api *bootpay.Api) {
reserveId := "6490149ca575b40024f0b70d"
result, err := api.ReserveSubscribeLookup(reserveId)
if err != nil {
fmt.Println("error:", err.Error())
return
}
fmt.Println(result)
}func ReserveCancel(api *bootpay.Api) {
reserveId := "62aff2a0cf9f6d001a7d10c4"
result, err := api.ReserveCancelSubscribe(reserveId)
if err != nil {
fmt.Println("error:", err.Error())
return
}
fmt.Println(result)
}๋ฐ๊ธ๋ ๋น๋งํค๋ฅผ ์ญ์ ํฉ๋๋ค. ์ญ์ ํ๋๋ผ๋ ์์ฝ๋ ๊ฒฐ์ ๊ฑด์ ์ทจ์๋์ง ์์ต๋๋ค.
func DestroyBillingKey(api *bootpay.Api) {
billingKey := "62afc52dcf9f6d001d7d1035"
result, err := api.DestroyBillingKey(billingKey)
if err != nil {
fmt.Println("error:", err.Error())
return
}
fmt.Println(result)
}ํด๋ผ์ด์ธํธ์์ ๋น๋งํค ๋ฐ๊ธ์, ๋ณด์์ ํด๋ผ์ด์ธํธ ์ด๋ฒคํธ์ ๋น๋งํค๋ฅผ ์ ๋ฌํด์ฃผ์ง ์์ต๋๋ค.
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)
}ใ ใ ํ์ด ์ฌ์ฉ์ ์ํด ๊ฐ๋งน์ ํ์์ ํ ํฐ์ ๋ฐ๊ธํฉ๋๋ค.
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)
}๊ฒฐ์ ์น์ธ ๋ฐฉ์์ ํด๋ผ์ด์ธํธ ์น์ธ ๋ฐฉ์๊ณผ ์๋ฒ ์น์ธ ๋ฐฉ์ 2๊ฐ์ง๊ฐ ์์ต๋๋ค.
์๋ฒ ์น์ธ์ด ํ์ํ ๊ฒฝ์ฐ:
- 100% ์์ ์ ์ธ ๊ฒฐ์ ํ ๊ณ ๊ฐ ์๋ด๊ฐ ํ์ํ ๊ฒฝ์ฐ
- ๋จ์ผ ํธ๋์ญ์ ๊ฐ๋ ์ด ํ์ํ ๊ฒฝ์ฐ (์ฌ๊ณ ํ์ ์ด ์ค์ํ ์ปค๋จธ์ค)
func ServerConfirm(api *bootpay.Api) {
receiptId := "62afda41cf9f6d001f7d105f"
result, err := api.ServerConfirm(receiptId)
if err != nil {
fmt.Println("error:", err.Error())
return
}
fmt.Println(result)
}๋ค๋ ๋ณธ์ธ์ธ์ฆ ํ ๊ฒฐ๊ณผ๊ฐ์ ์กฐํํฉ๋๋ค.
func Certificate(api *bootpay.Api) {
receiptId := "6285ffa6cf9f6d0022c4346b"
result, err := api.Certificate(receiptId)
if err != nil {
fmt.Println("error:", err.Error())
return
}
fmt.Println(result)
}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)
}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)
}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)
}ํ๊ธ ๊ฑฐ๋์ ํํด ๊ตฌ๋งค์์ ์์ ๊ฑฐ๋๋ฅผ ๋ณด์ฅํ๋ ๋งค๋งค๋ณดํธ์๋น์ค์ ๋๋ค.
์ง์ 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)
}๋ถํธํ์ด 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)
}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)
}๋ถํธํ์ด ๊ฒฐ์ ์ ์๊ด์์ด ํ๊ธ์์์ฆ์ ๋ฐํํฉ๋๋ค.
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)
}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- ์ฌ์ฉ์ ํ ํฐ ์๋ต- ๋ฑ...
๋ถํธํ์ด 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)
}
}// ์ฌ์ฉ์ ๋ชฉ๋ก ์กฐํ
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": "์์ ๋ ์ด๋ฆ",
})// ์ํ ๋ชฉ๋ก ์กฐํ
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,
})// ์ฃผ๋ฌธ ๋ชฉ๋ก ์กฐํ
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")// ์ ๊ธฐ๊ตฌ๋
๋ชฉ๋ก ์กฐํ
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": "ํด์ง ์ฌ์ ",
})// ์ฒญ๊ตฌ์ ๋ชฉ๋ก ์กฐํ
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 ๋๋ ํ ๋ฆฌ๋ฅผ ์ฐธ๊ณ ํด์ฃผ์ธ์.
์ ์ฉ ์ํ ํ๋ก์ ํธ๋ฅผ ์ฐธ์กฐํด์ฃผ์ธ์.
๋ถํธํ์ด ๊ฐ๋ฐ๋งค๋ด์ผ์ ์ฐธ์กฐํด์ฃผ์ธ์.
๋ถํธํ์ด ํํ์ด์ง ์ฐ์ธก ํ๋จ ์ฑํ ์ ํตํด ๊ธฐ์ ๋ฌธ์ ์ฃผ์ธ์!