pagos360/sdk-php

用于集成到 Pagos360.com 的 SDK

v1.0.7 2021-12-28 18:55 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方法的库。