yoomoney / yookassa-sdk-php Goto Github PK
View Code? Open in Web Editor NEWPHP SDK for YooKassa Payments API
Home Page: https://yookassa.ru/developers
License: MIT License
PHP SDK for YooKassa Payments API
Home Page: https://yookassa.ru/developers
License: MIT License
Композер выдает предупреждения о переходе.
в старом модуле yoomoney/yandex-checkout-sdk-php история закончилась на версии 1.6.9.
здесь уже появилась 2.0.
Были какие то изменения?
или я просто поменяю на yoomoney/yookassa-sdk-php и ничего не сломается? не хотелось бы с платежами рисковать.
Доброе времени суток!
Много фреймворки уже перешли на новый пакеты PSR логи!
Если устанавливать этот lib то тогда composer даёт ошибку:
Problem 1
- yoomoney/yookassa-sdk-php[2.1.0, ..., 2.1.6] require psr/log ^1.0 -> found psr/log[1.0.0, ..., 1.1.4] but the package is fixed to 2.0.0 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
потому что у меня уже более новый версии psr/log
При получении списка платежей через getPayments()
у объектов Payment в списке не устанавливается информация об income_amount
и test
, поэтому соотвествующие геттеры у таких объектов возвращают null.
Из API эти данные поступают, но не устанавливаются в YooKassa\Request\Payments\PaymentsResponse@__construct
.
Добрый день. Помогите, пожалуйста, разобраться с ошибкой.
Подключаю кассу к сайту Wordpress, но не хочу использовать Woocommerce. Поэтому написал плагин сам.
При создании платежа выводит ошибку.
Создание платежа:
<?php
/**
* Template Name: Страница тестового платежа
*/
?>
<?php
require dirname( __FILE__, 3 ) . '/plugins/yoomoney-wp/includes/yookassa/lib/autoload.php';
use YooKassa\Client;
$client = new Client();
$client->setAuth(get_option('shopid'), get_option('secretkey'));
$user_id = get_current_user_id();
$user = get_userdata($user_id);
//$price = the_field('premium_price', 'options');
$price = 40;
$return_url = get_option('tyurl');
$wpdb->insert(
$wpdb->prefix . "payments",
array(
'payment_user_id' => $user_id,
'payment_amount' => $price,
'payment_title' => 'Покупка Premium'
),
array(
'%d',
'%d',
'%s'
)
);
$payment_id = $wpdb->insert_id;
$payment_names = Array(
1 => 'webmoney',
2 => 'yandex_money',
3 => 'qiwi',
4 => 'bank_card',
5 => 'bank_card',
6 => '',
7 => 'mobile_balance',
8 => 'mobile_balance',
9 => 'mobile_balance',
10 => 'alfabank',
11 => 'sberbank'
);
$idempotenceKey = uniqid('', true);
$response = $client->createPayment(
array(
'amount' => array(
'value' => $price,
'currency' => 'RUB',
),
'payment_method_data' => array(
'type' => 'bank_card',
),
'confirmation' => array(
'type' => 'redirect',
'return_url' => $return_url,
),
"reciept" => array(
"customer" => array(
"full_name" => $user->first_name && $user->last_name ? $user->first_name . ' ' . $user->last_name : $user->user_login,
"email" => '[email protected]'
),
"items" => array(
array(
"description" => 'Покупка Premium',
"quantity" => "1.00",
"amount" => array(
"value" => $price,
"currency" => "RUB"
),
"vat_code" => "1",
"payment_mode" => "full_payment",
"payment_subject" => "service"
)
)
),
'description' => 'Покупка Premium',
'metadata' => array(
'user_id' => $user_id,
'payment_id' => $payment_id
)
),
$idempotenceKey
);
//get confirmation url
$confirmationUrl = $response->getConfirmation()->getConfirmationUrl();
$data['status'] = 200;
$data['url'] = $confirmationUrl;
echo json_encode($data);
die();
//header("Location: $confirmationUrl")
Класс: YooKassa\Client
Метод: me()
Решение ЮКасса для платформ предполагает возможность извлечения данных по продавцам платформы. Для этого существует query-параметр on_behalf_of
для me()
запроса. В SDK же данный параметр через метод me()
передать нельзя, из-за того, что me()
не принимает параметров в принципе (хотя в кишках он вызывает $this->execute
, в который кладет null
для $queryParams
). Было бы неплохо дать возможность передавать $queryParams
в метод me()
.
Внесите, пожалуйста, ясность, подходит ли этот SDK для работы не с юкассой, а с юмани, т.е. физическим лицам?
Если не подходит, то где SDK для юмани? Весь интернет перерыл, везде фигурирует юкасса.
В классе AbstractPaymentRequestBuilder есть метод addRecieptItem (
) в который на данный момент невозможно передать информацию о поставщике товаров.Я использую ваше расширение cms-prestashop и в модели Кассы (KassaModel.php) мне не хватает возможности передать информацию о поставщике товаров.
Подскажите, пожалуйста, когда можно ожидать обновление SDK и вашего модуля для PrestaShop?
П.с. Возможно, есть другой способ передеть эту информацию в чек, буду рад вашим предложениям :)
Здравствуйте, предусмотрена проверка IP адреса при получении входящего уведомления?
Сейчас у меня вот такой пример: из-за умножения на 100.00 сумма товаров меньше на один 0, а товар считается нормально. Из-за чего происходит ошибка
try {
$builder = \YooKassa\Request\Payments\CreatePaymentRequest::builder();
$builder->setAmount(100)
->setCurrency(\YooKassa\Model\CurrencyCode::RUB)
->setCapture(true)
->setDescription('Оплата заказа 112233');
// Устанавливаем страницу для редиректа после оплаты
$builder->setConfirmation(array(
'type' => \YooKassa\Model\ConfirmationType::REDIRECT,
'returnUrl' => 'https://merchant-site.ru/payment-return-page',
));
// Составляем чек
$builder->setReceiptEmail('[email protected]');
// Добавим товар
$builder->addReceiptItem(
'Тестовый товар',
1000,
1.0,
2,
'full_payment',
'commodity'
);
// Создаем объект запроса
$request = $builder->build();
// Можно изменить данные, если нужно
$request->setDescription($request->getDescription() . ' - merchant comment');
$idempotenceKey = uniqid('', true);
$response = $client->createPayment($request);
//получаем confirmationUrl для дальнейшего редиректа
$confirmationUrl = $response->getConfirmation()->getConfirmationUrl();
} catch (\Exception $e) {
$response = $e;
}
Доброй ночи.
Композер тут пишет что yandex пакет не актуален уже, и надо качать этот.
Собственно вопросик простой - кроме названия классов в коде надо еще что менять?
Очень мягко выражусь - не доволен я тем фактом что надо менять пакет для платежки, это ведь бабки.
Знаю знаю, все обещают мягко всех подготовить к переезду - ну ну.
Ладно давайте по существу, есть дока по миграции ? или все легко и просто и надо лишь сменить названия классов
Этот тип все еще есть у оплат по которым приходит нотификации, в итоге падает:
Uncaught PHP Exception InvalidArgumentException: "Invalid payment method data type "yandex_money"" at vendor/yoomoney/yookassa-sdk-php/lib/Model/PaymentMethod/PaymentMethodFactory.php line 69 {"exception":"[object] (InvalidArgumentException(code: 0): Invalid payment method data type "yandex_money" at vendor/yoomoney/yookassa-sdk-php/lib/Model/PaymentMethod/PaymentMethodFactory.php:69)"} []
Как обработать текущие платежи? По которым приходит нотификация об оплате.
Примет нотификации:
[2021-01-12 11:15:49] POST ... body { "type" : "notification", "event" : "payment.succeeded", "object" : { "id" : "id", "status" : "succeeded", "paid" : true, "amount" : { "value" : "12364.00", "currency" : "RUB" }, "captured_at" : "2021-01-12T08:15:48.119Z", "created_at" : "2021-01-12T08:15:31.848Z", "description" : "description", "metadata" : { "transaction_id" : "", "shop_id" : "", "order_id" : "", "cms_name" : "", "scid" : "" }, "payment_method" : { "type" : "yandex_money", "id" : "", "saved" : false, "account_number" : "", "title" : "YooMoney wallet ..." }, "receipt_registration" : "pending", "recipient" : { "account_id" : "", "gateway_id" : "" }, "refundable" : true, "refunded_amount" : { "value" : "0.00", "currency" : "RUB" }, "test" : false } } [] []
Интересно что title YooMoney wallet а тип все еще yandex_money
. Может не должно таких типов уже приходить?
lib/Request/Refunds/RefundsRequestSerializer.php:63
Хотя по документации "Указывается в формате ISO 8601. Пример: created_at.gte=2018-07-18T10:51:18.139Z"
Добрый день.
Перешел с Вашего старого SDK на этот после перехода на yookassa.
Почему-то получаю вот такую ошибку:
"message":"Class 'Yookassa\Client' not found"
При этом в IDE (PHPStorm) класс нормально отображается, и я в него без проблем могу перейти.
Используем Laravel 5.8.
Аналогичный решенный ISSUE я прочитал (#3), но у меня установлена версия Вашего SDK 2.0.3, в которой данной проблемы уже быть не должно.
Возможно, у Вас будут идеи, почему такое происходит?
Спасибо!
При создании платежа через метод createPayment
, я передаю в массив merchant_customer_id
, но SDK игнорирует это поле, так как в CreatePaymentRequest
нет соответствующего метода.
Так же не принимаются transfers
и deal
. Все эти параметры были добавлены в API последними, видать до SDK обновление ещё не дошло.
Как можно получить тестовые shopId и secretKey, являясь разработчиком, а не юр. лицом, ип или самозанятым?
I have the next error after migration from the yandex-checkout-sdk-php
on PHP 8:
Declaration of YooKassa\Common\LoggerWrapper::emergency($message, array $context = []) must be compatible with Psr\Log\LoggerInterface::emergency(Stringable|string $message, array $context = []): void
I think it happens because the yandex-checkout-sdk-php
used an older version of the psr/log
package.
https://github.com/yoomoney/yandex-checkout-sdk-php/blob/master/composer.json#L10
https://github.com/yoomoney/yookassa-sdk-php/blob/master/composer.json#L20
Maybe it will be better to return back to "psr/log": "^1.0"
to save PHP 5.3 as a minimal version?
Добрый день,
Сейчас разрабатываем функционал по работе с безопасными сделками через Юкассу. Обнаружили, что SDK Юкассы для php не умеет создавать сделки (deals) и совершать выплаты (payouts).
Рассмотрите ли вы pull request, содержащий перечисленный выше функционал?
Добрый день,
При подтверждении холдированного (двухстадийного) платежа, в котором используется вознаграждение platform_fee_amount
, происходит ошибка:
{
"type": "error",
"id": "****-****-***-****-******",
"code": "invalid_request",
"description": "invalid_request.marketplace.marketplace_fee_is_missing_on_capture",
"parameter": "transfers.platform_fee_amount"
}
Ошибка происходит из-за отсутствия в методе serializeTransfers файла CreateCaptureRequestSerializer.php проверки на вознаграждение:
$item = array(
'account_id' => $transfer->getAccountId(),
'amount' => $this->serializeAmount($transfer->getAmount()),
);
if ($transfer->hasPlatformFeeAmount()) {
$item['platform_fee_amount'] = $this->serializeAmount($transfer->getPlatformFeeAmount());
}
$result[] = $item;
В одной папке лежат 2 версии
libold - https://github.com/yoomoney/yandex-checkout-sdk-php
libnew - https://github.com/yoomoney/yookassa-sdk-php
если вызывать
require_once('libnew/autoload.php');
use YooKassa\Client;
$client = new Client();
То появляется ошибка - Fatal error: Uncaught Error: Class 'YooKassa\Client' not found in (строка $client = new Client();)
если вызывать старый sdk:
require_once('libold/autoload.php');
use YandexCheckout\Client;
$client = new Client();
То все работает как прежде. Протестировано на php 5.3 и на php 7.1 - одинаково выходит ошибка.
$payment = $app->make(YooKassaNotificationCanceled::class, ['source' => $request]);
$payment->getType() - ничего не возвращает
$payment->getObject() - ничего не возвращает
т.к. в классе нет конструктора. Заменив public function fromArray($source) на public function __construct(array $source) решило проблему.
падает ошибка
Invalid payment method data type "sbp"
т.к. в массиве выше https://github.com/yoomoney/yookassa-sdk-php/blob/master/lib/Model/PaymentMethod/PaymentMethodFactory.php#L38
нет sbp.
планируется добавить?
var_dump($client->getRefunds()["items"]);
var_dump($client->getPayments()["items"]);
Как я могу получить список возвратов?
Добрый день.
При создании чека отмены холдированного платежа (https://yookassa.ru/developers/solutions-for-platforms/split-payments/receipts#receipt-for-canceled-payment) происходит ошибка:
{ "type": "error", "id": "***", "code": "invalid_request", "description": "Refund not found or forbidden", "parameter": "refund_id" }
В методе serializeObjectId принудительно устанавливается поле refund_id вместо payment_id.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.