Add QR Payment

This commit is contained in:
aditya.siregar
2024-08-06 16:21:55 +07:00
parent 67b4bb9563
commit 53505cf2ab
10 changed files with 141 additions and 18 deletions
+44 -3
View File
@@ -39,10 +39,10 @@ func (c *ClientService) CreatePayment(order entity.MidtransRequest) (*entity.Mid
Client: c.client,
}
paymentMethod := []midtrans.PaymentType{}
var paymentMethod []midtrans.PaymentType
if order.PaymentMethod == "GOPAY" {
paymentMethod = append(paymentMethod, midtrans.SourceGopay)
if order.PaymentMethod == "QRIS" {
paymentMethod = []midtrans.PaymentType{midtrans.SourceGopay}
}
snapReq := &midtrans.SnapReq{
@@ -83,3 +83,44 @@ func (c ClientService) getProductItems(products []entity.OrderItem) []midtrans.I
return items
}
func (c *ClientService) CreateQrisPayment(order entity.MidtransRequest) (*entity.MidtransQrisResponse, error) {
coreGateway := midtrans.CoreGateway{
Client: c.client,
}
req := &midtrans.ChargeReq{
PaymentType: midtrans.SourceGopay,
TransactionDetails: midtrans.TransactionDetails{
OrderID: order.PaymentReferenceID,
GrossAmt: order.TotalAmount,
},
}
// Request charge and retrieve response
resp, err := coreGateway.Charge(req)
if err != nil {
logger.GetLogger().Error(fmt.Sprintf("error when creating QRIS payment: %v", err))
return nil, err
}
// Extract QR code URL from response actions
var qrCodeURL string
for _, action := range resp.Actions {
if action.Name == "generate-qr-code" {
qrCodeURL = action.URL
break
}
}
if qrCodeURL == "" {
logger.GetLogger().Error("error: QR code URL not provided in response")
return nil, fmt.Errorf("QR code URL not provided in response")
}
return &entity.MidtransQrisResponse{
QrCodeUrl: qrCodeURL,
OrderID: order.PaymentReferenceID,
Amount: order.TotalAmount,
}, nil
}
+4
View File
@@ -72,6 +72,10 @@ func (r *PaymentRepository) FindByOrderAndPartnerID(ctx context.Context, orderID
// FindByReferenceID retrieves a payment record by its reference ID
func (r *PaymentRepository) FindByReferenceID(ctx context.Context, db *gorm.DB, referenceID string) (*entity.Payment, error) {
payment := new(entity.Payment)
if db == nil {
db = r.db
}
if err := db.WithContext(ctx).Where("reference_id = ?", referenceID).First(payment).Error; err != nil {
logger.ContextLogger(ctx).Error("error when finding payment by reference ID", zap.Error(err))
return nil, err
+1
View File
@@ -192,6 +192,7 @@ type WalletRepository interface {
type Midtrans interface {
CreatePayment(order entity.MidtransRequest) (*entity.MidtransResponse, error)
CreateQrisPayment(order entity.MidtransRequest) (*entity.MidtransQrisResponse, error)
}
type Payment interface {