gopayment

multi gateway payment package for Golang

MIT License

Stars
21
Committers
4

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","[email protected]")

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 [email protected] instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.