vitorccs/bradesco-api-php

Bradesco在线汇票API的PHP SDK

v1.6.2 2022-10-17 21:13 UTC

This package is not auto-updated.

Last update: 2024-09-17 05:56:03 UTC


README

Bradesco在线汇票API的PHP SDK

要求

  • PHP >= 7.1

描述

PHP SDK,用于与Bradesco在线汇票登记服务集成

Manual_Registro_de_Boleto_Bancario_Online_Janeiro 2019.pdf

安装

通过Composer

composer require vitorccs/bradesco-api-php

参数

如何使用

  1. 参数可以通过环境变量设置
putenv('BRADESCO_SANDBOX=true');
putenv('BRADESCO_TIMEOUT=20');
putenv('BRADESCO_CERT_PATH=myCertificate.pfx');
putenv('BRADESCO_CERT_PASSWORD=myPassword');

或通过array传递

\BradescoApi\Http\Bradesco::setParams([
    'BRADESCO_SANDBOX' => true,
    'BRADESCO_TIMEOUT' => 20,
    'BRADESCO_CERT_PATH' => 'myCertificate.pfx',
    'BRADESCO_CERT_PASSWORD' => 'myPassword'
]);
  1. 然后,只需使用以下命令,将汇票数据以array格式传递。
$boleto = \BradescoApi\BankSlip::create($data);

数据标准化

添加了多个函数以根据Bradesco API的要求标准化数据

  • 缺失的字段使用其默认值填充(手册第19页)。
  • null值被替换为空字符串""。
  • integerfloat值被转换为字符串。
  • 包含特殊字符的值被替换为基本字符。
  • 付款人和地址的名称被截断到最大字符数。
  • 日期格式为"yyyy-mm-dd"或"dd/mm/yyyy"的日期被标准化为"dd.mm.yyyy"。
  • 货币格式为14.90或"14,90"的货币被标准化为"1490"。
  • CPF和CNPJ号码"123.456.789-01"被标准化为"00012345678901"。

实现示例

error_reporting(E_ALL);
ini_set('display_errors', 1);

require __DIR__.'/vendor/autoload.php';

putenv('BRADESCO_SANDBOX=true');
putenv('BRADESCO_TIMEOUT=20');
putenv('BRADESCO_CERT_PATH=myCertificate.pfx');
putenv('BRADESCO_CERT_PASSWORD=myPassword');

use BradescoApi\Exceptions\BradescoApiException;
use BradescoApi\Exceptions\BradescoRequestException;

$data = [
  "nuCPFCNPJ" => "123456789",
  "filialCPFCNPJ" => "0001",
  "ctrlCPFCNPJ" => "39",
  "idProduto" => "09",
  "nuNegociacao" => "123400000001234567",
  "nuCliente" => "123456",
  "dtEmissaoTitulo" => "25/05/2017",
  "dtVencimentoTitulo" => "2017-06-20",
  "vlNominalTitulo" => 100.00,
  "cdEspecieTitulo" => "04",
  "nomePagador" => "Cliente Teste",
  "logradouroPagador" => "Rua Teste",
  "nuLogradouroPagador" => "90",
  "complementoLogradouroPagador" => null,
  "cepPagador" => "12345",
  "complementoCepPagador" => "500",
  "bairroPagador" => "Bairro Teste",
  "municipioPagador" => "Cidade Teste",
  "ufPagador" => "SP",
  "nuCpfcnpjPagador" => "549.435.260-98",
];

try {
    $bankSlip = \BradescoApi\BankSlip::create($data);
    print_r($bankSlip);
} catch (BradescoApiException $e) { // erros retornados pela API Bradesco
    echo $e->getErrorCode() == 69 // este é o único código de erro que não exige tratativa
         ? "API Bradesco indica que boleto já foi registrado"
         : sprintf("%s (%s)", $e->getMessage(), $e->getErrorCode());
} catch (BradescoRequestException $e) { // erros não tratados (erros HTTP 4xx e 5xx)
    echo sprintf("%s (%s)", $e->getMessage(), $e->getErrorCode());
} catch (\Exception $e) { // demais erros
    echo $e->getMessage();
}

提示

  • 即使在Sandbox环境中,也必须使用正确的证书文件和密码,并使用实际受益人的数据(nuCPFCNPJ,filialCPFCNPJ,ctrlCPFCNPJ,nuNegociacao)。此外,您的汇票钱包已授权给Bradesco以使用在线登记API。
  • 与任何服务一样,Bradesco API没有100%的可用性。建议存储成功状态,并预测对未返回成功的案例的处理。
  • 当检测到Bradesco API返回的错误消息时,抛出BradescoApiException异常,并抛出BradescoRequestException异常以处理服务器和连接问题(HTTP 4xx和5xx错误)
  • 唯一不需要重试的异常是代码69,因为它表示汇票已注册

OpenSSL 3

从OpenSSL 3版本开始,.pfx证书可能会出现读取错误,需要启用"legacy"模式(查看StackOverflow

测试

如果您想贡献,请实现PHPUnit单元测试。

为了执行

  1. 将phpunit.xml.dist复制到项目根目录中的phpunit.xml
  2. 使用您的访问数据更改ENV参数
  3. 在项目目录的终端中执行以下命令
composer test