axcherednikov/cloudpayments-php-client
Composer 安装命令:
composer require axcherednikov/cloudpayments-php-client
包简介
cloudpayments api client
README 文档
README
PHP-клиент для CloudPayments API. Пакет предоставляет DTO для запросов, DTO для ответов, обработку HTTP-запросов через Guzzle и классы для данных webhook-уведомлений.
Проект основан на кодовой базе flowwow/cloudpayments-php-client, развивается независимо и использует namespace Excent\Cloudpayments.
Оглавление
- Требования
- Установка
- Быстрый старт
- 3-D Secure
- Поддерживаемые методы
- Запросы
- Ответы
- Уведомления
- Идемпотентность
- Обработка ошибок
- Разработка
- Версионирование
- License
Требования
- PHP
^8.1 - Guzzle
^7.4 - Composer
Установка
composer require axcherednikov/cloudpayments-php-client
Быстрый старт
<?php declare(strict_types=1); use Excent\Cloudpayments\Library; use Excent\Cloudpayments\Request\CardsPayment; require __DIR__ . '/vendor/autoload.php'; $client = new Library( $_ENV['CLOUDPAYMENTS_PUBLIC_ID'], $_ENV['CLOUDPAYMENTS_API_PASSWORD'] ); $request = new CardsPayment( 100.00, 'RUB', '127.0.0.1', 'CARD_CRYPTOGRAM_PACKET' ); $response = $client->paymentsCardsCharge($request); if ($response->success) { echo $response->model->transactionId; }
Если нужно переопределить endpoint CloudPayments, передайте URL третьим аргументом конструктора:
$client = new Library($publicId, $apiPassword, $customApiUrl);
3-D Secure
Методы paymentsCardsCharge() и createPaymentByCard2Step() возвращают TransactionWith3dsResponse. Если требуется 3-D Secure, is3dsError() вернет true, а данные для перенаправления будут доступны в model.
use Excent\Cloudpayments\Request\Post3DS; $response = $client->paymentsCardsCharge($request); if ($response->is3dsError()) { $acsUrl = $response->model->acsUrl; $paReq = $response->model->paReq; $transactionId = $response->model->transactionId; // Передайте пользователя на страницу ACS банка, затем обработайте PaRes. $client->post3Ds(new Post3DS($transactionId, 'PARES_FROM_ACS')); }
Поддерживаемые методы
Библиотека работает с методами из CloudPayments API через request/response DTO.
| Метод API | Метод Library | Request DTO | Response DTO |
|---|---|---|---|
payments/cards/charge |
paymentsCardsCharge |
CardsPayment |
TransactionWith3dsResponse |
payments/cards/auth |
createPaymentByCard2Step |
CardsPayment |
TransactionWith3dsResponse |
payments/cards/post3ds |
post3Ds |
Post3DS |
TransactionResponse |
payments/tokens/charge |
executePaymentByToken |
TokenPayment |
TransactionResponse |
payments/tokens/auth |
createPaymentByToken2Step |
TokenPayment |
TransactionResponse |
payments/confirm |
confirmPayment |
PaymentsConfirm |
CloudResponse |
payments/void |
cancelPayment |
PaymentsVoid |
CloudResponse |
payments/refund |
paymentsRefund |
PaymentsRefund |
TransactionResponse |
payments/cards/topup |
paymentsCardsTopup |
CardsTopUp |
TransactionResponse |
payments/token/topup |
paymentsTokenTopup |
TokenTopUp |
TransactionResponse |
payments/get |
getPaymentData |
PaymentsGet |
TransactionResponse |
payments/find |
getPaymentDataByInvoice |
PaymentsFind |
TransactionResponse |
payments/list |
getListPayment |
PaymentsList |
TransactionArrayResponse |
payments/tokens/list |
paymentsTokensList |
TokenList или null |
TokenArrayResponse |
subscriptions/create |
subscriptionsCreate |
SubscriptionCreate |
SubscriptionResponse |
subscriptions/get |
subscriptionsGet |
SubscriptionGet |
SubscriptionResponse |
subscriptions/find |
subscriptionsFind |
SubscriptionFind |
SubscriptionArrayResponse |
subscriptions/update |
subscriptionsUpdate |
SubscriptionUpdate |
SubscriptionResponse |
subscriptions/cancel |
subscriptionsCancel |
SubscriptionCancel |
CloudResponse |
orders/create |
ordersCreate |
OrderCreate |
OrderResponse |
orders/cancel |
ordersCancel |
OrderCancel |
CloudResponse |
site/notifications/{Type}/get |
siteNotificationsGet |
NotificationsGet |
NotificationResponse |
site/notifications/{Type}/update |
siteNotificationsUpdate |
NotificationsUpdate |
CloudResponse |
applepay/startsession |
startSession |
ApplepayStartSession |
AppleSessionResponse |
kkt/receipt |
createReceipt |
KktReceipt |
KktReceiptResponse |
Запросы
Параметры API передаются через DTO из namespace Excent\Cloudpayments\Request.
use Excent\Cloudpayments\Request\ApplepayStartSession; $request = new ApplepayStartSession( 'https://apple-pay-gateway.apple.com/paymentservices/startSession' ); $response = $client->startSession($request);
DTO наследуются от BaseRequest и преобразуются в формат CloudPayments через asArray():
amountпревращается вAmount;- значения
nullне попадают в запрос; trueиfalseпередаются как строковые значения, ожидаемые API;- вложенные DTO и массивы DTO преобразуются рекурсивно.
Некоторые DTO для совместимости с существующим публичным контрактом заполняются через публичные свойства:
use Excent\Cloudpayments\Request\NotificationsUpdate; $request = new NotificationsUpdate(); $request->type = 'pay'; $request->isEnabled = true; $request->address = 'https://example.com/cloudpayments/pay'; $client->siteNotificationsUpdate($request);
Ответы
Все response DTO наследуются от CloudResponse.
| Свойство | Описание |
|---|---|
success |
Результат операции из поля Success. |
message |
Сообщение из поля Message. |
warning |
Предупреждение из поля Warning. |
model |
Модель ответа, тип зависит от вызванного метода. |
Поддерживаемые модели:
| Response DTO | Model |
|---|---|
AppleSessionResponse |
AppleSessionModel |
KktReceiptResponse |
KktReceiptModel |
NotificationResponse |
NotificationModel |
OrderResponse |
OrderModel |
SubscriptionResponse |
SubscriptionModel |
SubscriptionArrayResponse |
SubscriptionModel[] |
TokenArrayResponse |
TokenModel[] |
TransactionResponse |
TransactionModel |
TransactionArrayResponse |
TransactionModel[] |
TransactionWith3dsResponse |
TransactionWith3dsModel |
Если CloudPayments вернет поля, которых нет в модели, они будут доступны через getAdditionalProperties().
$extra = $response->model->getAdditionalProperties();
Уведомления
Библиотека включает DTO для данных webhook-уведомлений. Классы мапят поля CloudPayments вида TransactionId в свойства вида transactionId.
use Excent\Cloudpayments\Hook\HookPay; $hook = new HookPay($_POST); echo $hook->transactionId;
Классы уведомлений:
| Webhook | DTO |
|---|---|
Check |
HookCheck |
Pay |
HookPay |
Fail |
HookFail |
Confirm |
HookConfirm |
Refund |
HookRefund |
Recurrent |
HookRecurrent |
Cancel |
HookCancel |
Receipt |
HookReceipt |
Webhook DTO только преобразуют входные данные в объект. Проверку подписи, бизнес-валидацию и формирование ответа для CloudPayments нужно реализовать на стороне приложения.
Идемпотентность
Для идемпотентных запросов библиотека отправляет заголовок X-Request-ID.
Автоматический ключ строится из метода и данных запроса:
$client->setIdempotency(true); $response = $client->createPaymentByCard2Step($request);
Можно задать ключ явно:
$client->setIdempotencyKey('order-100500-auth'); $response = $client->createPaymentByCard2Step($request);
Обработка ошибок
Request DTO могут выбрасывать BadTypeException, если переданы некорректные значения. HTTP-слой может выбросить исключения Guzzle, а разбор JSON - JsonException.
use Excent\Cloudpayments\Exceptions\BadTypeException; use GuzzleHttp\Exception\GuzzleException; try { $response = $client->paymentsRefund($request); } catch (BadTypeException $exception) { // Некорректные параметры request DTO. } catch (GuzzleException $exception) { // Ошибка HTTP-запроса. } catch (JsonException $exception) { // Ответ API не удалось разобрать как JSON. }
Разработка
composer install
composer bin phpstan install
composer bin rector install
composer bin php-cs-fixer install
composer test
make phpstan
make rector
make lint
Полезные команды:
| Команда | Назначение |
|---|---|
composer test |
Запустить PHPUnit. |
make phpstan |
Запустить PHPStan. |
make rector |
Проверить код Rector в dry-run режиме. |
make lint |
Проверить стиль PHP CS Fixer. |
make fixcs |
Исправить стиль PHP CS Fixer. |
make rector-fix |
Применить исправления Rector. |
CI запускает тесты на поддерживаемых версиях PHP и отдельные quality checks для PHPStan, Rector и PHP CS Fixer.
Версионирование
Проект следует SemVer:
- patch-релизы исправляют ошибки, документацию, тесты и статический анализ без изменения публичного контракта;
- minor-релизы могут добавлять новые методы и DTO обратно совместимым образом;
- major-релизы могут содержать несовместимые изменения.
License
MIT. See LICENSE.
axcherednikov/cloudpayments-php-client 适用场景与选型建议
axcherednikov/cloudpayments-php-client 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 2.02k 次下载、GitHub Stars 达 1, 最近一次更新时间为 2022 年 03 月 19 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「cloudpayments」 「cloudpayments api」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 axcherednikov/cloudpayments-php-client 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 axcherednikov/cloudpayments-php-client 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 axcherednikov/cloudpayments-php-client 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
cloudpayments api client
A PSR-7 compatible library for making CRUD API endpoints
cloudpayments api client, php8 support
A lightweight plain-PHP framework for database-backed CRUD APIs.
Modern, strongly-typed, PSR-compliant PHP client for the WeFact v2 API.
PHP SDK for the Enconvert file conversion API
统计信息
- 总下载量: 2.02k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 1
- 点击次数: 6
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2022-03-19