A comprehensive, production-ready Go SDK for integrating with Indonesia's ASPI (Payment System Administration) services. This SDK provides a clean, type-safe interface for all ASPI endpoints including Virtual Account, MPM, Registration, Balance Inquiry, Transaction History, Transfer Credit, and Transfer Debit operations.
go get github.com/mseptiaan/snap-aspi-gopackage main
import (
"context"
"log"
"github.com/mseptiaan/snap-aspi-go/pkg/snap"
"github.com/mseptiaan/snap-aspi-go/pkg/types"
)
func main() {
// Initialize the SDK
client, err := snap.NewClient(snap.Config{
BaseURL: "https://sandbox.aspi-indonesia.or.id",
ClientID: "your-client-id",
ClientSecret: "your-client-secret",
PrivateKeyPath: "path/to/private_key.pem",
PublicKeyPath: "path/to/public_key.pem",
Environment: "sandbox",
})
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
// Create a Virtual Account
result, err := client.VirtualAccount().CreateVA(ctx, &types.CreateVAPayload{
PartnerServiceId: "12345",
CustomerNo: "CUST001",
VirtualAccountNo: "8808001234567890",
VirtualAccountName: "John Doe",
TotalAmount: types.NewAmount(100000, "IDR"),
ExpiredDate: "2024-12-31T23:59:59+07:00",
AdditionalInfo: &types.AdditionalInfo{
DeviceId: "DEVICE001",
Channel: "WEB",
},
})
if err != nil {
log.Printf("Error: %v", err)
return
}
log.Printf("VA Created: %+v", result)
}package main
import (
"context"
"log"
"github.com/mseptiaan/snap-aspi-go/pkg/snap"
"github.com/mseptiaan/snap-aspi-go/pkg/types"
)
func main() {
// Initialize the BCA client
client, err := snap.NewBCAClient(snap.Config{
BaseURL: "https://sandbox.aspi-indonesia.or.id",
ClientID: "your-bca-client-id",
ClientSecret: "your-bca-client-secret",
PrivateKeyPath: "path/to/private_key.pem",
PublicKeyPath: "path/to/public_key.pem",
Environment: "sandbox",
})
if err != nil {
log.Fatal(err)
}
ctx := context.Background()
// Create a BCA Virtual Account
result, err := client.CreateBCAVirtualAccount(ctx, &types.BCACreateVAPayload{
PartnerServiceId: "BCA12345",
CustomerNo: "BCA_CUSTOMER_001",
VirtualAccountNo: "8808001234567890",
VirtualAccountName: "BCA Customer",
TotalAmount: types.NewAmount(150000, "IDR"),
ExpiredDate: "2024-12-31T23:59:59+07:00",
AdditionalInfo: &types.AdditionalInfo{
DeviceId: "BCA_DEVICE_001",
Channel: "BCA_WEB",
},
// BCA-specific fields
BcaCustomerNo: "BCA123456789",
BcaSubCompany: "BCA Finance",
BcaTransactionType: "1",
})
if err != nil {
log.Printf("Error: %v", err)
return
}
log.Printf("BCA VA Created: %+v", result)
}BCA supports the following SNAP endpoints based on the BCA documentation:
- β
Access Token B2B -
/api/v1.0/access-token/b2b - β
Access Token B2B2C -
/api/v1.0/access-token/b2b2c
- β
Create VA -
/api/v1.0/bca/transfer-va/create-va - β
Update VA -
/api/v1.0/bca/transfer-va/update-va - β
Delete VA -
/api/v1.0/bca/transfer-va/delete-va - β
Inquiry VA -
/api/v1.0/bca/transfer-va/inquiry-va - β
General Inquiry -
/api/v1.0/bca/transfer-va/inquiry - β
Payment -
/api/v1.0/bca/transfer-va/payment - β
Status -
/api/v1.0/bca/transfer-va/status - β
Report -
/api/v1.0/bca/transfer-va/report - β
Update Status -
/api/v1.0/bca/transfer-va/update-status
- β
Balance Inquiry -
/api/v1.0/bca/balance-inquiry
- β
Account Inquiry (External) -
/api/v1.0/bca/account-inquiry-external - β
Account Inquiry (Internal) -
/api/v1.0/bca/account-inquiry-internal
- β
Trigger Transfer -
/api/v1.0/bca/trigger-transfer - β
Transfer Status -
/api/v1.0/bca/transfer/status - β
Intrabank Transfer -
/api/v1.0/bca/intrabank-transfer - β
Interbank Transfer -
/api/v1.0/bca/interbank-transfer - β
RTGS Transfer -
/api/v1.0/bca/rtgs-transfer - β
SKNBI Transfer -
/api/v1.0/bca/sknbi-transfer
- β
Generate QR MPM -
/api/v1.0/bca/qr/qr-mpm-generate - β
Decode QR MPM -
/api/v1.0/bca/qr/qr-mpm-decode - β
Apply OTT -
/api/v1.0/bca/qr/apply-ott - β
QR MPM Payment -
/api/v1.0/bca/qr/qr-mpm-payment - β
QR MPM Query -
/api/v1.0/bca/qr/qr-mpm-query - β
QR MPM Cancel -
/api/v1.0/bca/qr/qr-mpm-cancel - β
QR MPM Notify -
/api/v1.0/bca/qr/qr-mpm-notify - β
QR MPM Refund -
/api/v1.0/bca/qr/qr-mpm-refund
- β
Transaction History List -
/api/v1.0/bca/transaction-history-list - β
Transaction History Detail -
/api/v1.0/bca/transaction-history-detail - β
Bank Statement -
/api/v1.0/bca/bank-statement
- β
Direct Debit Payment -
/api/v1.0/bca/debit/payment-host-to-host - β
Direct Debit Status -
/api/v1.0/bca/debit/status - β
Direct Debit Cancel -
/api/v1.0/bca/debit/cancel - β
Direct Debit Refund -
/api/v1.0/bca/debit/refund - β
CPM Generate QR -
/api/v1.0/bca/qr/qr-cpm-generate - β
CPM Payment -
/api/v1.0/bca/qr/qr-cpm-payment
- β
Auth Payment -
/api/v1.0/bca/auth/payment - β
Auth Capture -
/api/v1.0/bca/auth/capture - β
Auth Void -
/api/v1.0/bca/auth/void
- β
BCA Account Binding -
/api/v1.0/bca/account-binding - β
BCA Card Registration -
/api/v1.0/bca/card-registration - β
BCA OTP Request -
/api/v1.0/bca/otp-request - β
BCA OTP Verification -
/api/v1.0/bca/otp-verification - β
BCA Bulk Transfer -
/api/v1.0/bca/bulk-transfer - β
BCA Bulk Transfer Status -
/api/v1.0/bca/bulk-transfer-status
BCA's implementation of the SNAP standard includes several unique features:
-
Enhanced Virtual Account Management:
- Support for sub-company segregation
- Multiple transaction types
- Custom expiry rules
- Detailed payment notifications
-
Advanced QR Code Capabilities:
- Dynamic and static QR support
- Merchant-specific QR customization
- Terminal-level QR generation
- Enhanced security features
-
Comprehensive Transaction Reporting:
- Detailed transaction status tracking
- Custom reference number formats
- BCA-specific transaction identifiers
- Extended transaction history
-
Specialized Transfer Options:
- Priority transfer flags
- Transfer type specifications
- Enhanced fee handling
- Specialized routing options
-
Security Enhancements:
- BCA-specific headers
- Additional signature requirements
- Enhanced OTP mechanisms
- Custom validation rules
- π Authentication: Automatic B2B and B2B2C token management
- π³ Virtual Accounts: Complete VA lifecycle management
- πͺ MPM Operations: Merchant payment management and transfers
- π± QR Codes: Dynamic QR code generation and notifications
- π€ Registration: User registration, card registration, and account binding
- π° Balance Inquiry: Account balance information
- π Transaction History: Transaction history and bank statements
- πΈ Transfer Credit: Account inquiry, transfers, and top-ups
- π³ Transfer Debit: Direct debit, CPM, auth payment, and BI-FAST
- π Auto-retry: Built-in retry logic with exponential backoff
- π Performance: Connection pooling and request optimization
- π‘οΈ Security: RSA signature validation and secure communication
- π Type Safety: Full Go type definitions for all API operations
- π¦ Multi-Bank: Support for different bank endpoints including BCA-specific integration
βββββββββββββββββββ
β Your App β
βββββββββββ¬ββββββββ
β
βββββββββββΌββββββββ
β SNAP SDK β
βββββββββββββββββββ€
β β’ VirtualAccountβ
β β’ MPM β
β β’ Registration β
β β’ BalanceInquiryβ
β β’ TxHistory β
β β’ TransferCreditβ
β β’ TransferDebit β
β β’ Auth β
β β’ BCA β β New BCA-specific integration
βββββββββββ¬ββββββββ
β
βββββββββββΌββββββββ
β ASPI API β
βββββββββββββββββββ
export ASPI_CLIENT_ID="your-client-id"
export ASPI_CLIENT_SECRET="your-client-secret"
export ASPI_PRIVATE_KEY_PATH="/path/to/private_key.pem"
export ASPI_PUBLIC_KEY_PATH="/path/to/public_key.pem"
export ASPI_ENVIRONMENT="sandbox" # or "production"
# BCA-specific environment variables
export BCA_CLIENT_ID="your-bca-client-id"
export BCA_CLIENT_SECRET="your-bca-client-secret"The SDK supports different bank endpoints through bank presets or custom configurations:
// BCA Bank
client, err := snap.NewClientForBank(snap.Config{
BaseURL: "https://sandbox.aspi-indonesia.or.id",
ClientID: "bca-client-id",
ClientSecret: "bca-client-secret",
PrivateKeyPath: "path/to/private_key.pem",
}, "BCA")
// Or use the specialized BCA client
bcaClient, err := snap.NewBCAClient(snap.Config{
BaseURL: "https://sandbox.aspi-indonesia.or.id",
ClientID: "bca-client-id",
ClientSecret: "bca-client-secret",
PrivateKeyPath: "path/to/private_key.pem",
})- BCA (Bank Central Asia) - Enhanced with BCA-specific endpoints and types
- BNI (Bank Negara Indonesia)
- BRI (Bank Rakyat Indonesia)
- MANDIRI (Bank Mandiri)
- CIMB (CIMB Niaga)
- PERMATA (Bank Permata)
Check out the examples directory for complete examples of using the SDK:
examples/basic/main.go: Basic usage examplesexamples/multi_bank/main.go: Multi-bank integration examplesexamples/custom_endpoints/main.go: Custom endpoint configuration examplesexamples/complete/main.go: Comprehensive examples of all featuresexamples/bca/main.go: BCA-specific integration examples
This project is licensed under the MIT License - see the LICENSE file for details.