65 lines
1.5 KiB
Go
65 lines
1.5 KiB
Go
package santimpay
|
|
|
|
import (
|
|
"fmt"
|
|
"time"
|
|
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/config"
|
|
"github.com/SamuelTariku/FortuneBet-Backend/internal/domain"
|
|
"github.com/golang-jwt/jwt/v5"
|
|
)
|
|
|
|
type SantimPayClient interface {
|
|
GenerateSignedToken(payload domain.SantimTokenPayload) (string, error)
|
|
CheckTransactionStatus(id string)
|
|
}
|
|
|
|
type santimClient struct {
|
|
cfg *config.Config
|
|
}
|
|
|
|
func NewSantimPayClient(cfg *config.Config) SantimPayClient {
|
|
return &santimClient{
|
|
cfg: cfg,
|
|
}
|
|
}
|
|
|
|
func (c *santimClient) GenerateSignedToken(payload domain.SantimTokenPayload) (string, error) {
|
|
now := time.Now().Unix()
|
|
|
|
claims := jwt.MapClaims{
|
|
"amount": payload.Amount,
|
|
"paymentReason": payload.Reason,
|
|
"merchantId": c.cfg.SANTIMPAY.MerchantID,
|
|
"generated": now,
|
|
}
|
|
|
|
// Optional fields
|
|
if payload.PaymentMethod != "" {
|
|
claims["paymentMethod"] = payload.PaymentMethod
|
|
}
|
|
if payload.PhoneNumber != "" {
|
|
claims["phoneNumber"] = payload.PhoneNumber
|
|
}
|
|
|
|
token := jwt.NewWithClaims(jwt.SigningMethodES256, claims)
|
|
|
|
privateKey, err := jwt.ParseECPrivateKeyFromPEM([]byte(c.cfg.SANTIMPAY.SecretKey))
|
|
if err != nil {
|
|
return "", fmt.Errorf("invalid private key: %w", err)
|
|
}
|
|
|
|
signedToken, err := token.SignedString(privateKey)
|
|
if err != nil {
|
|
return "", fmt.Errorf("signing failed: %w", err)
|
|
}
|
|
|
|
return signedToken, nil
|
|
}
|
|
|
|
|
|
func (c *santimClient) CheckTransactionStatus(id string) {
|
|
// optional async checker — can log or poll transaction status
|
|
fmt.Println("Checking transaction status for:", id)
|
|
}
|