
GoPayment

Multi Gateway Payment Package for Golang.
List of contents
List of available drivers
Installation
go get -u github.com/mohammadv184/gopayment
How to use
Purchase
In order to pay the invoice, we need the payment transactionId.
We purchase the invoice to retrieve transaction id:
// Configure the Gateway Driver
gateway:=&payping.Driver{
Callback: "http://example.test/callback",
Token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
}
// Create new Payment.
payment := gopayment.NewPayment(gateway)
// Set Invoice Amount.
payment.Amount(amountInt)
// Set Invoice Description.
payment.Description("description")
// Purchase the invoice.
err = payment.Purchase()
if err != nil {
fmt.Println(err)
}
// Get Transaction ID
transactionID := payment.GetTransactionID()
Pay
After purchasing the invoice, we can redirect the user to the bank payment page:
func pay() gin.HandlerFunc {
return func(c *gin.Context) {
// Configure the Gateway Driver
gateway:=&payping.Driver{
Callback: "http://example.test/callback",
Token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
}
// Create new Payment.
payment := gopayment.NewPayment(gateway)
// Set Invoice Amount.
payment.Amount(amountInt)
// Set Invoice Description.
payment.Description("description")
// Purchase the invoice.
err = payment.Purchase()
if err != nil {
fmt.Println(err)
}
// Get Transaction ID And Save it to the database.
transactionID := payment.GetTransactionID()
// Redirect the user to the bank payment page.
payUrl := payment.PayURL()
c.Redirect(http.StatusFound, payUrl)
}
}
Verify payment
When user has completed the payment, the bank redirects them to your website, then you need to verify your payment to make sure that the payment is valid.:
// Configure the Gateway Driver
gateway:=&payping.Driver{
Callback: "http://example.test/callback",
Token: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
}
refId := c.Query("refId")
VerifyRequest:=&payping.VerifyRequest{
Amount: "100",
RefID: refID,
}
if receipt, err := gateway.Verify(VerifyRequest); err == nil {
c.JSON(200, gin.H{
"status": "success",
"data": receipt.GetReferenceID(),
"date": receipt.GetDate().String(),
"card": receipt.GetDetail("cardNumber"),
"gateway": receipt.GetDriver(),
})
} else {
c.JSON(200, gin.H{
"message": "error " + err.Error(),
})
}
Working with invoices
When you make a payment, the invoice is automatically generated within the payment
In your code, use it like the below:
// Create new Payment.
payment := gopayment.NewPayment(gateway)
// Get the invoice.
invoice:=payment.GetInvoice()
// Set Invoice Amount.
invoice.SetAmount(1000)
// Set Invoice Description.
invoice.SetDescription("description")
// Set Invoice Deatils.
invoice.Detail("phone","0912345678")
invoice.Detail("email","example@example.com")
Available methods:
SetUuid: set the invoice unique id
GetUuid: retrieve the invoice current unique id
Detail: attach some custom details into invoice
GetDetail: retrieve the invoice detail
GetDetails: retrieve all custom details
SetAmount: set the invoice amount
GetAmount: retrieve invoice amount
SetTransactionID: set invoice payment transaction id
GetTransactionID: retrieve payment transaction id
SetDescription: set invoice Description
GetDescription: retrieve payment Description
Working with receipts
When you verify a payment, the receipt is automatically generated.
In your code, use it like the below:
// Verify the Payment.
receipt := gateway.verify(...)
// Get the Payment Reference ID.
refId := receipt.GetReferenceID()
// Get the payment date .
paymentDate:=receipt.GetDate()
// Get the payment driver name.
paymentDriver:=receipt.GetDriver()
// Get payment Deatils.
cardNum:=receipt.GetDetail("cardNumber")
cardHNum:=receipt.GetDetail("HashedCardNumber")
Available methods:
GetReferenceID: retrieve the payment reference id
GetDriver: retrieve the payment driver name
Detail: attach some custom details into invoice
GetDate: retrieve payment date
GetDetail: retrieve the invoice detail
GetDetails: retrieve all custom details
Example
There is an example project using GoPayment you can find at GoPayment-Example Repo It contains a payment implementation.
Contributing
Please see CONTRIBUTING and CONDUCT for details.
Security
If you discover any security related issues, please email mohammadv184@gmail.com instead of using the issue tracker.
Credits
License
The MIT License (MIT). Please see License File for more information.