Quickstart
Instalasi
go get github.com/koriebruh/go-snap-biMembutuhkan Go 1.21 atau lebih baru.
Dapatkan access token
Setiap panggilan butuh bearer token terlebih dahulu. TokenManager
mengambil dan meng-cache-nya untuk Anda — pemanggil yang bersamaan
saat refresh berbagi satu request yang sedang berjalan, bukan
masing-masing mengirim requestnya sendiri.
tm := &snap.TokenManager{
BaseURL: "https://partner.example.com",
ClientKey: clientKey,
Signer: rsaPrivateKey, // crypto.Signer, misalnya dari snap.ParseRSAPrivateKeyPEM
}
accessToken, err := tm.AccessTokenB2B(ctx)
if err != nil {
// tangani error
}Lihat Authentication untuk detail B2B2C dan caching token.
Bangun header yang sudah ditandatangani
HeaderBuilder menyusun kumpulan header wajib SNAP — X-SIGNATURE,
X-TIMESTAMP, X-PARTNER-ID, dan sisanya — sekaligus menandatangani
request untuk Anda. Pilih tepat salah satu dari ClientSecret
(symmetric/HMAC) atau Signer (asymmetric/RSA), sesuai kesepakatan
dengan partner Anda saat registrasi.
hb := snap.HeaderBuilder{
Method: http.MethodPost,
EndpointURL: "https://partner.example.com/v1.0/balance-inquiry",
AccessToken: accessToken,
ClientKey: clientKey,
PartnerID: partnerID,
ExternalID: externalID,
ChannelID: channelID,
Symmetric: true,
ClientSecret: clientSecret,
}Lihat Headers & Signing untuk setiap field dan apa yang terjadi bila salah satunya tidak diisi.
Panggil sebuah endpoint
Setiap package domain memakai bentuk pemanggilan yang sama:
func Endpoint(ctx, *snap.Transport, snap.HeaderBuilder, Request) (Response, error).
transport := &snap.Transport{}
resp, err := balanceinfo.BalanceInquiry(ctx, transport, hb, balanceinfo.BalanceInquiryRequest{
PartnerReferenceNo: "2020102900000000000001",
AccountNo: "1234567890",
})
if err != nil {
// errors.Is(err, snap.ErrBadRequest), snap.ErrUnauthorized, dst. —
// satu sentinel per kelas HTTP-status kode respons SNAP. Lihat
// /id/concepts/errors.
}Anda tidak perlu mengisi hb.Body sendiri — fungsi pemanggil
melakukan marshal terhadap request bertipe itu dan mengaturnya
sendiri, jadi byte yang sama persis dipakai untuk signing maupun
request di wire.
Tangani notifikasi masuk
Beberapa alur (bulk cash-in, pembayaran QR/MPM, direct debit,
BI-FAST, RTGS, SKNBI) mengirimkan hasilnya sebagai panggilan HTTP
masuk ke layanan Anda, bukan sebagai response yang sinkron.
Verifikasi setiap request masuk dengan snap.ServerVerifier sebelum
memercayai isinya — lihat
Verifying inbound requests. Lewati langkah
ini bila Anda hanya memanggil endpoint read/inquiry.