Check account status

ATTENTION: New Error Response Format In the near future, errors in our system will be classified as expected and unexpected. Depending on the type of error, the format of the JSON response will be changed. Please review the new formats on the Error Codes page. This change will be applied to all APIs in the AGWS system except ''Make a payment' and 'Checking the refill status'.

Click here to view the old and new JSON error responses. Please take note of this update and ensure your system is ready for these changes, if necessary.

Checking account status by username

POST https://agwsapi.tarlanpayments.kz/showcase-gateway/api/v1/user/check

Headers

Name
Value

Content-Type

application/json

X-Signature

Body

Name
Type
Description

username*

String

User ID

agent*

String

Showcase code in the Tarlanpayments system

project*

String

Project Code assigned to Tarlanpayments

service_code*

String

Service ID on the showcase side

Response

Name
Type
Description

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

Integer

Error code

-message

String

Error description

-account_status

Integer

Account status. For more information, see the account status code

-additional_data

Object

Additional information returned depending on the service (Depending on the service, this field may vary)

{
    "status": true,
    "status_code": 0,
    "message": "Success",
    "result":{
        "error_code" : 0,
        "message": "This account is active",
        "account_status": 1,
        "additional_data": {}
    }
}

Examples of error responses before the changes

{
    "status": false,
    "status_code": 1407,
    "message": "Cache: item not found",
    "result": {}
}

Examples of error responses after the changes

{
    "status": true,
    "status_code": 0,
    "message": "Success",
    "result": {
        "error_code": 1407,
        "message": "Cache: item not found",
        "data": {},
        "additional_data": {}
    }
}

Account check

package main

import (
	"bytes"
	"crypto/sha256"
	"encoding/base64"
	"encoding/hex"
	"encoding/json"
	"io/ioutil"
	"log"
	"net/http"
	"sort"
)

// Response представляет ответ от сервера

// Body представляет структуру запроса
type Body struct {
	Agent       string `json:"agent"`
	UserName    string `json:"username"`
	Project     string `json:"project"`
	ServiseCode string `json:"service_code"`
}

// MakeSign генерирует подпись для HTTP-запроса
func MakeSign(body Body, secretKey string) (string, error) {
	// Конвертируем структуру в map для сортировки
	dataMap := make(map[string]interface{})
	jsonData, _ := json.Marshal(body)
	json.Unmarshal(jsonData, &dataMap)

	// Удаляем "additional_data", если нужно
	delete(dataMap, "additional_data")

	// Сортируем ключи по алфавиту
	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/user/check"
	// Secret Проекта
	SecretKey := "12345"

	// Тело запроса
	requestBody := Body{
		Agent:       "agent",
		UserName:    "login",
		Project:     "project",
		ServiseCode: "servise",
	}

	// Генерация заголовка
	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