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

Платёжное решение ID 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_idr_hpp
qr_code_idr_hpp
virtual_account_idr_hpp
local_bank_transfer_idr_hpp
customer_ip*ipIP адрес плательщика
customer_code*string (100)Код банка для пополнения
customer_first_name*stringИмя плательщика
customer_last_name*stringФамилия плательщика
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Ссылка на вашу страницу, для редиректа клиента после успешной оплаты
Важно

При создании всегда wait, проверяйте статус платежа через 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, вы получите уведомление об изменении статуса платежа

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

online_banking_idr_hpp

customer_codeНазвание банка
BCABank Central Asia
BNIBank Negara Indonesia
BRIBank Rakyat Indonesia
CIMBNCIMB Niaga
MDRMandiri Bank
PMTBPermata Bank
PANINPanin Bank

qr_code_idr_hpp

customer_codeНазвание банка
QRISQRIS
DANAQRISDANA QRIS
GOPAYQRISGO PAY QRIS
LINKAJAQRISLINK AJA QRIS
OVOQRISOVO QRIS
SHOPEEQRISShopee Pay QRIS

virtual_account_idr_hpp

customer_codeНазвание банка
BCAVABCA Virtual Account
BNIVABNI Virtual Account
BRIVABRI Virtual Account
CIMBNVACIMBN Virtual Account
MBBIVAMBBI Virtual Account
MDRVAMDR Virtual Account
PMTBVAPMTB Virtual Account
PANINVAPANIN Virtual Account
BDIVABDI Virtual Account

local_bank_transfer_idr_hpp

customer_codeНазвание банка
BCALBTBCA Bank Local Bank Transfer
BNILBTBNI Bank (Local Bank Transfer)
BRILBTBRI Bank (Local Bank Transfer)
MDRLBTMandiri Bank (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_idr
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_idr

customer_codeНазвание банка
PMTBPermata Bank
BCASBBCA Syariah Bank (enterprise)
BMIBank Mega Indonesia
BRISBBRI Syariah Bank (enterprise)
BSMBank Sinarmas
BTNBank Tabungan Negara
BTPNBank Tabungan Pensiunan Nasional
OCBCNBank OCBC NISP
MDRSBMandiri Syariah Bank
PNBNPT. Bank Pan Indonesia
UOBIUOB Indonesia
BSIBank Syariah Indonesia (на техническом обслуживании)
PTBCPT. Bank Commonwealth
HSBCIHSBC Indonesia
PANINPanin Bank
DBSIBANK DBS
HANAIHanabank Indonesia
MNCBank MNC Internasional
BKALBank Kalteng
ALLOBALLO BANK
SEABANKSeaBank
SUMUTBank Sumut
BMLIBank Muamalat
BCADBCA Digital
BJBBank Jabar (BJB)
Важно
  • Возможные значения payment_status — смотрите в разделе "Статус платежа" документации.
  • Пример кода вы можете найти в конце документа.