Add QR Payment
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user