Nhảy tới nội dung

Golang SDK

Trang thanh toán payOS

Khám phá mã nguồn mẫu hoàn chỉnh được phát triển bằng Golang. Mã nguồn server-side chuyển hướng đến trang thanh toán do payOS phát triển. Trước khi bắt đầu, hãy tạo một kênh thanh toán trên trang payOS.

Example bannerGithub

Tài liệu

Xem tài liệu API payOS để biết thêm thông tin.

Cài đặt thư viện PayOS cho dự án Golang

go get github.com/payOSHQ/payos-lib-golang

Khởi tạo đối tượng PayOS

Bạn cần khởi tạo đối tượng PayOS bằng ckientId, apiKeychecksumKey của cổng thanh toán mà bạn đã tạo.

import (
"github.com/payOSHQ/payos-lib-golang"
)

func main() {
payos.Key(clientId, apiKey, checksumKey)
}

Các phương thức có trong đối tượng PayOS

Phương thứcKiểu tham số đầu vàoMô tảKiểu trả về
CreatePaymentLinkCheckoutRequestTypeTạo link thanh toán cho dữ liệu đơn hàngCheckoutResponseDataType
GetPaymentLinkInformationstringLấy thông tin thanh toán của đơn hàng đã tạo link thanh toán.PaymentLinkDataType
CancelPaymentLinkstring, *stringHủy link thanh toán của đơn hàng.PaymentLinkDataType
ConfirmWebhookstringXác thực URL Webhook của kênh thanh toán và thêm hoặc cập nhật URL Webhook cho Kênh thanh toán đó nếu thành côngstring
VerifyPaymentWebhookDataWebhookTypeXác minh dữ liệu nhận được qua webhook sau khi thanh toánWebhookDataType

Phương thức CreatePaymentLink

Tạo link thanh toán cho dữ liệu đơn hàng với đầu vào là CheckoutRequestType và trả về CheckoutResponseDataType.

Xem hướng dẫn
package main

import (
"fmt"
"log"

"github.com/payOSHQ/payos-lib-golang"
)

func main(){
payos.Key(clientId, apiKey,checksumKey)
body := CheckoutRequestType{
OrderCode: 12345,
Amount: 2000,
Items: []payos.Item{
{
Name: "Mỳ tôm Hảo Hảo ly",
Price: 2000,
Quantity: 1,
},
},
Description: "Thanh toán đơn hàng",
CancelUrl: "http://localhost:8080/cancel/",
ReturnUrl: "http://localhost:8080/success/",
}

data, err := CreatePaymentLink(body)
if err != nil {
log.Fatal(err)
}
fmt.Println(data)
}

Phương thức GetPaymentLinkInformation

Lấy thông tin thanh toán của đơn hàng đã tạo link thanh toán với đầu vào là stringorderCode và trả về PaymentLinkDataType.

Xem hướng dẫn
package main

import (
"fmt"
"log"

"github.com/payOSHQ/payos-lib-golang"
)

func main(){
payos.Key(clientId, apiKey,checksumKey)
data, err := GetPaymentLinkInformation("12345")
if err != nil {
log.Fatal(err)
}
fmt.Println(data)
}

Phương thức CancelPaymentLink

Hủy link thanh toán của đơn hàng với đầu vào là stringorderCode*stringreason và trả về PaymentLinkDataType.

Xem hướng dẫn
package main

import (
"fmt"
"log"

"github.com/payOSHQ/payos-lib-golang"
)

func main(){
payos.Key(clientId, apiKey,checksumKey)
cancelReason := "Khách hàng hủy đơn hàng"
data, err := CancelPaymentLink("12345", &cancelReason)
}

Phương thức ConfirmWebhook

Xác thực URL Webhook của kênh thanh toán và thêm hoặc cập nhật URL Webhook cho Kênh thanh toán đó nếu thành công với đầu vào là stringwebhookUrl và trả về string.

Xem hướng dẫn
package main

import (
"fmt"
"log"

"github.com/payOSHQ/payos-lib-golang"
)

func main(){
payos.Key(clientId, apiKey,checksumKey)
data, err := ConfirmWebhook("http://yourdomain.com/webhook/")
}

Phương thức VerifyPaymentWebhookData

Xác minh dữ liệu nhận được qua webhook sau khi thanh toán với đầu vào là WebhookType và trả về WebhookDataType.

Xem hướng dẫn
package main

import (
"fmt"
"log"

"github.com/payOSHQ/payos-lib-golang"
)

func main(){
payos.Key(clientId, apiKey,checksumKey)
body := WebhookType{}
data, err := VerifyPaymentWebhookData(body)
}

Các kiểu dữ liệu

Kiểu dữ liệu CheckoutRequestType

type CheckoutRequestType struct {
OrderCode int `json:"orderCode"` // Mã đơn hàng
Amount int `json:"amount"` // Tổng tiền đơn hàng
Description string `json:"description"` // Mô tả đơn hàng, được dùng làm nội dung chuyển khoản
CancelUrl string `json:"cancelUrl"` // URL của trang web hoặc ứng dụng sẽ được chuyển tới khi khách hàng hủy thanh toán
ReturnUrl string `json:"returnUrl"` // URL của trang web hoặc ứng dụng sẽ được chuyển tới khi khách hàng thanh toán thành công
Signature *string `json:"signature"` // Chữ ký cho dữ liệu của đơn hàng, có chức năng kiểm tra tính toàn vẹn của dữ liệu
Items []Item `json:"items"` // Danh sách sản phẩm
BuyerName *string `json:"buyerName"` // Tên người mua
BuyerEmail *string `json:"buyerEmail"` // Email người mua
BuyerPhone *string `json:"buyerPhone"` // Số điện thoại người mua
BuyerAddress *string `json:"buyerAddress"` // Địa chỉ người mua
ExpiredAt *int `json:"expiredAt"` // Thời gian hết hạn của link thanh toán
}

