Make a payment
POST
https://agwsapi.tarlanpayments.kz/showcase-gateway/api/v1/action/cash-in
Headers
Content-Type
application/json
X-Signature
Body
username*
String
User ID
amount*
Float
Transaction amount
agent*
String
Showcase code in Tarlan system
project*
String
Project Code assigned by Tarlan
service_code*
String
Service ID on the showcase side
external_id*
String
Unique payment identifier on the side of the storefront
callback_url
String
The URL to which the request about the operation status will be sent.
datetime*
String
Time of payment initiation in the storefront system. ISO 8601 Current Timestamp format
Response
status
bool
Request processing status
status_code
uint
Error code
message
string
Description of error
result
Object
The result of a query that contains information
-error_code
uint
Error code
-message
String
Error description
-data
Object
Information about data
--status_code
String
Transaction status code
--status_message
String
Description of transaction status
--username
String
User ID
--amount
Float
Amount credited
--datetime
String
Time of payment initiation in the storefront system. ISO 8601 Current Timestamp format
--project
String
Project Code assigned by Tarlan
--service_code
String
Service ID on the showcase side
--external_id
String
Payment ID on the showcase side
--fail_reason
Object
---code
Int
Rejection Reason Code
---massage
String
Description of the Operation Rejection Reason
{
"status": true,
"status_code": 0,
"message": "Success",
"result": {
"error_code": 0,
"message": "",
"data": {
"status_code": "2",
"status_message": "Transaction successfully processed",
"username": "12345",
"amount": 1000,
"datetime": "2024-01-01T00:00:00",
"project": "project",
"service_code": "service",
"external_id": "200001"
}
}
}
Make Payment
package main
import (
"bytes"
"crypto/sha256"
"encoding/base64"
"encoding/hex"
"encoding/json"
"io/ioutil"
"log"
"net/http"
"sort"
"time"
)
// Response представляет ответ от сервера
// Body представляет структуру запроса
type Body struct {
UserName string `json:"username"`
Agent string `json:"agent"`
Project string `json:"project"`
ServiseCode string `json:"service_code"`
Amount float64 `json:"amount"`
ExternalID string `json:"external_id"`
DateTime string `json:"datetime"`
}
// MakeSign генерирует подпись для HTTP-запроса
func MakeSign(body Body, secretKey string) (string, error) {
// Конвертируем структуру в map для сортировки
dataMap := make(map[string]interface{})
jsonData, _ := json.Marshal(body)
json.Unmarshal(jsonData, &dataMap)
// Сортируем ключи по алфавиту
keys := make([]string, 0, len(dataMap))
for key := range dataMap {
keys = append(keys, key)
}
sort.Strings(keys)
// Создаем отсортированный JSON
sortedData := make(map[string]interface{})
for _, key := range keys {
sortedData[key] = dataMap[key]
}
// Преобразуем отсортированные данные в JSON
sortedJson, err := json.Marshal(sortedData)
if err != nil {
return "", err
}
// Кодируем JSON в base64
base64EncodedData := base64.StdEncoding.EncodeToString(sortedJson)
// Конкатенируем base64-данные с секретом
dataToSign := base64EncodedData + secretKey
// Хешируем SHA-256
sha256Hash := sha256.Sum256([]byte(dataToSign))
sign := hex.EncodeToString(sha256Hash[:])
return sign, nil
}
// CheckLogin отправляет POST-запрос и обрабатывает ответ
func CheckLogin(body Body, url, signature string) (string, error) {
// Конвертируем структуру в JSON для отправки
jsonData, err := json.Marshal(body)
if err != nil {
return "", err
}
// Создаем и отправляем POST-запрос
req, err := http.NewRequest("POST", url, bytes.NewBuffer(jsonData))
if err != nil {
return "", err
}
// Устанавливаем подпись запроса
req.Header.Set("X-Signature", signature)
req.Header.Set("Content-Type", "application/json")
client := &http.Client{}
resp, err := client.Do(req)
if err != nil {
return "", err
}
defer resp.Body.Close()
// Чтение и обработка ответа
bodyBytes, err := ioutil.ReadAll(resp.Body)
if err != nil {
return "", err
}
response := string(bodyBytes)
// Вывод ответа и результата
return response, nil
}
func main() {
// URL Запроса
RequestURL := "https://agwsapi.tarlanpayments.kz/showcase-gateway/api/v1/action/cash-in"
// Secret Проекта
SecretKey := "v7JsYryRfhd4paMFPnHczU"
// Тело запроса
requestBody := Body{
UserName: "login",
Agent: "agent",
Project: "project",
ServiseCode: "xbetTest",
Amount: 10.01,
ExternalID: "reference_id",
DateTime: time.Now().Format(time.RFC3339),
}
// Генерация заголовка
sign, err := MakeSign(requestBody, SecretKey)
if err != nil {
log.Println("Error generating signature:", err)
return
}
// Отправка запроса
Response, err := CheckLogin(requestBody, RequestURL, sign)
if err != nil {
log.Panic("Error sending request", err)
return
}
if Response != "" {
log.Println(Response)
}
}
Last updated