terentev-space/qiwi-php-client 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

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

terentev-space/qiwi-php-client

Composer 安装命令:

composer require terentev-space/qiwi-php-client

包简介

Universal payments API SDK (UNOFICIAL QIWI CLIENT)

README 文档

README

Latest Version Software License Total Downloads

Especially for 🦊 Zorra Telecom and 👥 Everyone else

Привет

Attention: At the moment the number of methods is very limited, they will be added later if QIWI does not make a normal alternative... Внимание: На данный момент количество методов сильно ограниченно, они будут добавлены позже, если QIWI не сделает нормальную альтернативу...

Минимальный набор API - ЕСТЬ

Создание счета

Запрос создает платежный счет.

PUT /payin/v1/sites/{siteId}/bills/{billId}

Статус счета

Запрос предназначен для получения деталей платежного счета. В успешном ответе приходит список данных по счету и его платежам с запрошенным billId.

GET /payin/v1/sites/{siteId}/bills/{billId}/details

Получение списка платежей по счету

Получение списка платежей по счету

GET /payin/v1/sites/{siteId}/bills/{billId}

МОЖНО ИСПОЛЬЗОВАТЬ: Статус счета

Платеж

Запрос создает платежную транзакцию.

PUT /payin/v1/sites/{siteId}/payments/{paymentId}

ПОКА НЕ ПРИГОДИЛСЯ

Статус платежа

Получить информацию о платежной транзакции.

GET /payin/v1/sites/{siteId}/payments/{paymentId}

ПОКА НЕ ПРИГОДИЛСЯ

МОЖНО ИСПОЛЬЗОВАТЬ: Статус счета

Завершение аутентификации клиента

После успешного прохождения дополнительной аутентификации, ТСП необходимо отправить запрос с параметрами соответствующими типу дополнительной аутентификации для завершения проверки.

POST /payin/v1/sites/{siteId}/payments/{paymentId}/complete

ПОКА НЕ ПРИГОДИЛСЯ

Подтверждение платежа

Подтверждает платеж после холдирования средств. Если используется двухшаговый сценарий, то мерчанту необходимо отправить этот запрос после авторизации платежа.

PUT /payin/v1/sites/{siteId}/payments/{paymentId}/captures/{captureId}

ПОКА НЕ ПРИГОДИЛСЯ

Статус подтверждения

Запрашивает статус указанного подтверждения платежа.

GET /payin/v1/sites/{siteId}/payments/{paymentId}/captures/{captureId}

ПОКА НЕ ПРИГОДИЛСЯ

Операция возврата

Запрос предназначен для возврата средств по завершенному платежу. ТСП может выполнить несколько запросов для возврата частичных сумм.

PUT /payin/v1/sites/{siteId}/payments/{paymentId}/refunds/{refundId}

ПОКА НЕ ПРИГОДИЛСЯ

Install

Composer

composer require terentev-space/qiwi-php-client

Usage

  1. Set up QIWI: https://developer.qiwi.com/ru/payments/#start
  2. Connect the library
  3. Prepare
// Factories
$configFactory = new \QiwiClient\Factories\ConfigFactory();
$clientFactory = new \QiwiClient\Factories\ClientFactory();

// Make Config
$config = $configFactory->make(
    'siteId',
    'token',
    'publicKey' // optional
);
/* OR */
$config = new \QiwiClient\Entities\ClientConfig(
    'siteId',
    'publicKey',
    'token'
);

// Make Client
$client = $clientFactory->make(
    'siteId',
    'token',
    'publicKey' // optional
);
/* OR */
$client = Qiwi::client(
    'siteId',
    'token'
);
/* OR */
$client = new \QiwiClient\Client(
    $config,
    new \GuzzleHttp\Client(),
    new \Psr\Log\NullLogger()
);
  1. Use
$billId = '...';

$amount = 1.01;
/* OR */
$amount = 1.019; // = 1.01

$currency = Qiwi::CURRENCY_RUB;
/* OR */
$currency = 'RUB';

$expiration = null; // +1 day
/* OR */
$expiration = '2022-01-01T00:00:00+00:00';
/* OR */
$expiration = new DateTime();
/* OR */
$expiration = $datetime->format(\QiwiClient\Qiwi::DATETIME_FORMAT);

$flags = [
    \QiwiClient\Qiwi::FLAG_SALE, // optional
    \QiwiClient\Qiwi::FLAG_BIND_PAYMENT_TOKEN, // optional
];

$account = 'string(64) - id';
$email = 'string(64) or null - email';
$phone = 'string(15) or null - phone';

$country = 'string(1000) or null';
$city = 'string(1000) or null';
$region = 'string(1000) or null';
$details = 'string(1000) or null';

$pan = 'string(19) or null';
$wallet = 'string(64) or null';
$inn = 'string(12) or null';
$phone = 'string(15) or null';
$bankAccount = 'string(20) or null';
$bic = 'string(9) or null';

$cf1 = 'string(256) or null';
$cf2 = 'string(256) or null';
$cf3 = 'string(256) or null';
$cf4 = 'string(256) or null';
$cf5 = 'string(256) or null';
$merchantThemeCode = 'string(256) or null';
$merchantContractId = 'string(256) or null';
$merchantBookingNumber = 'string(256) or null';
$merchantPhone = 'string(256) or null';
$merchantFullName = 'string(256) or null';
$invoiceCallbackUrl = 'string(256) or null';

/** @var array $cheque Данные чека для операции. */
$cheque = [/* ... */];

