Small library which help you to use methods from Tinkoff API Documentation.
It was made for Laravel 7.0, but basically it working on Laravel 11 and almost all others PHP applications.
It use some of Laravel-Tinkoff functions inside.
Just basic things. For example, we can:
- Add customer
- Get customer data
- Remove customer
- Get card list of customer
- Remove customer cards
- Charge money
You have to be sure you already have permission to use this kind of function. You could ask your own manager in Tinkoff bank.
To be more clear it's work with:
Init
AddCustomer
GetCustomer
RemoveCustomer
GetCardList
RemoveCard
Charge
This library not implement Init
method in version 0.01. But it's implemented in 0.02.
Probably in some close future I will add FinishAuthorize
method, but not sure right now.
FinishAuthorize
probably will work- Right now library not return additional values of users (email, IP, etc). Will fix it.
Install library from composer
composer require clanmax/tinkoff-autopay
Connect library with you controller by using use
use ClanMax\TinkoffAutopay;
Step by step how to use Charge
- Add customer (it will be added automatically in
Init
method, btw) - Request
Init
(not included in 0.01) withCustomerKey
andRecurrent
parameters - Redirect user to payment form from
PaymentURL
value
- Request
Init
withoutCustomerKey
andRecurrent
parameters - Save
PaymentID
- Request
GetCardList
and take from card which you want to useRebillId
- Request
Charge
withPaymentID
,RebillId
, and OperationInitiatorType
In this case user will be charged automatically and payment will be approved instantly.
Make sure you already have Terminal Key and Terminal Password from you bank account. For using FinishAuthorize
method you can get public key when switch you terminal working mode to Mobile application.
$terminalKey = "16009807012222DEMO"; // demo may help to deploy
$terminal_password = "password";
$terminalurl = "https://securepay.tinkoff.ru/v2/";
$bank = new TinkoffAutopay($terminalurl,$terminalKey,$terminal_password);
Make POST
request to Init
with two additional parameters:
{
"Recurrent": "Y",
"CustomerKey": "clanmax",
"OperationInitiatorType": "2" // just example. check https://www.tinkoff.ru/kassa/dev/payments/#section/Peredacha-priznaka-iniciatora-operacii
}
Where CustomerKey
name of already added client and Recurrent
just with Y
For example:
$payment = [
'OrderId' => '2223',
'Amount' => '1000',
'Language' => 'ru',
'Reccurent' => 'Y',
'CustomerKey' => "clanmax",
'Description' => 'One month pay',
'Email' => 'me@email.com',
'Phone' => '+79517474837',
'Name' => 'Vlad',
'Taxation' => 'usn_income'
];
$items[] = [
'Name' => 'Something you gonna pay',
'Price' => '1000',
'Tax' => 'none',
];
$bank->Init($payment,$items);
Return will look like this:
{
'Success' = '1',
'Status' = 'NEW',
'PaymentURL' = "https://securepay.tinkoff.ru/new/58NbcI0s",
'PaymentId' = '360127329'
}
Just to be sure Tax in Items could be:
- osn — общая
- usn_income — упрощенная (доходы)
- usn_income_outcome — упрощенная (доходы минус расходы)
- patent — патентная
- envd — единый налог на вмененный доход
- esn — единый сельскохозяйственный налог
Few steps:
- Make
POST
request to Init, but withoutRecurrent
andCustomerKey
- Grab
PaymentId
from there
$charge = $bank->Charge($PaymentId,$RebillId);
You have to make customer always before he did pay. One customer may have lots of connected cards by Init
method.
$customer = $bank->AddCustomer($CustomerKey);
Return existing customers. You have to have his name which you used before.
$customer = $bank->GetCustomer($CustomerKey);
Just removing all data of user. Be sure you won't use RebillId
of this user anymore.
$customer = $bank->RemoveCustomer($CustomerKey);
You will use this method for get RebillId
. Return bunch of cards which user saved by Init
method.
$cards = $bank->GetCardList($CustomerKey);
If your client have tons of cards but you are not ready to use them instead of delete user you may just delete card. Just get card number from GetCardList
$cards = $bank->RemoveCard($CardId, $CustomerKey);
I would recommend always check all request for errors by this way
$bank->error ?:
Error
keep some information and you may use it for show to user (but be aware).
In some moment you probably will need token for testing. You may use methods in TinkoffKey class.
How does it work:
- Connect class
- Change your data (or send you own)
- Get data
use ClanMax\TinkoffKey;
$test = new TinkoffKey;
return $test;