Skip to content

mohammadv184/gopayment

Repository files navigation

GoPayment

Go Reference GitHub license GitHub issues codecov Go Report Card Build Status

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.