用于集成到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 和仓库实现了 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 方法的库。