Monnify payment gateway with Golang
Tags: monnify, go, paymentgateway, tutorial
Published: 2022-07-21 08:02:00

**Note:** This article was written based on the v1.0.0 of the [monnify-go](https://github.com/iqquee/monnify-go) library and the library is now in its v2.0.0. You can click [here](https://dev.to/iqquee/monnify-payment-gateway-with-golang-v200-g82) to view the recent article on the v2.0.0

In today's article, I would be showing you how to integrate the **monnify** payment gateway into your **Go project**.
Monnify is a payment gateway for businesses to accept payments from customers, either on a recurring or one-time basis. Monnify offers an easier, faster and cheaper way for businesses to get paid on their web and mobile applications using convenient payment methods for customers with the highest success rates obtainable in Nigeria.
We would be using a monnify library I created for the implementation. Here's the github link to the library https://github.com/iqquee/monnify-go

## Installation
To install this monnify package, you need to install [Go](https://golang.org/) and set your Go workspace first.

- You can use the below Go command to install monnify-go
```sh
$ go get -u github.com/iqquee/monnify-go
```

- Import it in your code:
```sh
import "github.com/iqquee/monnify-go"
```

## Accept Payment
Use this to accept payments from customers
```go
package main

import (
	"fmt"
	monnify "github.com/iqquee/monnify-go"
	"github.com/iqquee/monnify-go/transaction"
)

func main() {
	apiKey := ""
	secretKey := ""
	baseUrl := "https://sandbox.monnify.com" // for test
	monnify.Options(apiKey, secretKey, baseUrl)

	amount := 100 
	paymentReference := "ref123"
	paymentDesc := "test payment"
	currencyCode := "NGN"
	contractCode := ""
	customerName := ""
	customerEmail := ""
	customerNumber := "" 
	redirectUrl := "https://google.com" // test redirect url
	res, status, err := transaction.AcceptPayment(amount,paymentReference , paymentDesc, currencyCode, contractCode, customerName, customerEmail, customerNumber, redirectUrl)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(status)
	fmt.Println(res)
}
```
## Get Accepted Payment Status
Use this to get accepted payment status
```go
package main

import (
	"fmt"
	monnify "github.com/iqquee/monnify-go"
	"github.com/iqquee/monnify-go/transaction"
)

func main() {
	apiKey := ""
	secretKey := ""
	baseUrl := "https://sandbox.monnify.com" // for test
	monnify.Options(apiKey, secretKey, baseUrl)

	paymentReference := "ref123"
	res, status, err := transaction.GetTransactionStatus(paymentReference)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(status)
	fmt.Println(res)
}
```
## Initiate Single Transfer
Use this to initiate single transfers
```go
package main

import (
	"fmt"
	monnify "github.com/iqquee/monnify-go"
	"github.com/iqquee/monnify-go/transaction"
)

func main() {
	apiKey := ""
	secretKey := ""
	baseUrl := "https://sandbox.monnify.com" // for test
	monnify.Options(apiKey, secretKey, baseUrl)

	amount := 100
	paymentReference := "ref123"
	narration := "example transaction"
	bankCode := "058" // for GT Bank
	currency := "NGN"
	accountNumber := ""
	walletId := ""
	res, status, err := transaction.InitiateSingleTransfer(amount, paymentReference, narration, currency, bankCode, accountNumber, walletId)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(status)
	fmt.Println(res)
}
```

## Initiate Single Transfer Status
Use this to get the initiated single transfer status
```go
package main

import (
	"fmt"
	monnify "github.com/iqquee/monnify-go"
	"github.com/iqquee/monnify-go/transaction"
)

func main() {
	apiKey := ""
	secretKey := ""
	baseUrl := "https://sandbox.monnify.com" // for test
	monnify.Options(apiKey, secretKey, baseUrl)

	paymentReference := "ref123"
	res, status, err := transaction.GetInitiateSingleTransferStatus(paymentReference)
	if err != nil {
		fmt.Println(err)
	}

	fmt.Println(status)
	fmt.Println(res)
}
```
This package [monnify-go](https://github.com/iqquee/monnify-go) is in it stable v1.0.0 and the methods above is what this library offers now. But as time goes on, all the features monnify offers would be added to this package.