comgate/sdk
Composer 安装命令:
composer require comgate/sdk
包简介
Comgate PHP SDK
README 文档
README
💰 PHP library for communication with Comgate.
Getting Started
Installation
To install latest version of comgate/sdk use Composer.
composer require comgate/sdk
You have to install php-xml extension on your PHP server (e.g.: Ubuntu: apt-get install php-xml).
Documentation
- https://help.comgate.cz/docs/en/api-protocol-en (english version)
- https://help.comgate.cz/docs/api-protokol (czech version)
Registration
- At first register your account at our side comgate.cz.
- You will get merchant indentificator and secret.
- Allow your eshop server IPv4 address at portal.comgate.cz.
- Set PAID, CANCELLED, PENDING and STATUS URL at portal.comgate.cz.
Usage
Setup client
use Comgate\SDK\Comgate; $client = Comgate::defaults() ->setMerchant('123456') // get on portal.comgate.cz ->setSecret('foobarbaz') // get on portal.comgate.cz ->createClient();
Create payment
use Comgate\SDK\Entity\Codes\CategoryCode; use Comgate\SDK\Entity\Codes\CurrencyCode; use Comgate\SDK\Entity\Codes\DeliveryCode; use Comgate\SDK\Entity\Codes\PaymentMethodCode; use Comgate\SDK\Entity\Money; use Comgate\SDK\Entity\Payment; use Comgate\SDK\Utils\Helpers; use Comgate\SDK\Entity\Codes\RequestCode; use Comgate\SDK\Exception\ApiException; $payment = new Payment(); $payment ->setPrice(Money::ofInt(50)) // 50 CZK ->setPrice(Money::ofFloat(50.25)) // 50,25 CZK ->setPrice(Money::ofCents(5025)) // 50,25 CZK // ----- ->setCurrency(CurrencyCode::CZK) ->setLabel('Test item') // or ->setParam('label', 'Test item') // you can pass all params like this ->setReferenceId('test001') ->setEmail('foo@bar.tld') ->addMethod(PaymentMethodCode::ALL) //->setRedirect() //->setIframe() ->setTest(false) ->setFullName('Jan Novák') ->setCategory(CategoryCode::PHYSICAL_GOODS_ONLY) ->setDelivery(DeliveryCode::HOME_DELIVERY) ->setInitRecurring(true) // Marks as the initial payment in a recurring series ->setInitRecurringId('XXXX-YYYY-ZZZZ'); // For subsequent recurring payments. Do not combine with setInitRecurring try { // Used when creating subsequent recurring payments instead of createPayment // $createPaymentResponse = $client->initRecurringPayment($payment); $createPaymentResponse = $client->createPayment($payment); if ($createPaymentResponse->getCode() === RequestCode::OK) { // Redirect the payer to Comgate payment gateway (use proper method of your framework) Helpers::redirect($createPaymentResponse->getRedirect()); } else { var_dump($createPaymentResponse->getMessage()); } } catch (ApiException $e) { var_dump($e->getMessage()); }
Example of successfull response for $client->createPayment.
$transactionId = $createPaymentResponse->getTransId(); // XXXX-YYYY-ZZZZ $code = $createPaymentResponse->getCode(); // 0 $message = $createPaymentResponse->getMessage(); // OK $redirect = $createPaymentResponse->getRedirect(); // https://payments.comgate.cz/client/instructions/index?id=XXXX-YYYY-ZZZZ
Example of error response for $client->createPayment.
$code = $e->getCode(); // 1109 $message = $e->getMessage(); // Invalid payment method [fake]
Get methods
use Comgate\SDK\Exception\ApiException; try { $methodsResponse = $client->getMethods(); foreach ($methodsResponse->getMethodsList() as $method) { var_dump([ $method->getId(), $method->getName(), $method->getDescription(), $method->getLogo(), $method->getGroup(), $method->getGroupLabel(), ]); } } catch (ApiException $e) { var_dump($e->getMessage()); }
Finish the order and show payment status to returning payer
- Example PAID URL: https://your-eshop.tld/order-finish.php?id=${id}&refId=${refId}&status=PAID
- Example PAID CANCELLED: https://your-eshop.tld/order-finish.php?id=${id}&refId=${refId}&status=CANCELLED
- Example PAID PENDING: https://your-eshop.tld/order-finish.php?id=${id}&refId=${refId}&status=PENDING
use Comgate\SDK\Entity\Payment; use Comgate\SDK\Entity\PaymentNotification; use Comgate\SDK\Entity\Codes\PaymentStatusCode; $transactionId = $_GET['id']; // XXXX-YYYY-ZZZZ $refId = $_GET['refId']; // your order number try { $paymentStatusResponse = $client->getStatus($transactionId); switch ($paymentStatusResponse->getStatus()){ case PaymentStatusCode::PAID: // Your code (set order as paid) echo "Your payment was PAID successfully."; break; case PaymentStatusCode::CANCELLED: // Your code (set order as cancelled) echo "Your order was CANCELLED."; break; case PaymentStatusCode::PENDING: // Your code (order is still pending) echo "We are waiting for the payment."; break; case PaymentStatusCode::AUTHORIZED: // Your code (set order as authorized) echo "Payment was authorized successfully."; break; } } catch (ApiException $e) { var_dump($e->getMessage()); }
Receive payment notification (server-to-server)
Example URL: https://your-eshop.tld/notify.php
use Comgate\SDK\Entity\PaymentNotification; use Comgate\SDK\Entity\Codes\PaymentStatusCode; use Comgate\SDK\Exception\ApiException; // Create from $_POST global variable // $notification = PaymentNotification::createFromGlobals(); // Create from your framework $data = $framework->getHttpRequest()->getPostData(); // Use PaymentNotification only for getting transactionId // For other details about payment please use $client->getStatus with appropriate getter $notification = PaymentNotification::createFrom($data); $transactionId = $notification->getTransactionId(); try { // it's important to check the status from API $paymentStatusResponse = $client->getStatus($transactionId); switch ($paymentStatusResponse->getStatus()){ case PaymentStatusCode::PAID: // Your code (set order as paid) break; case PaymentStatusCode::CANCELLED: // Your code (set order as cancelled) break; case PaymentStatusCode::AUTHORIZED: // Your code (set order as authorized) break; // PaymentStatusCode::PENDING - is NOT send via push notification } echo "OK"; // important response with HTTP code 200 } catch (ApiException $e) { if ($e->getCode() >= 500 && $e->getCode() < 600) { // map error codes to something sensible $status = 502; } else { $status = 400; } http_response_code($status); // set the response code to server and print the error to the screen print_r([ 'error' => true, 'code' => $status, 'message' => $e->getMessage() ]); }
Create a refund
use Comgate\SDK\Entity\Refund; use Comgate\SDK\Exception\ApiException; use Comgate\SDK\Entity\Money; use Comgate\SDK\Entity\Codes\RequestCode; $refund = new Refund(); $refund->setTransId('XXXX-YYYY-ZZZZ') ->setAmount(Money::ofCents(100)) ->setRefId('11bb22'); try{ $refundResult = $client->refundPayment($refund); if($refundResult->getCode() == RequestCode::OK) { // refund created successfully } } catch (ApiException $e){ var_dump($e->getMessage()); }
Create terminal CloudPOS payment
API Documentation
https://apidoc.comgate.cz/api/rest-terminal
use Comgate\SDK\Comgate; use Comgate\SDK\Entity\Codes\CurrencyCode; use Comgate\SDK\Entity\Codes\RequestCode; use Comgate\SDK\Entity\Money; use Comgate\SDK\Entity\TerminalPayment; use Comgate\SDK\Entity\TerminalRefund; use Comgate\SDK\Exception\ApiException; $clientTerminal = Comgate::defaults() ->setMerchant('123456') // get on portal.comgate.cz ->setSecret('foobarbaz') // get on portal.comgate.cz ->createTerminalClient(); $terminalPayment = new TerminalPayment(); $terminalPayment ->setPrice(Money::ofInt(4)) ->setCurr(CurrencyCode::CZK) ->setRefId('123456'); try { $createTerminalPaymentResponse = $clientTerminal->createPayment($terminalPayment); if ($createTerminalPaymentResponse->getCode() === RequestCode::OK) { // save ID of terminal payment in your system echo 'created terminal payment: ' . $createTerminalPaymentResponse->getTransId(); } else { var_dump($createTerminalPaymentResponse->getMessage()); } } catch (ApiException $e) { var_dump($e->getMessage()); }
Debugging
Logging
We are using PSR-3 for logging.
use Comgate\SDK\Comgate; use Comgate\SDK\Logging\FileLogger; use Comgate\SDK\Logging\StdoutLogger; $client = Comgate::defaults() ->setLogger(new FileLogger(__DIR__ . '/comgate.log')) ->createClient();
Take a look at our tests to see the logger format.
Maintenance
If you find a bug, please submit the issue in Github directly.
Thank you for using our Comgate payment.
License
Copyright (c) 2024 Comgate a.s. MIT Licensed.
comgate/sdk 适用场景与选型建议
comgate/sdk 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 375.59k 次下载、GitHub Stars 达 13, 最近一次更新时间为 2023 年 01 月 06 日, 在 PHP 生态内属于活跃度较高的组件。
它主要适用于以下技术方向: 「php」 「api」 「payment」 「money」 「comgate」 等业务场景。在实际项目中,围绕这些方向常见需要落地的问题包括:接口对接、性能调优、并发安全、与既有框架(Laravel / ThinkPHP / Yii / Webman 等)的兼容适配,以及生产环境的日志埋点与稳定性保障。
我们在过去多个企业项目中使用过 comgate/sdk 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。
基于 comgate/sdk 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。
线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。
承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。
与 comgate/sdk 相关的其它包
同方向 / 同关键字的高下载量 PHP Composer 包推荐,方便对比选型:
A PSR-7 compatible library for making CRUD API endpoints
Alfabank REST API integration
Zero-dependency raw PHP DNS resolver, domain-ownership verification, and intoDNS/MxToolbox-style diagnostics. Queries authoritative nameservers directly over sockets — never trusts the recursive cache for ownership checks.
A lightweight plain-PHP framework for database-backed CRUD APIs.
bughq error tracking - PHP SDK
TrinkPOS Sanal POS (Virtual POS) API client for PHP
统计信息
- 总下载量: 375.59k
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 13
- 点击次数: 29
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-01-06