承接 axcherednikov/cloudpayments-php-client 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

axcherednikov/cloudpayments-php-client

Composer 安装命令:

composer require axcherednikov/cloudpayments-php-client

包简介

cloudpayments api client

README 文档

README

Tests Latest Stable Version PHP Version License

PHP-клиент для CloudPayments API. Пакет предоставляет DTO для запросов, DTO для ответов, обработку HTTP-запросов через Guzzle и классы для данных webhook-уведомлений.

Проект основан на кодовой базе flowwow/cloudpayments-php-client, развивается независимо и использует namespace Excent\Cloudpayments.

Оглавление

Требования

  • 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 我们能提供哪些服务?
定制开发 / 二次开发

基于 axcherednikov/cloudpayments-php-client 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 2.02k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 1
  • 点击次数: 6
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 1
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-03-19