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

Платежное решение VN v1

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

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

Заголовки

ЗаголовокЗначение
Content-Typeapplication/json
AccountUUID вашего аккаунта, можно найти в Аккаунтах
SignПодпись запроса

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

Перейдите в Настройки API сертификата, сгенерируйте "API certificate for payment", сохраните архив и распакуйте его.

Вы получите:

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

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

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

Заверните все POST данные в JSON (в том же порядке) и подпишите:

$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('SHA256');
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.SHA256())
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("SHA256withRSA");
sig.initSign(privateKey);
sig.update(dataBytes);
String sign = Base64.getEncoder().encodeToString(sig.sign());
import (
"crypto"
"crypto/rand"
"crypto/rsa"
"crypto/sha256"
"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 := sha256.Sum256(dataBytes)
sigBytes, _ := rsa.SignPKCS1v15(rand.Reader, priv, crypto.SHA256, hash[:])
sign := base64.StdEncoding.EncodeToString(sigBytes)

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

Параметры запроса

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

НазваниеТипОписание
amount*decimal (11.2)Сумма
order_id*string (128)Ваш id должен быть уникальным
service*string (100)Тип сервиса: online_banking_vnd_hpp, qr_code_vnd_hpp, e_wallet_vnd_hpp, local_bank_transfer_vnd_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Ссылка для отправки callback после финализации статусов

Ответ

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

При создании всегда ждите, проверяйте статус платежа через API или ждите уведомления!

Пример ответа

Успешный 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 перенаправьте клиента по ссылке.

предупреждение

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

Коды банков депозита

Онлайн-банкинг VND HPP (online_banking_vnd_hpp)

customer_codeНазвание банка
ACBAsia Commercial Bank
AGBAgribank
BIDVBank for Investment and Development of Vietnam
DABDongA Bank
EXIMEximbank Vietnam
HDBHDB Bank
MBMilitary Commercial Joint Stock Bank
MTMBMaritime Bank
OCBOrient Commercial Joint Stock Bank
SACOMSacombank
TCBTechcombank
TPBTien Phong Bank
VCBVietcombank
VIBVietnam International Bank
VPBVP Bank
VTBVietinbank

QR-код VND HPP (qr_code_vnd_hpp)

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

Электронный кошелек VND HPP (e_wallet_vnd_hpp)

customer_codeНазвание банка
VIETQRMOMOVietQR MOMO
VIETQRZALOVietQR Zalo Pay
VIETQRVIETTELVietQR Viettel Pay

Локальный банковский перевод VND HPP (local_bank_transfer_vnd_hpp)

customer_codeНазвание банка
VSTBVND Semi Transfer Bank
VCBLBTVietcom Bank Local Bank Transfer
DABLBTDonga Bank Local Bank Transfer

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

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

Заголовки

ЗаголовокЗначение
Content-Typeapplication/json
AccountUUID вашего аккаунта, можно найти в Аккаунтах
SignПодпись запроса

Параметры запроса

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

НазваниеТипОписание
amount*decimal (11.2)Сумма
order_id*string (128)Ваш уникальный id заказа (например, "1234")
service*string (100)payment_card_vnd
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Ссылка для отправки callback после финализации статусов

Ответ

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

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

Платежная карта VND (payment_card_vnd)

customer_codeНазвание банка
ABCJSAn Binh Commercial Join Stock Bank
CITIVCitibank Vietnam
HDBHoChiMinh City Development Joint Stock Commercial Bank
HSBCVHSBC Vietnam
NAMANam A Commercial Joint Stock Bank (NamaBank)
PBBVPublic Bank Vietnam
PVCBPVcomBank
SCBVStandard Chartered Bank Vietnam
SGCBSaigon Commercial Bank (Ngân hàng TMCP Sài Gòn)
SHBVShinhan Bank Vietnam
SHCBSaigon-Hanoi Commercial Joint Stock Bank
VCPTBViet Capital Bank (Ngan Hang Ban Viet)
OCBOrient Commercial Joint Stock Bank
DBVNDeutsche Bank
WBVNWoori Bank VN
SEAVNSeAbank
LVPBLienVietPostBank
VABVIET A BANK
BABBac A Commercial Joint Stock Bank
NCBNational Citizen Bank
KLBKien Long Commercial Joint Stock Bank
VBVietbank
CBVietnam Construction Bank-CB
BSHBSHB Bank
ABBAB BANK
PGBPG Bank
OCEANBOcean Bank Viet Nam