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

Платежное решение PH 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 data = JSON.stringify(requestData);
const keyPem = readFileSync('private.pem', 'utf8');
const passphrase = readFileSync('password.txt', 'utf8').trim();

const signer = createSign('SHA256');
signer.update(data);
signer.end();
const sign = signer.sign({ key: keyPem, passphrase }, 'base64');
import json
import base64
from cryptography.hazmat.primitives import hashes, serialization
from cryptography.hazmat.primitives.asymmetric import padding

data = json.dumps(request_data).encode('utf-8')
password = open('password.txt','rb').read().strip()
private_key = serialization.load_pem_private_key(
open('private.pem','rb').read(),
password=password
)
signature = private_key.sign(data, padding.PKCS1v15(), hashes.SHA256())
sign = base64.b64encode(signature).decode('utf-8')
import java.security.Signature;
import java.util.Base64;
import java.nio.file.Files;
import java.nio.file.Paths;
import org.bouncycastle.openssl.PEMEncryptedKeyPair;
import org.bouncycastle.openssl.PEMParser;
import org.bouncycastle.openssl.jcajce.JcePEMDecryptorProviderBuilder;
import org.bouncycastle.openssl.jcajce.JcaPEMKeyConverter;
import com.fasterxml.jackson.databind.ObjectMapper;

ObjectMapper mapper = new ObjectMapper();
byte[] dataBytes = mapper.writeValueAsBytes(requestData);
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"
)

data, _ := json.Marshal(requestData)
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(data)
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_php_hpp, e_wallet_php_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, то вы получите уведомление о смене статуса оплаты

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

Онлайн-банкинг PHP HPP (online_banking_php_hpp)

customer_codeНазвание банка
BDOBanco de Oro
BPIBank of the Philippine Islands
LBPLand Bank of the Philippines
RCBCRizal Commercial Banking Corporation
SBCSecurity Bank Corporation

Электронный кошелек PHP HPP (e_wallet_php_hpp)

customer_codeНазвание банка
GCASHGcash e-Wallet
PAYMAYAPayMaya e-Wallet

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

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_php
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 — в процессе платежа)

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

Платежная карта PHP (payment_card_php)

customer_codeНазвание банка
BDOEBANCO DE ORO Corporate
PNBePhilippine National Bank Biz
CBCChinabank
CBCeChinabank Biz
SBCeSecurity Bank Biz
DBPDevelopment Bank of the Philippines
SLBASterling Bank Asia
EWBEastwest Bank
PHPBBPhilippine Business Bank
SEABANKPHPSeaBank
MAYAMaya Bank Inc
GCASHGCASH
PAYMAYAPayMaya Philippines, Inc. (e-wallet)
BankComBank of Commerce
GOTYMEGOTYME Bank
KOMOKOMO Bank
CIMBPCIMB Bank Philippines
PSBPhilippine Savings Bank
RBCRobinsons Bank Corporation
HSBCPHSBC Philippines