Перейти к основному содержимому

Платёжное решение TH 2

Обзор

  • Создание платежей
  • Создание выплат

Настройка сертификата

По ссылке https://merchant.alikassa.com/cabinet/form/setting-api-certs сгенерируйте «API сертификат на платежи», сохраните архив, распакуйте

Получите:

  • password.txt
  • private.pem
  • public.pem

Мы сохраняем у себя только public.pem для проверки подписи.

Генерация подписи

$data = json_encode($data);

$privateKey = openssl_pkey_get_private(
file_get_contents('private.pem'),
file_get_contents('password.txt')
);

if ($privateKey === false) {
throw new \Exception('Ошибка сертификата.');
}

openssl_sign($data, $sign, $privateKey);
$sign = base64_encode($sign);
import { readFileSync } from 'fs';
import { createSign } from 'crypto';

const dataStr = JSON.stringify(data);
const key = readFileSync('private.pem', 'utf8');
const passphrase = readFileSync('password.txt', 'utf8').trim();
const signer = createSign('SHA1');
signer.update(dataStr);
signer.end();
const sign = signer.sign({ key, passphrase }, 'base64');
import json, base64
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding

data_bytes = json.dumps(data).encode()
with open('password.txt','rb') as f:
password = f.read().strip()
with open('private.pem','rb') as f:
private_key = serialization.load_pem_private_key(f.read(), password=password)
signature = private_key.sign(data_bytes, padding.PKCS1v15(), hashes.SHA1())
sign = base64.b64encode(signature).decode()
import java.nio.file.Files;
import java.nio.file.Paths;
import java.security.Signature;
import java.util.Base64;
import org.bouncycastle.openssl.PEMEncryptedKeyPair;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;

byte[] dataBytes = new com.fasterxml.jackson.databind.ObjectMapper().writeValueAsBytes(data);
char[] pass = Files.readString(Paths.get("password.txt")).toCharArray();
PEMParser parser = new PEMParser(Files.newBufferedReader(Paths.get("private.pem")));
PEMEncryptedKeyPair ckp = (PEMEncryptedKeyPair) parser.readObject();
var privateKey = new JcaPEMKeyConverter()
.getKeyPair(ckp.decryptKeyPair(new JcePEMDecryptorProviderBuilder().build(pass)))
.getPrivate();
Signature sig = Signature.getInstance("SHA1withRSA");
sig.initSign(privateKey);
sig.update(dataBytes);
String sign = Base64.getEncoder().encodeToString(sig.sign());
import (
"crypto"
"crypto/rand"
"crypto/rsa"
"crypto/sha1"
"crypto/x509"
"encoding/base64"
"encoding/json"
"encoding/pem"
"io/ioutil"
)

dataBytes, _ := json.Marshal(data)
pemBytes, _ := ioutil.ReadFile("private.pem")
passBytes, _ := ioutil.ReadFile("password.txt")
block, _ := pem.Decode(pemBytes)
der, _ := x509.DecryptPEMBlock(block, passBytes)
priv, _ := x509.ParsePKCS1PrivateKey(der)
hash := sha1.Sum(dataBytes)
sigBytes, _ := rsa.SignPKCS1v15(rand.Reader, priv, crypto.SHA1, hash[:])
sign := base64.StdEncoding.EncodeToString(sigBytes)

Полученную подпись sign передайте в заголовке Sign.

Создание платежей

URL

POSThttps://api-merchant.alikassa.com/v1/payment📋

Заголовки

ЗаголовокЗначение
Content-Typeapplication/json
AccountВаш uuid счета (вы можете найти в разделе Счета)
SignПодпись запроса

Параметры

* - Обязательные поля

