pagos360 / sdk-php
用于集成到 Pagos360.com 的 SDK
Requires
- php: >=7.1
- ext-curl: *
- ext-json: *
- doctrine/collections: ^1.6
- guzzlehttp/guzzle: ^7.2
- psr/log: ^1.1
Requires (Dev)
- monolog/monolog: ^1.24
- neronmoon/scriptsdev: ^0.1.6
- phpstan/phpstan: ^0.11.8
- phpunit/phpunit: ^8.2
- slevomat/coding-standard: ^5.0
- squizlabs/php_codesniffer: ^3.4
- vimeo/psalm: ^3.9
This package is auto-updated.
Last update: 2024-09-29 00:37:10 UTC
README
通过 Pagos360 进行交易的 SDK
安装
应该使用以下命令通过 Composer 进行安装
composer require pagos360/sdk-php
简介
此 SDK 以类似 ORM 的方式工作,使用类似仓库的设计来生成基于 API JSON 响应的本地对象。
虽然 SDK 的目标是简化集成过程,但它不能替代 开发者文档。
初始化
要开始从代码中使用 SDK,提供了一个 \Pagos360\Sdk 类,它仅接受一个参数,即从 Pagos360 网站门户的“集成”菜单中生成的 API KEY。
$sdk = new \Pagos360\Sdk('API_KEY_VALUE');
或者,如果您已配置环境变量
$sdk = new \Pagos360\Sdk(getenv('API_KEY_VAR_NAME'));
要检查 API KEY 是否配置正确,可以使用账户仓库。
$account = $sdk->account->get(); var_dump($account);
如果一切正常,$account 应该是 \Pagos360\Models\Account 类的实例。
模型
支付请求
创建
$paymentRequest = new \Pagos360\Models\PaymentRequest(); $paymentRequest ->setFirstTotal(13.53) ->setFirstDueDate(new DateTimeImmutable('tomorrow')) ->setDescription('Creada por SDK') ->setPayerName('Matias Pino') ; $paymentRequest = $sdk->paymentRequests->create($paymentRequest);
排除渠道
为了便于排除渠道,在 \Pagos360\Constants 类中提供了常量。由于 Pagos360 平台正在积极开发中,将来可能会添加更多 SDK 中尚未支持的渠道类型。在这种情况下,可以使用表示新值的字符串。
$paymentRequest->setExcludedChannels([ \Pagos360\Constants::CHANNEL_CREDIT_CARD, 'tipo_de_canal_nuevo', ]);
排除分期付款
将被省略的分期付款的数字(仅适用于信用卡支付方式)。
$paymentRequest->setExcludedInstallments([1, 3, 6]);
排除卡品牌
将被省略的卡品牌的代码。可能的值:获取计划和分期付款端点的 code 字段(仅适用于信用卡支付方式)。
$paymentRequest->setExcludedCardBrands([1, 5, 10]);
按 id 搜索
$paymentRequest = $sdk->paymentRequests->get(179960);
结果
支付请求的结果封装在一个 \Doctrine\Common\Collections\ArrayCollection 类型的对象中,该对象包含一个 \Pagos360\Models\Result 模型的实例集合。如果请求没有结果,该方法将返回 null。
$paymentRequest = $sdk->paymentRequests->get(234741); $collectedResult = $sdk->paymentRequests->findCollectedResult($paymentRequest); echo sprintf( 'Solicitud de Pago %s pagada mediante %s. Monto: $%s.%s', $paymentRequest->getId(), $collectedResult->getChannel(), $collectedResult->getAmount(), PHP_EOL ); $metadata = $collectedResult->getPaymentMetadata(); if (!empty($metadata)) { echo sprintf( 'Pagada con tarjeta terminada en %s. Cuotas: %s ($%s).%s', $metadata->getCardLastFourDigits(), $metadata->getInstallments(), $metadata->getInstallmentAmount(), PHP_EOL ); }
实用函数
验证请求是否已支付
$paymentRequest = $sdk->paymentRequests->get(179960); $isPaid = $sdk->paymentRequests->isPaid($paymentRequest);
或者,可以使用此函数,如果尚未支付,则会抛出异常。
$paymentRequest = $sdk->paymentRequests->get(179960); $sdk->paymentRequests->assertIsPaid($paymentRequest);
CBU借记请求
创建
$request = new \Pagos360\Models\DebitRequest(); $request ->setAdhesion($adhesion) ->setFirstDueDate(new DateTimeImmutable('+1 month')) ->setFirstTotal(13.53) ; $sdk->debitRequests->create($request);
虽然建议获取同意并验证其状态是否为已签署,但可以按以下方式生成一个同意的模拟
$request->setAdhesion(new \Pagos360\Models\Adhesion(['id' => 25]))
按 id 搜索
$debitRequest = $sdk->debitRequests->get(182760);
结果
借记请求的结果封装在一个类型为\Doctrine\Common\Collections\ArrayCollection的对象中,该对象包含一个Result模型实例的集合。如果请求没有任何结果,则此方法将返回null。
$debitRequest = $sdk->debitRequests->get(185027); $collectedResult = $sdk->debitRequests->findCollectedResult($debitRequest); echo sprintf( 'Solicitud de Debito %s pagada. Monto: $%s.%s', $paymentRequest->getId(), $collectedResult->getAmount(), PHP_EOL );
取消
$originalDebitRequest = $sdk->debitRequests->get($debitRequestId); $debitRequest = $sdk->debitRequests->cancel($originalDebitRequest);
CBU同意
创建
$adhesion = new \Pagos360\Models\Adhesion(); $adhesion ->setAdhesionHolderName('Matias Pino') ->setExternalReference('8354') ->setCbuNumber('0000000000000000000000') ->setCbuHolderIdNumber(11111111) ->setCbuHolderName('Matias Pino') ->setEmail('pagos360@example.com') ->setDescription('Creada por SDK') ->setShortDescription('P360') ; $adhesion = $sdk->adhesions->create($adhesion);
按 id 搜索
$adhesion = $sdk->adhesions->get(25);
取消
$adhesion = $sdk->adhesions->get(25); $adhesion = $sdk->adhesions->cancel($adhesion);
卡片借记请求
创建
$cardAdhesion = $sdk->cardAdhesions->get(1488); $cardDebitRequest = new \Pagos360\Models\CardDebitRequest(); $cardDebitRequest ->setCardAdhesion($cardAdhesion) ->setMonth(4) ->setYear(2021) ->setAmount(13.53) ; $cardDebitRequest = $sdk->cardDebitRequests->create($cardDebitRequest);
按 id 搜索
$cardDebitRequest = $sdk->cardDebitRequests->get(652641);
结果
取消
$cardDebitRequest = $sdk->cardDebitRequests->get(652641); $cardDebitRequest = $sdk->cardDebitRequests->cancel($cardDebitRequest);
卡片同意
创建
$cardAdhesion = new \Pagos360\Models\CardAdhesion(); $cardAdhesion ->setAdhesionHolderName('Matias Pino') ->setEmail('pagos360@example.com') ->setDescription('Creada por SDK') ->setExternalReference('210000013847') ->setCardNumber() ->setCardHolderName('Matias Pino') ; $cardAdhesion = $sdk->cardAdhesions->create($cardAdhesion);
按 id 搜索
$cardAdhesion = $sdk->cardAdhesions->get(1467);
取消
$cardAdhesion = $sdk->cardAdhesions->get(1467); $sdk->cardAdhesions->cancel($ad);
收款报告
按日期搜索
$collectionReport = $sdk->collectionReports->get( new DateTimeImmutable('2018-11-29') );
数据
收款报告的数据封装在一个类型为\Doctrine\Common\Collections\ArrayCollection的对象中,该对象包含一个\Pagos360\Models\CollectionData模型实例的集合。
foreach ($collectionReport->getData() as $data) { /** @var \Pagos360\Models\CollectionData $data */ $paymentDate = $data->getPaymentDate(); }
退票报告
按日期搜索
$chargebackReport = $sdk->chargebackReports->get( new DateTimeImmutable('2018-11-29') );
数据
收款报告的数据封装在一个类型为\Doctrine\Common\Collections\ArrayCollection的对象中,该对象包含一个\Pagos360\Models\ChargebackData模型实例的集合。
foreach ($chargebackReport->getData() as $data) { /** @var \Pagos360\Models\ChargebackData $data */ $requestId = $data->getRequestId(), ); }
报销报告
按日期搜索
$settlementReport = $sdk->settlementReports->get( new DateTimeImmutable('2019-04-16') );
数据
收款报告的数据封装在一个类型为\Doctrine\Common\Collections\ArrayCollection的对象中,该对象包含一个\Pagos360\Models\SettlementData模型实例的集合。
foreach ($settlementReport->getData() as $data) { /** @var \Pagos360\Models\SettlementData $data */ $requestId = $data->getRequestId(), ); }
账户
获取
$account = $sdk->account->get();
其他
日志
SDK类、RestClient和存储库实现了LoggerAwareInterface接口,该接口来自PSR-3。
$logger = new \Monolog\Logger('Pagos360 SDK'); $logger->pushHandler(new \Monolog\Handler\StreamHandler(STDOUT)); $sdk->setLogger($logger);
如果想要为不同的部分使用不同的日志记录器,可以按以下方式指定
$restClientLogger = new \Monolog\Logger('Pagos360 RestClient'); $sdk->getRestClient()->setLogger($restClientLogger); $paymentRequestLogger = new \Monolog\Logger('Pagos360 PaymentRequest'); $sdk->paymentRequests->setLogger($paymentRequestLogger);
SDK中还存在一个setLoggerAndPropagate方法,该方法会将日志记录器复制到RestClient和所有存储库。
$logger = new \Monolog\Logger('Pagos360 SDK'); $logger->pushHandler(new \Monolog\Handler\StreamHandler(STDOUT)); $sdk->setLoggerAndPropagate($logger);
在这些示例中使用了Monolog库,但可以使用任何实现PSR-3中声明的LoggerInterface方法的库。