$request = PaySiteBillQuery::make($billId, $amount, $currency)
    ->setExpirationDateTime($expiration) // optional
    ->setFlags(...$flags) // optional
    ->setCustomer(
        $account,
        $email, // optional
        $phone // optional
    ) // optional
    ->setAddress(
        $country, // optional
        $city, // optional
        $region, // optional
        $details // optional
    ) // optional
    ->setReceiverData(
        $pan, // optional
        $wallet, // optional
        $inn, // optional
        $phone, // optional
        $bankAccount, // optional
        $bic // optional
    ) // optional
    ->setCustomFields(
        $cf1, // optional
        $cf2, // optional
        $cf3, // optional
        $cf4, // optional
        $cf5, // optional
        $merchantThemeCode, // optional
        $merchantContractId, // optional
        $merchantBookingNumber, // optional
        $merchantPhone, // optional
        $merchantFullName, // optional
        $invoiceCallbackUrl // optional
    ) // optional
    ->setCheque($cheque)
;
/* OR */
$request = [
    'billId' => $billId,
    'amount' => [
        'value' => $amount,
        'currency' => $currency,
    ],
    'expirationDateTime' => $expiration,
    'flags' => $flags,
    'customer' => [
        'account' => $account,
        'email' => $email,
        'phone' => $phone,
    ],
    'address' => [
        'country' => $country,
        'city' => $city,
        'region' => $region,
        'details' => $details,
    ],
    'receiverData' => [
        'pan' => $pan,
        'wallet' => $wallet,
        'inn' => $inn,
        'phone' => $phone,
        'bankAccount' => $bankAccount,
        'bic' => $bic,
    ],
    'customFields' => [
        'cf1' => $cf1,
        'cf2' => $cf2,
        'cf3' => $cf3,
        'cf4' => $cf4,
        'cf5' => $cf5,
        'merchantThemeCode' => $merchantThemeCode,
        'merchantContractId' => $merchantContractId,
        'merchantBookingNumber' => $merchantBookingNumber,
        'merchantPhone' => $merchantPhone,
        'merchantFullName' => $merchantFullName,
        'invoiceCallbackUrl' => $invoiceCallbackUrl,
    ],
    'cheque' => $cheque,
];

$response = $client->paySiteBill($request);
$response->getCode(); // Response code 200
$response->getBody(); // Response data array
/** @var \QiwiClient\Entities\Results\PaySiteBillResult $data */
$data = $response->parseData();

// ...
$billId = $data->getBillId();
// 1.01
$amount = $data->getAmountValue();
// RUB
$currency = $data->getAmountCurrency();
// 2000-00-00T00:00:00+00:00
$exp = $data->getExpirationDateTime();
// 00000000-0000-0000-0000-000000000000
$invoice = $data->getInvoiceUid();
// CREATED
$status = $data->getStatusValue();
// 2000-00-00T00:00:00+00:00
$statusChanged = $data->getStatusChangedDateTime();
// https://oplata.qiwi.com/form?invoiceUid=00000000-0000-0000-0000-000000000000
$url = $data->getPayUrl();

$response = $client->getSiteBillDetails('1663126085');
$response->getCode(); // Response code 200
$response->getBody(); // Response data array
/** @var \QiwiClient\Entities\Results\GetSiteBillDetailsResult $data */
$data = $response->parseData();

// ...
$billId = $data->getBillId();
// 1.01
$amount = $data->getAmountValue();
// RUB
$currency = $data->getAmountCurrency();
// CREATED
$status = $data->getStatusValue();
// 2000-00-00T00:00:00+00:00
$statusChanged = $data->getStatusChangedDateTime();
/* ... */
// https://oplata.qiwi.com/form?invoiceUid=00000000-0000-0000-0000-000000000000
$url = $data->getPayUrl();

/** @var \QiwiClient\Entities\Items\SiteBillPayment $payment */
$payment = $data->getPayments()[0];

// siteId
$siteId = $payment->getSiteId();
// ...
$billId = $payment->getBillId();
// 1.01
$amount = $payment->getAmountValue();
// RUB
$currency = $payment->getAmountCurrency();
// CREATED
$status = $payment->getStatusValue();
/* ... */
// []
$status = $payment->getCustomFields();

Доработка библиотеки

  1. В библиотеке присутствует Dockerfile, сбилдить образ докера можно так: docker build -t "qiwi-php-client" .
  2. Запускать докер-контейнер можно так: docker run -it -v $(pwd):/qiwi-php-client qiwi-php-client bash
  3. При первом запуске надо подтянуть зависимости, в контейнере выполнить: composer install
  4. Настроено тестовое окружение, для его работы неоходимо скопировать файл phpunit.xml.dist в phpunit.xml
  5. Запуск тестов в контейнере: ./vendor/bin/phpunit

Credits

License

The MIT License. Please see License File for more information.

terentev-space/qiwi-php-client 适用场景与选型建议

terentev-space/qiwi-php-client 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 199 次下载、GitHub Stars 达 3, 最近一次更新时间为 2022 年 09 月 14 日, 在 PHP 生态内属于活跃度较高的组件。

它主要适用于以下技术方向: 「php」 「api」 「client」 「qiwi」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。

我们在过去多个企业项目中使用过 terentev-space/qiwi-php-client 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 terentev-space/qiwi-php-client 我们能提供哪些服务?
定制开发 / 二次开发

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

BUG 修复 & 性能优化

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

项目外包 & 长期维护

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

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

统计信息

  • 总下载量: 199
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 3
  • 点击次数: 17
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

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

其他信息

  • 授权协议: MIT
  • 更新时间: 2022-09-14