Yimaru-BackEnd/internal/services/santimpay/client.go

54 lines
1.2 KiB
Go

package santimpay
import (
"fmt"
"time"
"github.com/SamuelTariku/FortuneBet-Backend/internal/config"
"github.com/golang-jwt/jwt/v5"
)
type SantimPayClient interface {
GenerateSignedToken(amount int, reason string) (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(amount int, reason string) (string, error) {
now := time.Now().Unix()
claims := jwt.MapClaims{
"amount": amount,
"paymentReason": reason,
"merchantId": c.cfg.SANTIMPAY.MerchantID,
"generated": now,
}
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)
}