A golang client to access the Azam Payment Gateway. Made with love for gophers ❤️.
AzamPay is specialized in the development of end-to-end online payment management solutions for companies operating in East Africa. They provide an API which allows developers to integrate their system's to Azampay's gateway.
This is a Golang client which significantly simplifies access and integration to Azampay's gateway.
- Make mobile network checkouts
- Make bank checkouts
- Manage callback URLs after a transaction is confirmed
- Return a list of registered partners of the provided merchant
- Create post checkout URLs for payments
- Transfer of money from other countries to Tanzania
- Lookup the name associated with a bank account or Mobile Money account
- Retrieve the status of a disbursement transaction made through AzamPay
- Sign up for a developer account with Azampay
- Register an app to get credentials
- Use the provided credentials to access the API.
Note: Ensure you have initialized your go code with go mod init
Install the package with the go get
command as shown below:
go get github.com/Golang-Tanzania/azampay@latest
Then import it as follows:
package main
import (
"github.com/Golang-Tanzania/azampay"
)
appName := "Your app name from azamm pay"
clientId := "Client id from azam pay"
clientSecret := "Client secret from azam pay"
tokenKey := "Your token from azam pay"
client, err := azampay.NewClient(appName, clientId, clientSecret, tokenKey)
if err != nil {
panic(err)
}
ctx := context.Background()
_, err = client.GetAccessToken(ctx)
if err != nil {
fmt.Println(err)
}
// example MNO checkout
exampleMNOCheckout := azampay.MnoPayload{
AccountNumber: "0654001122",
Amount: "2000",
Currency: "TZS",
ExternalID: "123",
Provider: "Tigo",
}
res, err := client.MnoCheckout(ctx, exampleMNOCheckout)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(res)
// example Bank checkout
exampleBankCheckout := azampay.BankCheckoutPayload{
Amount: "10000",
CurrencyCode: "TZS",
MerchantAccountNumber: "123321",
MerchantMobileNumber: "0700000000",
MerchantName: "somebody",
OTP: "1234",
Provider: "CRDB",
ReferenceID: "123",
}
res, err := client.BankCheckout(ctx, exampleBankCheckout)
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
// example get registered partners of the provided merchant
rp, err := client.PaymentPartners(ctx)
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
// example Post Checkout
payload := azampay.PostCheckoutPayload{
AppName: "example",
Amount: "10000",
ClientID: "1234",
Currency: "TZS",
ExternalID: "30characterslong",
Language: "SW",
RedirectFailURL: "yoururl",
RedirectSuccessURL: "yourrul",
RequestOrigin: "yourorigin",
VendorName: "VendorName",
VendorID: "e9b57fab-1850-44d4-8499-71fd15c845a0",
}
shoppingList := []azampay.Item{
{Name: "Mandazi"},
{Name: "Sambusa"},
{Name: "Mkate"},
}
payload.Cart.Items = shoppingList
res ,err := client.PostCheckout(ctx,payload)
if err != nil {
fmt.Println(res)
}
fmt.Println(res)
//example Transfer of money from other countries to Tanzania
disbursePayload := azampay.DisbursePayload{
Source: azampay.Source{
CountryCode: "US",
FullName: "John Doe",
BankName: "Bank of America",
AccountNumber: "123456789",
Currency: "USD",
},
Destination: azampay.Destination{
CountryCode: "TZ",
FullName: "Jane Doe",
BankName: "Azania Bank",
AccountNumber: "987654321",
Currency: "TZS",
},
TransferDetails: azampay.TransferDetails{
Type: "SWIFT",
Amount: 5000,
Date: time.Date(2023, 7, 11, 0, 0, 0, 0, time.UTC),
},
ExternalReferenceID: "123",
Remarks: "Payment for goods",
}
res ,err := client.Disburse(ctx, disbursePayload)
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
// example to lookup the name associated with a bank account or Mobile Money account.
res, err := client.NameLookUp(ctx, azampay.NameLookupPayload{
AccountNumber: "0654000000",
BankName: "Tigo",
})
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
// example to retrieve the status of a disbursement transaction made through AzamPay.
queries := azampay.TransactionStatusQueries{
BankName : "YOUR_MNO_NAME_HERE"
PgReferenceID : "YOUR_TRANSACTION_ID_HERE"
}
res, err := client.TransactionalStatus(ctx,queries )
if err != nil {
fmt.Println(err)
}
fmt.Println(res)
If you notice any issues with the package kindly notify us as soon as possible.
- Hopertz
- Avicenna
- All other contributors
The MIT License (MIT). Please see License File for more information.