Tarlanpayments
Search
K

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

Төлем жүйесімен өзара іс-қимыл жасау үшін сұрау салуларға SHA256 алгоритмін пайдалана отырып қол қойылады.
Қолтаңбаны қалыптастыру үшін:
  1. 1.
    POST сауал жағдайында requestData сауалының денесі әліпби бойынша сұрыпталады және BASE64-те кодталады.
  2. 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. 3.
    Сауалдың (base64EncodedData) кодталған денесін және secret (мерчантқа төлем ұйымы береді) байланыстырамыз
  4. 4.
    SHA256 хеш-функциясын пайдалана отырып, алынған нәтижені хэштейміз (dataToSign)
  5. 5.
    Қолтаңбаны сауалының тақырыбына қосамыз Authorization: Bearer sign
"" бос жол мәні бар өрістерді қоспағанда, бүкіл сұрау мәтіні қолтаңбаға қосылады.
Additional_data өрісі қолтаңбаны қалыптастыруға қатыспайды
1
curl --location 'https://prapi.tarlanpayments.kz/transaction/...' \
2
--header 'Content-Type: application/json' \
3
--header 'Authorization: Bearer ff1a38a78ccca1b313ae172307e49112066ec2f5a1dfa2a76110104da3012896'
4
--data-raw '{}'
PHP
Python3
Golang
Dart
1
<?php
2
3
$requestData = [
4
"project_client_id" => "9999",
5
"merchant_id" => 1,
6
"project_id" => 1,
7
"additional_data" => ["key" => "This should be excluded"]
8
];
9
10
$secret = "12345";
11
12
// Remove the "additional_data" field from the request data
13
unset($requestData["additional_data"]);
14
15
// Sort the request data by keys in alphabetical order
16
ksort($requestData);
17
18
// Encode the sorted request data to JSON
19
$sortedJson = json_encode($requestData, JSON_UNESCAPED_SLASHES);
20
21
// Encode the sorted JSON to base64
22
$base64EncodedData = base64_encode($sortedJson);
23
24
// Concatenate the base64-encoded data with the secret
25
$dataToSign = $base64EncodedData . $secret;
26
27
// Hash the result to SHA-256
28
$sha256Hash = hash("sha256", $dataToSign);
29
30
echo $sha256Hash;
1
import json
2
import base64
3
import hashlib
4
5
request_data = {
6
"project_client_id": "9999",
7
"merchant_id": 1,
8
"project_id": 1,
9
"additional_data": {"key":"This should be excluded"}
10
}
11
12
secret = "12345"
13
14
# Remove the "additional_data" field from the request data
15
if "additional_data" in request_data:
16
del request_data["additional_data"]
17
18
# Sort the request data by keys in alphabetical order
19
sorted_data = json.dumps(
20
request_data,
21
sort_keys=True,
22
ensure_ascii=False,
23
separators=(',', ':'),
24
)
25
26
# Encode the sorted JSON to base64
27
base64_encoded_data = base64.b64encode(sorted_data.encode()).decode()
28
29
# Concatenate the base64-encoded data with the secret
30
data_to_sign = base64_encoded_data + secret
31
32
# Hash the result to SHA-256
33
sha256_hash = hashlib.sha256(data_to_sign.encode()).hexdigest()
34
35
print(sha256_hash)
1
package main
2
3
import (
4
"crypto/sha256"
5
"encoding/base64"
6
"encoding/json"
7
"fmt"
8
) // Тело берется из создания транзакции
9
10
type Request struct {
11
ProjectClientID string `json:"project_client_id"`
12
MerchantId uint64 `json:"merchant_id"`
13
ProjectId uint64 `json:"project_id"`
14
AdditionalData map[string]string `json:"additional_data"`
15
}
16
17
const secret = "12345"
18
19
func main() {
20
request := Request{
21
ProjectClientID: "9999",
22
MerchantId: 1,
23
ProjectId: 1,
24
AdditionalData: map[string]string{
25
"key": "This should be excluded",
26
},
27
}
28
29
notSortedJson, err := json.Marshal(&request)
30
if err != nil {
31
panic(err)
32
}
33
34
var notSorteddMap map[string]interface{}
35
36
37
if err = json.Unmarshal(notSortedJson, &notSorteddMap); err != nil {
38
panic(err)
39
}
40
41
delete(notSortedMap, "additional_data")
42
43
sortedJson, err := json.Marshal(&notSorteddMap)
44
if err != nil {
45
panic(err)
46
}
47
48
signData := base64.StdEncoding.EncodeToString(sortedJson)
49
50
sign := sha256.Sum256([]byte(signData + secret))
51
52
fmt.Printf("%x", sign)
53
54
}
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 modified 1mo ago