pagos360 / sdk
用于集成到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 05:42:23 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 和仓库实现了 PSR-3 中的 LoggerAwareInterface
接口。
$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 中声明的 LoggerInterface
方法的库。