Kiểu dữ liệu CheckoutResponseDataType

type CheckoutResponseDataType struct {
Bin string `json:"bin"` // Mã BIN ngân hàng
AccountNumber string `json:"accountNumber"` // Số tài khoản của kênh thanh toán
AccountName string `json:"accountName"` // Tên chủ tài khoản của kênh thanh toán
Amount int `json:"amount"` // Tổng tiền đơn hàng
Description string `json:"description"` // Mô tả đơn hàng, được dùng làm nội dung chuyển khoản
OrderCode int `json:"orderCode"` // Mã đơn hàng
Currency string `json:"currency"` // Đơn vị tiền tệ
PaymentLinkId string `json:"paymentLinkId"` // Mã link thanh toán
Status string `json:"status"` // Trạng thái của link thanh toán
CheckoutUrl string `json:"checkoutUrl"` // Đường dẫn trang thanh toán
QRCode string `json:"qrCode"` // Mã QR thanh toán
}

Kiểu dữ liệu PaymentLinkDataType

type PaymentLinkDataType struct {
Id string `json:"id"` // Mã link thanh toán
OrderCode int `json:"orderCode"` // Mã đơn hàng
Amount int `json:"amount"` // Tổng tiền đơn hàng
AmountPaid int `json:"amontPaid"` // Số tiền đã thanh toán
AmountRemaining int `json:"amountRemaining"` // Số tiền cần thanh toán còn lại
Status string `json:"status"` // Trạng thái của link thanh toán
CreateAt string `json:"createAt"` // Thời gian tạo link thanh toán
Transactions []TransactionType `json:"transactions"` // Danh sách các giao dịch
CancellationReason *string `json:"cancellationReason"`// Lý do hủy link thanh toán nếu liên kết đã bị hủy
CancelAt *string `json:"cancelAt"` // Thời gian hủy link thanh toán
}

Kiểu dữ liệu TransactionType

type TransactionType struct {
Reference string `json:"reference"` // Mã tham chiếu của giao dịch
Amount int `json:"amount"` // Số tiền chuyển khoản của giao dịch
AccountNumber string `json:"accountNumber"` // Số tài khoản nhận tiền (tài khoản của kênh thanh toán)
Description string `json:"description"` // Nội dung chuyển khoản
TransactionDateTime string `json:"transactionDateTime"` // Thời gian giao dịch
VirtualAccountName *string `json:"virtualAccountName"` // Tên chủ tài khoản ảo
VirtualAccountNumber *string `json:"virtualAccountNumber"` // Số tài khoản ảo
CounterAccountBankId *string `json:"counterAccountBankId"` // Mã ngân hàng đối ứng
CounterAccountBankName *string `json:"counterAccountBankName"` // Tên ngân hàng đối ứng
CounterAccountName *string `json:"counterAccountName"` // Tên chủ tài khoản đối ứng
CounterAccountNumber *string `json:"counterAccountNumber"` // Số tài khoản đối ứng
}

Kiểu dữ liệu WebhookType

type WebhookType struct {
Code string `json:"code"` // Mã lỗi
Desc string `json:"desc"` // Mô tả lỗi
Data *WebhookDataType `json:"data"` // Dữ liệu webhook
Signature string `json:"signature"` // Chữ ký số của dữ liệu webhook, dùng để kiểm tra tính toàn vẹn của dữ liệu
}

Kiểu dữ liệu WebhookDataType

type WebhookDataType struct {
OrderCode int `json:"orderCode"` // Mã đơn hàng
Amount int `json:"amount"` // Số tiền chuyển khoản
Description string `json:"description"` // Mô tả đơn hàng, được dùng làm nội dung chuyển khoản
AccountNumber string `json:"accountNumber"` // Số tài khoản của kênh thanh toán
Reference string `json:"reference"` // Mã tham chiếu của giao dịch
TransactionDateTime string `json:"transactionDateTime"` // Thời gian giao dịch
Currency string `json:"currency"` // Đơn vị tiền tệ
PaymentLinkId string `json:"paymentLinkId"` // Mã link thanh toán
Code string `json:"code"` // Mã lỗi
Desc string `json:"desc"` // Mô tả lỗi
CounterAccountBankId *string `json:"counterAccountBankId"` // Mã ngân hàng đối ứng
CounterAccountBankName *string `json:"counterAccountBankName"` // Tên ngân hàng đối ứng
CounterAccountName *string `json:"counterAccountName"` // Tên chủ tài khoản đối ứng
CounterAccountNumber *string `json:"counterAccountNumber"` // Số tài khoản đối ứng
VirtualAccountName *string `json:"virtualAccountName"` // Tên chủ tài khoản ảo
VirtualAccountNumber *string `json:"virtualAccountNumber"` // Số tài khoản ảo
}