НазваниеТипОписание
amount*decimal (11.2)Сумма
order_id*string (128)Ваш id (должен быть уникальный)
service*string (100)online_banking_thb_hpp
qr_code_thb_hpp
local_bank_transfer_thb_hpp
customer_ip*ipIP адрес плательщика
customer_code*string (100)Код банка для пополнения
success_redirect_idintId редиректа при успешной оплате
fail_redirect_idintId редиректа при неуспешной оплате
notification_endpoint_idintId уведомления
success_redirect_urlstring|max:255Ссылка для редиректа после успешной оплаты
fail_redirect_urlstring|max:255Ссылка для редиректа после неуспешной оплаты
notification_endpoint_urlstring|max:255Ссылка для отправки колбека после финализации статусов

Ответ

НазваниеОписание
urlСсылка на оплату
payment_statusСтатус платежа
wait — в процессе оплаты
idId платежа AliKassa
uuidUUID платежа AliKassa
success_redirect_urlСсылка на вашу страницу, для редиректа клиента после успешной оплаты
Важно

Если вы передали notification_endpoint_id или notification_endpoint_url, то вы получите уведомление о смене статуса оплаты

Пример успешного ответа (HTTP CODE 200)

{
"url": "https://pay-merchant.alikassa.com/bd291fe1-5c19-4113-ae62-a2d3c4d01d20",
"payment_status": "wait",
"id": 108465371,
"uuid": "bd291fe1-5c19-4113-ae62-a2d3c4d01d20",
"success_redirect_url": null
}

Пример ошибки ответа (HTTP CODE 400)

{
"message": "The given data was invalid.",
"errors": {
// ...
}
}

После получения url переадресуйте клиента по ссылке.

Коды банков для пополнения

online_banking_thb_hpp

customer_codeНазвание банка
BBLBangkok Bank
BOABank of Ayudhya (Krungsri)
KKRKarsikorn Bank (K-Bank)
KNKKiatnakin Bank
KTBKrung Thai Bank
SCBSiam Commercial Bank
TMBTMBThanachart Bank(TTB)

qr_code_thb_hpp

customer_codeНазвание банка
PPTPPromptpay

local_bank_transfer_thb_hpp

customer_codeНазвание банка
TSTBThai Semi Transfer Bank
BBLLBTBBL Local Bank Transfer
BOALBTBOA Local Bank Transfer
KKRLBTKKR Local Bank Transfer
SCBLBTSCB Local Bank Transfer
TMBLBTTMB Local Bank Transfer

Создание выплат

URL

POSThttps://api-merchant.alikassa.com/v1/payout📋

Заголовки

ЗаголовокЗначение
Content-Typeapplication/json
AccountВаш uuid счета (вы можете найти в разделе Счета)
SignПодпись запроса

Параметры

* - Обязательные поля

НазваниеТипОписание
amount*decimal (11.2)Сумма
order_id*string (128)Ваш id (должен быть уникальный) (пример: "1234")
service*string (100)payment_card_thb
number*string (100)Номер счета получателя
customer_code*string (100)Код банка для выплат
customer_first_name*string (100)Имя плательщика
customer_last_name*string (100)Фамилия плательщика
notification_endpoint_idintId уведомления
notification_endpoint_urlstring|max:255Ссылка для отправки колбека после финализации статусов

Ответ

НазваниеОписание
idId платежа AliKassa
payment_statusСтатус платежа
wait — в процессе оплаты

Коды банков для выплат

payment_card_thb

customer_codeНазвание банка
GSBGovernment Savings Bank
HSBCTHSBC Thailand
ICBCTIndustrial and Commercial Bank of China (Thai)
SCBTStandard Chartered Thailand
BAACBANK FOR AGRICULTURE AND AGRICULTURAL COOPERATIVES
BOTBank of Thailand
DBTBDeutsche Bank
MHCBMizuho Bank Bangkok Branch
UOBTUOB Thai
BOASBank of Asia
LHBLH Bank (Land and House Bank)
GHBGOVERNMENT HOUSING BANK
TCRBTHAI CREDIT RETAIL BANK
TISCOTISCO Bank
Важные замечания
  • Возможные значения payment_status, смотрите в документации "Статус платежа"
  • Пример кода найдете в конце документа