package main
import (
"crypto/hmac"
"crypto/sha256"
"encoding/base64"
"encoding/json"
"fmt"
"io/ioutil"
"net/http"
"net/url"
"strings"
"time"
)
const (
BASE_URL = "https://aten.fonbnk-services.com"
ENDPOINT = "/api/pay-widget-merchant/price"
CLIENT_ID = ""
CLIENT_SECRET = ""
)
func padBase64(base64String string) string {
return base64String + strings.Repeat("=", (4-len(base64String)%4)%4)
}
func generateSignature(clientSecret, timestamp, endpoint string) (string, error) {
clientSecretPadded := padBase64(clientSecret)
decodedSecret, err := base64.StdEncoding.DecodeString(clientSecretPadded)
if err != nil {
return "", err
}
message := fmt.Sprintf("%s:%s", timestamp, endpoint)
h := hmac.New(sha256.New, decodedSecret)
h.Write([]byte(message))
signature := base64.StdEncoding.EncodeToString(h.Sum(nil))
return signature, nil
}
func main() {
timestamp := fmt.Sprintf("%d", time.Now().UnixNano()/int64(time.Millisecond))
queryParams := url.Values{
"country": {"NG"},
"amount": {"10"},
"currency": {"usdc"},
"network": {"CELO"},
"asset": {"CUSD"},
"provider": {"bank_transfer"},
}
endpoint := fmt.Sprintf("%s?%s", ENDPOINT, queryParams.Encode())
signature, err := generateSignature(CLIENT_SECRET, timestamp, endpoint)
if err != nil {
fmt.Println("Error generating signature:", err)
return
}
client := &http.Client{}
req, err := http.NewRequest("GET", BASE_URL+endpoint, nil)
if err != nil {
fmt.Println("Error creating request:", err)
return
}
req.Header.Set("Content-Type", "application/json")
req.Header.Set("x-client-id", CLIENT_ID)
req.Header.Set("x-timestamp", timestamp)
req.Header.Set("x-signature", signature)
resp, err := client.Do(req)
if err != nil {
fmt.Println("Error making request:", err)
return
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
fmt.Println("Error reading response body:", err)
return
}
var data map[string]interface{}
if err := json.Unmarshal(body, &data); err != nil {
fmt.Println("Error unmarshalling response:", err)
return
}
fmt.Println(data)
}