Tarlanpayments
Қаз
Қаз
  • Төлем шлюзі
    • Жалпы ақпарат
      • Төлемді жүргізу құрылымы
      • Екі сатылы төлем жүргізу құрылымы
      • Операциялардың түрлері
      • 3D-Secure
      • PCI DSS
    • Транзакция түрлері
    • Жүйе жауаптарының құрылымы
    • Қате кодтары
    • Транзакциялар мәртебелері
    • Қолтаңбаны қалыптастыру
    • Қосымша параметрлер
    • Төлем нысанымен өзара іс-қимыл
      • Ақша қаражатын қабылдауға бастамашылық жасау
      • Ақша қаражатын шығаруға бастамашылық жасау
      • Картаны байластыру
      • Iframe
    • Төлем нысанынсыз төлемдер
      • One click
    • Көмекші әдістер
      • Байластырылған пайдаланушы картасын жою
      • Транзакция мәртебесін тексеру
      • Карталар тізімін алу
      • Төлемді қайтару
      • Жоғарғы комиссияның есебі
    • Smart Pay
      • Google pay
    • Төлем жүйесінің Webhook
      • Төлем мәртебесі
      • Ақы төлеуді жүргізуге әзірлік
    • CMS
      • Tilda Publishing
    • Өзгерістер жиынтығы
  • AGWS
    • Жүйе жауаптарының құрылымы
      • Қолтаңбаны қалыптастыру
        • Golang-та қолтаңбаны қалыптастыру мысалы:
        • python3-тегі қолтаңбаны қалыптастыру мысалы:
      • [POST] /showcase-gateway/api/v1/test/check
        • Parameters
        • Responses
      • [POST] /showcase-gateway/api/v1/test/cash-in
        • Parameters
        • Responses
    • [POST] /showcase-gateway/api/v1/test/status
      • Responses
      • Parameters
    • Транзакция мәртебелерінің анықтамалығы
    • Аккаунт күйі кодтарының анықтамалығы
    • Қате кодтары
Powered by GitBook
On this page
  1. Төлем шлюзі

Қолтаңбаны қалыптастыру

Төлем жүйесімен өзара іс-қимыл жасау үшін сұрау салуларға SHA256 алгоритмін пайдалана отырып қол қойылады.

Қолтаңбаны қалыптастыру үшін:

  1. POST сауал жағдайында requestData сауалының денесі әліпби бойынша сұрыпталады және BASE64-те кодталады.

  2. GET сауал жағдайында, Query params-ты JSON-ға түрлендіреміз. https://prapi.tarlanpayments.kz/transaction/api/v1/system/client/cards?merchant_id=123&project_id=124&project_client_id=999 В: { "merchant_id" : 123, "project_client_id" : "999", "project_id" : 124} Түрлендіргеннен кейін әліпби бойынша сұрыптаймыз және BASE64-те кодтаймыз.

  3. Сауалдың (base64EncodedData) кодталған денесін және secret (мерчантқа төлем ұйымы береді) байланыстырамыз

  4. SHA256 хеш-функциясын пайдалана отырып, алынған нәтижені хэштейміз (dataToSign)

  5. Қолтаңбаны сауалының тақырыбына қосамыз Authorization: Bearer sign

"" бос жол мәні бар өрістерді қоспағанда, бүкіл сұрау мәтіні қолтаңбаға қосылады.

Additional_data өрісі қолтаңбаны қалыптастыруға қатыспайды

curl --location 'https://prapi.tarlanpayments.kz/transaction/...' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer ff1a38a78ccca1b313ae172307e49112066ec2f5a1dfa2a76110104da3012896'
--data-raw '{}'
<?php

$requestData = [
    "project_client_id" => "9999",
    "merchant_id" => 1,
    "project_id" => 1,
    "additional_data" => ["key" => "This should be excluded"]
];

$secret = "12345";

// Remove the "additional_data" field from the request data
unset($requestData["additional_data"]);

// Sort the request data by keys in alphabetical order
ksort($requestData);

// Encode the sorted request data to JSON
$sortedJson = json_encode($requestData, JSON_UNESCAPED_SLASHES);

// Encode the sorted JSON to base64
$base64EncodedData = base64_encode($sortedJson);

// Concatenate the base64-encoded data with the secret
$dataToSign = $base64EncodedData . $secret;

// Hash the result to SHA-256
$sha256Hash = hash("sha256", $dataToSign);

echo $sha256Hash;
import json
import base64
import hashlib

request_data = {
    "project_client_id": "9999",
    "merchant_id": 1,
    "project_id": 1,
    "additional_data": {"key":"This should be excluded"}
}

secret = "12345"

# Remove the "additional_data" field from the request data
if "additional_data" in request_data:
    del request_data["additional_data"]

# Sort the request data by keys in alphabetical order
sorted_data = json.dumps(
        request_data,
        sort_keys=True,
        ensure_ascii=False,
        separators=(',', ':'),
    )

# Encode the sorted JSON to base64
base64_encoded_data = base64.b64encode(sorted_data.encode()).decode()

# Concatenate the base64-encoded data with the secret
data_to_sign = base64_encoded_data + secret

# Hash the result to SHA-256
sha256_hash = hashlib.sha256(data_to_sign.encode()).hexdigest()

print(sha256_hash)
package main

import (
	"crypto/sha256"
	"encoding/base64"
	"encoding/json"
	"fmt"
)  // Тело берется из создания 

type Request struct {
	ProjectClientID string `json:"project_client_id"`
	MerchantId      uint64 `json:"merchant_id"`
	ProjectId       uint64 `json:"project_id"`
	AdditionalData  map[string]string `json:"additional_data"`
}

const secret = "12345"

func main() {
	request := Request{
		ProjectClientID: "9999",
		MerchantId:      1,
		ProjectId:       1,
		AdditionalData: map[string]string{
			"key": "This should be excluded",
		},
	}

	notSortedJson, err := json.Marshal(&request)
	if err != nil {
		panic(err)
	}

	var notSorteddMap map[string]interface{}

	
	if err = json.Unmarshal(notSortedJson, &notSorteddMap); err != nil {
		panic(err)
	}

	delete(notSortedMap, "additional_data")
	
	sortedJson, err := json.Marshal(&notSorteddMap)
	if err != nil {
		panic(err)
	}

	signData := base64.StdEncoding.EncodeToString(sortedJson)
	
	sign := sha256.Sum256([]byte(signData + secret))

	fmt.Printf("%x", sign)

}
const paymentSecretKey = "123";

String hashedSecretKey({
  required Map<String, dynamic> requestData,
}) {
  // Sort the request data by keys in alphabetical order
  List<MapEntry<String, dynamic>> sortedEntries = requestData.entries.toList()
    ..sort((a, b) => a.key.compareTo(b.key));
  Map<String, dynamic> sortedData = Map.fromEntries(sortedEntries);

  // Sort the request data by keys in alphabetical order
  String encodedData = json.encode(sortedData);

  // Encode the sorted JSON to base64
  String base64EncodedData = base64.encode(Utf8Encoder().convert(encodedData));

  // Concatenate the base64-encoded data with the secret
  String dataToSign = base64EncodedData + paymentSecretKey;

  // Hash the result to SHA-256
  Digest sha256Hash = sha256.convert(Utf8Encoder().convert(dataToSign));

  final result = sha256Hash.toString();
  log('auth token $result');

  return result;
}

Last updated 8 months ago