方便PHP与Stark Bank API集成的SDK

2.18.0 2024-09-18 18:58 UTC

README

欢迎使用Stark Bank PHP SDK!此工具专为希望轻松集成我们API的PHP开发者设计。此SDK版本与Stark Bank API v2兼容。

如果您对Stark Bank一无所知,请访问我们的网站,发现一个接收或发起付款就像向客户发送短信一样简单的世界!

简介

索引

支持的PHP版本

本库支持以下PHP版本

  • PHP 7.1
  • PHP 7.2
  • PHP 7.3
  • PHP 7.4
  • PHP 8.0
  • PHP 8.1

Stark Bank API 文档

请查看我们的API文档

版本控制

本项目遵循以下版本模式

给定版本号MAJOR.MINOR.PATCH,增量

  • MAJOR版本当API版本增加时。这可能包括向后不兼容的更改;
  • MINOR版本当引入重大变更或以向后兼容的方式添加新功能时;
  • PATCH版本当实现向后兼容的错误修复时。

设置

1. 安装我们的SDK

1.1 Composer:要使用Composer安装包,请运行

composer require starkbank/sdk

要使用绑定,请使用Composer的自动加载

require_once('vendor/autoload.php');

在手动安装中,您还需要获取以下依赖项

2. 创建您的私钥和公钥

我们使用ECDSA。这意味着您需要生成一个secp256k1私钥来签署您对API的请求,并注册您的公钥,以便我们可以验证这些请求。

您可以使用以下方法之一

2.1. 查看我们教程中的选项。

2.2. 使用我们的SDK

use StarkBank\Key;

list($privateKey, $publicKey) = Key::create();

# or, to also save .pem files in a specific path
list($privateKey, $publicKey) = Key::create("file/keys/");

注意:当您创建新的凭证时,建议您在将使用该凭证的基础设施内部创建密钥,以避免任何有风险的私钥互联网传输。然后您可以将公钥单独导出到将用于新项目创建的计算机上。

3. 注册您的用户凭证

您可以直接使用两种类型的用户与我们的API交互:项目和组织。

  • 项目是特定于工作空间的用户,即它们绑定到创建它们的那些工作空间。一个工作空间可以有多个项目。
  • 组织是通用用户,他们控制您的整个组织。他们可以控制所有工作空间,甚至创建新的工作空间。组织仅绑定到您的公司的税号。由于此用户在整个组织中是唯一的,因此只能将一个凭证链接到它。

3.1. 在沙箱中创建项目

3.1.1. 登录到Starkbank沙箱

3.1.2. 转到菜单 > 集成

3.1.3. 点击“新建项目”按钮

3.1.4. 创建项目:给它起一个名字并上传您在第2节中创建的公钥

3.1.5. 创建项目后,获取其项目ID

3.1.6. 使用项目ID和私钥创建以下对象

use StarkBank\Project;

// Get your private key from an environment variable or an encrypted database.
// This is only an example of a private key content. You should use your own key.
$privateKeyContent = "
-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIMCwW74H6egQkTiz87WDvLNm7fK/cA+ctA2vg/bbHx3woAcGBSuBBAAK
oUQDQgAE0iaeEHEgr3oTbCfh8U2L+r7zoaeOX964xaAnND5jATGpD/tHec6Oe9U1
IF16ZoTVt1FzZ8WkYQ3XomRD4HS13A==
-----END EC PRIVATE KEY-----
";

$project = new Project([
    "environment" => "sandbox",
    "id" => "5656565656565656",
    "privateKey" => $privateKeyContent
]);

3.2. 在沙盒中创建组织凭据

3.2.1. 登录Starkbank 沙盒

3.2.2. 前往菜单 > 集成

3.2.3. 点击“组织公钥”按钮

3.2.4. 上传第2节中创建的公钥(只有组织的法定代表人才可以上传公钥)

3.2.5. 点击您的个人照片,然后点击“组织”菜单以获取组织ID

3.2.6. 使用组织ID和私钥创建以下对象

use StarkBank\Organization;

// Get your private key from an environment variable or an encrypted database.
// This is only an example of a private key content. You should use your own key.
privateKeyContent = "
-----BEGIN EC PARAMETERS-----
BgUrgQQACg==
-----END EC PARAMETERS-----
-----BEGIN EC PRIVATE KEY-----
MHQCAQEEIMCwW74H6egQkTiz87WDvLNm7fK/cA+ctA2vg/bbHx3woAcGBSuBBAAK
oUQDQgAE0iaeEHEgr3oTbCfh8U2L+r7zoaeOX964xaAnND5jATGpD/tHec6Oe9U1
IF16ZoTVt1FzZ8WkYQ3XomRD4HS13A==
-----END EC PRIVATE KEY-----
";

$organization = new Organization([
    "environment" => "sandbox",
    "id" => "5656565656565656",
    "privateKey" => $privateKeyContent,
    "workspaceId" => null // You only need to set the workspaceId when you are operating a specific workspaceId
]);

// To dynamically use your organization credentials in a specific workspaceId,
// you can use the Organization::replace() method:
$balance = Balance::get(Organization::replace($organization, "4848484848484848"));

注意1:切勿将私钥硬编码。从环境变量或加密数据库中获取。

注意2:我们支持'sandbox''production'作为环境。

注意3:您在sandbox中注册的凭据在production中不存在,反之亦然。

4. 设置用户

有三种类型的用户可以访问我们的API:组织项目成员

  • 项目组织是为集成而设计的,是专为我们的SDK设计的。
  • 成员是您使用电子邮件登录我们的网页时使用的。

有两种方法将用户告知SDK

4.1 在所有函数中传递用户作为参数

use StarkBank\Balance;

$balance = Balance::get($project);  # or organization

4.2 在SDK中将它设置为默认用户

use StarkBank\Settings;
use StarkBank\Balance;

Settings::setUser($project);  # or organization

$balance = Balance::get();

只需选择最方便的传递用户的方式。在所有后续示例中,我们将假设已设置默认用户。

5. 设置错误语言

错误语言也可以像默认用户一样设置

use StarkBank\Settings;

Settings::setLanguage("en-US");

语言选项是“en-US”表示英语和“pt-BR”表示巴西葡萄牙语。默认为英语。

6. 资源列表和手动分页

几乎所有的SDK资源都提供了一个query和一个page函数。

  • query函数提供了一种简单直接的方式,可以有效地迭代所有符合您提供过滤器的结果,在您到达当前批次的末尾时,无缝地从API检索下一批元素。如果您不担心数据量或处理时间,这是您应该选择的方式。
use StarkBank\Transaction;

$transactions = Transaction::query([
    "after" => "2020-01-01",
    "before" => "2020-03-01"
]);

foreach($transactions as $transaction){
    print_r($transaction);
}
  • page函数让您完全控制API分页。每次函数调用,您都会收到最多100个结果和检索下一批元素的游标。这允许您在方便的时候停止查询并从上次离开的地方继续。当没有更多元素可检索时,返回的游标将是null
use StarkBank\Transaction;

$cursor = null;
while (true) { 
    list($page, $cursor) = Transaction::page($options = ["limit" => 5, "cursor" => $cursor]);
    foreach ($page as $transaction) {
        print_r($transaction);
    }
    if ($cursor == null) {
        break;
    }
}

为了简化以下SDK示例,我们只会使用query函数,但您也可以使用page

在沙箱中进行测试

您的初始余额为零。对于Stark Bank中的许多操作,您需要在您的账户中有资金,这些资金可以通过创建发票或Boleto添加到您的余额中。

在沙盒环境中,大多数创建的发票和Boleto将自动支付,因此您不需要做任何事情来添加资金到您的账户。只需创建一些发票并稍等片刻。

在生产环境中,您(或您的客户之一)需要实际支付此发票或Boleto,才能将资金借记到您的账户。

使用方法

以下是如何使用SDK的一些示例。如果您有任何疑问,请查看函数或类的docstring以获取更多信息,或直接查看我们的[API文档]。

创建交易

要在Stark Bank账户之间发送资金,您可以创建交易

use StarkBank\Transaction;

$transactions = Transaction::create([
    new Transaction([
        "amount" => 100,  # (R$ 1.00)
        "receiverId" => "1029378109327810",
        "description" => "Transaction to dear provider",
        "externalId" => "12345",  # so we can block anything you send twice by mistake
        "tags" => ["provider"]
    ]),
    new Transaction([
        "amount" => 234,  # (R$ 2.34)
        "receiverId" => "2093029347820947",
        "description" => "Transaction to the other provider",
        "externalId" => "12346",  # so we can block anything you send twice by mistake
        "tags" => ["provider"]
    ]),
]);

foreach($transactions as $transaction){
    print_r($transaction);
}

注意:您也可以不使用Transaction对象,直接以数组格式传递每个交易元素,而无需使用构造函数

查询交易

要了解您的余额变动(银行对账单),您可以查询交易。请注意,当您收到boleto付款、支付账单或进行转账等操作时,我们的系统会为您创建交易。

use StarkBank\Transaction;

$transactions = Transaction::query([
    "after" => "2020-01-01",
    "before" => "2020-03-01"
]);

foreach($transactions as $transaction){
    print_r($transaction);
}

获取交易

您可以通过交易ID获取特定的交易。

use StarkBank\Transaction;

$transaction = Transaction::get("5155165527080960");

print_r($transaction);

获取余额

要知道您工作空间中有多少钱,请运行

use StarkBank\Balance;

$balance = Balance::get();

print_r($balance);

创建转账

您还可以在SDK(TED/Pix)中创建转账,并根据其规则配置转账行为。

use StarkBank\Transfer;

$transfers = Transfer::create([
    new Transfer([
        "amount" => 100,
        "bankCode" => "033",  # TED
        "branchCode" => "0001",
        "accountNumber" => "10000-0",
        "taxId" => "012.345.678-90",
        "name" => "Tony Stark",
        "tags" => ["iron", "suit"]
    ]),
    new Transfer([
        "amount" => 200,
        "bankCode" => "20018183",  # Pix
        "branchCode" => "1234",
        "accountNumber" => "123456-7",
        "accountType" => "salary",
        "externalId" => "my-internal-id-12345",
        "taxId" => "012.345.678-90",
        "name" => "Jon Snow",
        "scheduled" => (new DateTime("now"))->add(new DateInterval("P1D")),
        "description" => "Transaction to dear provider",
        "tags" => [],
        "rules" => [
            new Transfer\Rule([
                "key" => "resendingLimit",  # Set maximum number of retries if Transfer fails due to systemic issues at the receiver bank
                "value" => 5                # Our resending limit is 10 by default
            ])
        ]
    ])
]);

foreach($transfers as $transfer){
    print_r($transfer);
}

注意:您也可以不使用Transfer对象,而是直接以数组格式传递每个转账元素,而不使用构造函数。

查询转账

您可以根据筛选条件查询多个转账。

use StarkBank\Transfer;

$transfers = Transfer::query([
    "after" => "2020-01-01",
    "before" => "2020-04-01"
]);

foreach($transfers as $transfer){
    print_r($transfer->name);
}

获取转账

要获取单个转账(通过其ID),请运行

use StarkBank\Transfer;

$transfer = Transfer::get("5155165527080960");

print_r($transfer);

取消计划中的转账

要取消单个计划中的转账(通过其ID),请运行

use StarkBank\Transfer;

$transfer = Transfer::delete("5155165527080960");

print_r($transfer);

获取转账PDF

您也可以通过传递其ID来检索转账PDF。此操作仅在转账状态为“处理中”或“成功”时有效。

use StarkBank\Transfer;

$pdf = Transfer::pdf("5155165527080960");

$fp = fopen('transfer.pdf', 'w');
fwrite($fp, $pdf);
fclose($fp);

请小心不要意外地对原始PDF内容应用任何编码,因为这可能在最终文件中产生异常结果,例如缺少图像和奇怪的字符。

查询转账日志

您可以通过查询转账日志来更好地了解转账的生命周期。

use StarkBank\Transfer;

$logs = Transfer\Log::query(["limit" => 50]);

foreach($logs as $log){
    print_r($log->id);
}

获取转账日志

您也可以通过其ID获取特定的日志。

use StarkBank\Transfer;

$log = Transfer\Log::get("5155165527080960");

print_r($log);

获取DICT密钥

您可以通过其ID获取Pix密钥的参数。

use StarkBank\DictKey;

$dictKey = DictKey::get();

print_r($dictKey);

查询您的DICT密钥

要查看与您的空间关联的Pix密钥,请运行以下命令

use StarkBank\DictKey;

$dictKeys = iterator_to_array(DictKey::query(["limit" => 1, "type" => "evp", "status" => "registered"]));

foreach($dictKeys as $dictKey) {
    print_r($dictKey);
}

查询Bacen机构

您可以通过巴西中央银行查询已注册的Pix和TED交易的机构。

use StarkBank\Institution;

$institutions = Institution::query(["search" => "stark"]);

foreach($institutions as $institution){
    print_r($institution);
}

创建发票

您可以创建动态二维码发票,向客户收费或从您在其他银行的账户中收款。

由于银行系统在处理日期(而不是datetime)时仅理解值修饰符(折扣、罚款和利息),因此,如果在使用“到期”和“折扣”字段中的日期,这些值将仅在最终用户银行界面中显示。

如果您使用datetime,我们的系统将以相同的方式应用值修饰符,但最终用户将只在他们的界面上看到最终应付金额。

此外,其他银行很可能只允许在定义了日期而不是datetime的发票上安排付款。

use StarkBank\Invoice;

$invoices = [
    new Invoice([
        "amount" => 400000,
        "due" => ((new DateTime("now"))->add(new DateInterval("P5D"))),
        "taxId" => "012.345.678-90",
        "name" => "Mr Meeseks",
        "expiration" => new DateInterval("P2D"),
        "fine" => 2.5,
        "interest" => 1.3,
        "discounts" => [
            [
                "percentage" => 5,
                "due" => ((new DateTime("now"))->add(new DateInterval("P1D")))
            ],
            [
                "percentage" => 3,
                "due" => ((new DateTime("now"))->add(new DateInterval("P2D")))
            ]
        ],
        "rules" => [
            new Invoice\Rule([
                "key" => "allowedTaxIds",       # Set TaxIds allowed to receive this Invoice
                "value" => [
                    "012.345.678-90"
                ]
            ])
        ],
        "tags" => [
            'War supply',
            'Invoice #1234'
        ],
        "descriptions" => [
            [
                "key" => "product A",
                "value" => "big"
            ],
            [
                "key" => "product B",
                "value" => "medium"
            ],
            [
                "key" => "product C",
                "value" => "small"
            ]
        ],
    ])
];

$invoice = Invoice::create($invoices)[0];

print_r($invoice);

注意:您也可以不使用Invoice对象,而是直接以数组格式传递每个发票元素,而不使用构造函数。

获取发票

创建后,可以按照其ID检索发票信息。其状态指示它是否已被支付。

use StarkBank\Invoice;

$invoice = Invoice::get("5656565656565656");

print_r($invoice);

获取发票二维码

创建后,可以按照其ID检索发票二维码。

use StarkBank\Invoice;

$png = Invoice::qrcode("5881614903017472");

$fp = fopen('qrcode.png', 'w');
fwrite($fp, $png);
fclose($fp);

请小心不要意外地对原始png内容应用任何编码,因为这可能会损坏文件。

获取发票PDF

创建后,可以按照其ID检索发票PDF。

use StarkBank\Invoice;

$pdf = Invoice::pdf("5656565656565656");

$fp = fopen('invoice.pdf', 'w');
fwrite($fp, $pdf);
fclose($fp);

请小心不要意外地对原始PDF内容应用任何编码,因为这可能在最终文件中产生异常结果,例如缺少图像和奇怪的字符。

取消发票

您也可以通过其ID取消发票。请注意,如果它已被支付,则无法取消。

use StarkBank\Invoice;

$invoice = Invoice::update("5656565656565656", ["status" => "canceled"]);

print_r($invoice);

更新发票

您可以通过其ID更新发票的金额、到期日和失效日期。如果发票已被支付,则只能减少金额,这将导致付款撤销。要完全撤销发票,请传递“amount”=> 0。

use StarkBank\Invoice;

$updatedInvoice = Invoice::update(
    "5656565656565656",
    [
        "amount" => 4321,
        "due" => (new DateTime("now"))->add(new DateInterval("P5D")),
        "expiration" => 123456789
    ]
);

print_r($updatedInvoice);

查询发票

您可以根据一些筛选条件获取已创建的发票列表。

use StarkBank\Invoice;

$invoices = iterator_to_array(Invoice::query(["limit" => 10, "before" => new DateTime("now")]));

foreach($invoices as $invoice) {
    print_r($invoice);
}

获取撤销发票日志PDF

每当发票成功撤销时,都会创建撤销日志。要获取特定的撤销收据,您可以请求相应的日志PDF。

use StarkBank\Invoice\Log;

$pdf = Log::pdf("5155165527080960");

$fp = fopen('invoice-log.pdf', 'w');
fwrite($fp, $pdf);
fclose($fp);

请小心不要意外地对原始PDF内容应用任何编码,因为这可能在最终文件中产生异常结果,例如缺少图像和奇怪的字符。

获取发票付款信息

一旦发票已支付,您可以使用Invoice.Payment子资源获取付款信息。

use StarkBank\Invoice;

$paymentInformation = Invoice::payment("5656565656565656");

print_r($paymentInformation);

查询发票日志

日志对于理解发票的生命周期非常重要。

use StarkBank\Invoice\Log;

$invoiceLogs = iterator_to_array(Log::query(["limit" => 10, "types" => ["created"]]));

foreach($invoiceLogs as $log) {
    print_r($log);
}

获取发票日志

您可以通过ID获取单个日志。

use StarkBank\Invoice\Log;

$invoiceLog = Log::get("5656565656565656");

print_r($invoice);

创建动态条码

您可以使用Pix交易创建简化的动态二维码来接收款项。当动态条码被支付时,会创建一个带有包含“dynamic-brcode/”字符的标签参数的存款,后面跟着动态条码的uuid "dynamic-brcode/{uuid}" 以便对账。

发票与动态条码之间的区别如下

注意:为了检查BR代码是否已过期,您必须首先计算其过期日期(将过期日期加到创建日期上)。注意:要知道BR代码是否已被支付,您需要通过标签 "dynamic-brcode/{uuid}" 查询您的存款以检查其是否已被支付。

use StarkBank\DynamicBrcode;

$brcodes = DynamicBrcode::create([
    new DynamicBrcode([
        "amount" => 23571,  # R$ 235,71 
        "expiration" => 12345
    ]),
    new DynamicBrcode([
        "amount" => 23571,  # R$ 235,71 
        "expiration" => 12345
    ])
]);

foreach($brcodes as $brcode) {
    print_r($brcode);
}

注意:除了使用DynamicBrcode对象外,您还可以以字典格式传递每个brcode元素

获取动态条码

创建后,可以通过其uuid检索动态条码的信息。

use StarkBank\DynamicBrcode;

$brcode = DynamicBrcode::get("e09e6c5293a5485d9777cc29582e3ecf");

print_r($brcode);

查询动态条码

您可以根据一些过滤器获取已创建的动态条码列表。

use StarkBank\DynamicBrcode;

$brcodes = iterator_to_array(DynamicBrcode::query(
    [
        "limit" => 10, 
        "after" => "2023-01-01",
        "before" => "2023-01-30",
    ]
));

foreach($brcodes as $brcode) {
    print_r($brcode);
}

查询存款

您可以根据一些过滤器获取已创建的存款列表。

use StarkBank\Deposit;

$deposits = iterator_to_array(Deposit::query(["limit" => 10, "before" => new DateTime("now")]));

foreach($deposits as $deposit) {
    print_r($deposit);
}

获取存款

创建后,可以通过其id检索存款的信息。

use StarkBank\Deposit;

$deposit = Deposit::get("5656565656565656");

print_r($deposit);

更新存款

您可以通过id更新存款的金额。要完全撤销存款,请传递 "amount" => 0。

use StarkBank\Deposit

$updatedDeposit = Deposit::update(
    "5656565656565656",
    [
        "amount" => 4321
    ]
);

print_r($updatedDeposit);

查询存款日志

日志对于理解存款的生命周期非常重要。

use StarkBank\Deposit\Log;

$depositLogs = iterator_to_array(Log::query(["limit" => 10, "types" => ["created"]]));

foreach($depositLogs as $log) {
    print_r($log);
}

获取存款日志

您可以通过ID获取单个日志。

use StarkBank\Deposit\Log;

$depositLog = Log::get("5656565656565656");

print_r($deposit);

创建账单

您可以使用账单向客户收费或从您在其他银行的账户中接收款项。

use StarkBank\Boleto;


$boletos = Boleto::create([
    new Boleto([
        "amount" => 23571,  # R$ 235,71
        "name" => "Buzz Aldrin",
        "taxId" => "012.345.678-90",
        "streetLine1" => "Av. Paulista, 200",
        "streetLine2" => "10 andar",
        "district" => "Bela Vista",
        "city" => "São Paulo",
        "stateCode" => "SP",
        "zipCode" => "01310-000",
        "due" => (new DateTime("now"))->add(new DateInterval("P30D")),
        "fine" => 5,  # 5%
        "interest" => 2.5  # 2.5% per month
    ])
]);

foreach($boletos as $boleto){
    print_r($boleto);
}

注意:除了使用Boleto对象外,您还可以直接以数组格式传递每个boleto元素,而不使用构造函数

获取账单

创建后,可以通过传递其id来检索账单的信息。其状态指示其是否已被支付。

use StarkBank\Boleto;

$boleto = Boleto::get("5155165527080960");

print_r($boleto);

获取账单PDF

创建后,可以通过传递其id来检索账单的PDF。

use StarkBank\Boleto;

$pdf = Boleto::pdf("5155165527080960", ["layout" => "default"]);

$fp = fopen('boleto.pdf', 'w');
fwrite($fp, $pdf);
fclose($fp);

请小心不要意外地对原始PDF内容应用任何编码,因为这可能在最终文件中产生异常结果,例如缺少图像和奇怪的字符。

删除账单

您还可以通过id取消账单。请注意,如果它已经被处理,则无法这样做。

use StarkBank\Boleto;

$boleto = Boleto::delete("5155165527080960");

print_r($boleto);

查询账单

您可以根据一些过滤器获取已创建的账单数组。

use StarkBank\Boleto;

$boletos = Boleto::query([
    "after" => "2020-01-01",
    "before" => (new DateTime("now"))->add(new DateInterval("P1D"))
]);

foreach($boletos as $boleto){
    print_r($boleto);
}

查询账单日志

日志对于理解账单的生命周期非常重要。

use StarkBank\Boleto;

$logs = Boleto\Log::query(["limit" => 150]);

foreach($logs as $log){
    print_r($log);
}

获取账单日志

您可以通过ID获取单个日志。

use StarkBank\Boleto;

$log = Boleto\Log::get("5155165527080960");

print_r($log);

调查账单

您可以在我们收到第二天的响应之前发现StarkBank账单是否最近已被支付。这可以通过创建一个BoletoHolmes对象来完成,该对象根据CIP检查相应的Boleto对象的状态更新,例如,检查它是否仍然可支付。调查是异步发生的,最常见的方法是注册 "boleto-holmes" webhook订阅,尽管轮询也是可能的。

use StarkBank\BoletoHolmes;

$holmes = [new BoletoHolmes([
    "boletoId" => "5976467733217280"
])];

$sherlock = BoletoHolmes::create($holmes)[0];

foreach($holmes as $sherlock){
    print_r($sherlock);
}

注意:除了使用BoletoHolmes对象外,您还可以直接以数组格式传递每个付款元素,而不使用构造函数

获取账单Holmes

要获取一个唯一的Holmes,运行

use StarkBank\BoletoHolmes;
$sherlock = Boleto::get("5976467733217280");
print_r($sherlock)

查询账单Holmes

您可以使用过滤器搜索账单Holmes。

use StarkBank\BoletoHolmes;
$holmes = iterator_to_array(Boleto::query(["limit" => 10, "before" => new DateTime("now")]));

foreach($holmes as $sherlock){
    print_r($sherlock);
}

查询账单Holmes日志

搜索也可以使用账单Holmes日志进行。

use StarkBank\BoletoHolmes\Log;
$logs = iterator_to_array(Log::query(["limit" => 10, "types" => ["solving"]]));

foreach($logs as $log){
    print_r($log);
}

获取账单Holmes日志

您还可以通过指定其id来获取账单Holmes日志。

use StarkBank\BoletoHolmes\Log;
$log = Log::get("5976467733217280");
print_r($log)

支付BR代码

支付BR代码也很简单。

use StarkBank\BrcodePayment;

$payments = BrcodePayment::create([
    new BrcodePayment([
        "brcode" => "00020126580014br.gov.bcb.pix0136a629532e-7693-4846-852d-1bbff817b5a8520400005303986540510.005802BR5908T'Challa6009Sao Paulo62090505123456304B14A",
        "taxId" => "20.018.183/0001-80",
        "description" => "Tony Stark's Suit",
        "amount" => 7654321,
        "scheduled" => (new DateTime("now"))->add(new DateInterval("P5D")),
        "tags" => ["Stark", "Suit"],
        "rules" => [
            new BrcodePayment\Rule([
                "key" => "resendingLimit",  # Set maximum number of retries if BrcodePayment fails due to systemic issues at the receiver bank
                "value" => 5                # Our resending limit is 10 by default
            ])
        ]
    ])
]);

foreach($payments as $payment){
    print_r($payment);
}

注意:您还可以根据其规则配置支付行为 注意:除了使用BrcodePayment对象外,您还可以直接以数组格式传递每个付款元素,而不使用构造函数

获取BR代码付款

要获取一个唯一的BR代码付款,运行

use StarkBank\BrcodePayment;

$payment = BrcodePayment::get("19278361897236187236");

print_r($payment);

获取BR代码付款PDF

创建后,可以通过其id检索BR代码付款的PDF。

use StarkBank\BrcodePayment;

$pdf = BrcodePayment::pdf("5155165527080960");

$fp = fopen('brcodePayment.pdf', 'w');
fwrite($fp, $pdf);
fclose($fp);

请小心不要意外地对原始PDF内容应用任何编码,因为这可能在最终文件中产生异常结果,例如缺少图像和奇怪的字符。

查询BR码支付

您可以使用过滤器搜索BR码支付。

use StarkBank\BrcodePayment;

$payments = BrcodePayment::query([
    "tags" => ["company_1", "company_2"]
]);

foreach($payments as $payment){
    print_r($payment);
}

查询BR码支付日志

您也可以使用BR码支付日志进行搜索。

use StarkBank\BrcodePayment;

$logs = BrcodePayment\Log::query([
    "paymentIds" => ["5155165527080960", "76551659167801921"],
]);

foreach($logs as $log){
    print_r($log);
}

获取BR码支付日志

您也可以通过指定其ID来获取BR码支付日志。

use StarkBank\BrcodePayment;

$log = BrcodePayment\Log::get("5155165527080960");

print_r($log);

支付汇票

支付汇票也很简单。

use StarkBank\BoletoPayment;

$payments = BoletoPayment::create([
    new BoletoPayment([
        "line" => "34191.09008 64694.017308 71444.640008 1 96610000014500",
        "taxId" => "012.345.678-90",
        "scheduled" => (new DateTime("now"))->add(new DateInterval("P2D")),
        "description" => "take my money",
        "tags" => ["take", "my", "money"],
    ]),
    new BoletoPayment([
        "barCode" => "34191972300000289001090064694197307144464000",
        "taxId" => "012.345.678-90",
        "scheduled" => (new DateTime("now"))->add(new DateInterval("P1D")),
        "description" => "take my money one more time",
        "tags" => ["again"],
    ]),
]);

foreach($payments as $payment){
    print_r($payment);
}

注意:您可以使用数组格式直接传递每个支付元素,而不是使用构造函数,而不是使用BoletoPayment对象。

获取汇票支付

要按ID获取单个汇票支付,请运行

use StarkBank\BoletoPayment;

$payment = BoletoPayment::get("19278361897236187236");

print_r($payment);

获取汇票支付PDF

创建后,可以通过传递其ID检索汇票支付PDF。

use StarkBank\BoletoPayment;

$pdf = BoletoPayment::pdf("5155165527080960");

$fp = fopen('boletoPayment.pdf', 'w');
fwrite($fp, $pdf);
fclose($fp);

请小心不要意外地对原始PDF内容应用任何编码,因为这可能在最终文件中产生异常结果,例如缺少图像和奇怪的字符。

删除汇票支付

您也可以通过其ID取消汇票支付。请注意,如果已处理,则无法执行此操作。

use StarkBank\BoletoPayment;

$payment = BoletoPayment::delete("5155165527080960");

print_r($payment);

查询汇票支付

您可以使用过滤器搜索汇票支付。

use StarkBank\BoletoPayment;

$payments = BoletoPayment::query([
    "tags" => ["company_1", "company_2"]
]);

foreach($payments as $payment){
    print_r($payment);
}

查询汇票支付日志

您也可以使用汇票支付日志进行搜索。

use StarkBank\BoletoPayment;

$logs = BoletoPayment\Log::query([
    "paymentIds" => ["5155165527080960", "76551659167801921"],
]);

foreach($logs as $log){
    print_r($log);
}

获取汇票支付日志

您也可以通过指定其ID获取汇票支付日志。

use StarkBank\BoletoPayment;

$log = BoletoPayment\Log::get("5155165527080960");

print_r($log);

创建公用事业支付

在SDK中支付公用事业费用(例如电费和水费)也很简单。

use StarkBank\UtilityPayment;

$payments = UtilityPayment::create([
    new UtilityPayment([
        "line" => "83680000001 7 08430138003 0 71070987611 8 00041351685 7",
        "scheduled" => (new DateTime("now"))->add(new DateInterval("P2D")),
        "description" => "take my money",
        "tags" => ["take", "my", "money"],
    ]),
    new UtilityPayment([
        "barCode" => "83600000001522801380037107172881100021296561",
        "scheduled" => (new DateTime("now"))->add(new DateInterval("P1D")),
        "description" => "take my money one more time",
        "tags" => ["again"],
    ]),
]);

foreach($payments as $payment){
    print_r($payment);
}

注意:您可以使用数组格式直接传递每个支付元素,而不是使用构造函数,而不是使用UtilityPayment对象。

查询公用事业支付

要使用过滤器搜索公用事业支付,请运行

use StarkBank\UtilityPayment;

$payments = UtilityPayment::query([
    "tags" => ["electricity", "gas"]
]);

foreach($payments as $payment){
    print_r($payment);
}

获取公用事业支付

您可以通过其ID获取特定的账单。

use StarkBank\UtilityPayment;

$payment = UtilityPayment::get("5155165527080960");

print_r($payment);

获取公用事业支付PDF

创建后,可以通过传递其ID检索公用事业支付PDF。

use StarkBank\UtilityPayment;

$pdf = UtilityPayment::pdf("5155165527080960");

$fp = fopen('electricity.pdf', 'w');
fwrite($fp, $pdf);
fclose($fp);

请小心不要意外地对原始PDF内容应用任何编码,因为这可能在最终文件中产生异常结果,例如缺少图像和奇怪的字符。

删除公用事业支付

您也可以通过其ID取消公用事业支付。请注意,如果已处理,则无法执行此操作。

use StarkBank\UtilityPayment;

$payment = UtilityPayment::delete("5155165527080960");

print_r($payment);

查询公用事业支付日志

您可以通过指定过滤器搜索支付。使用此功能了解账单的生命周期。

use StarkBank\UtilityPayment;

$logs = UtilityPayment\Log::query([
    "paymentIds" => ["102893710982379182", "92837912873981273"],
]);

foreach($logs as $log){
    print_r($log);
}

获取公用事业支付日志

如果您想通过其ID获取特定的支付日志,只需运行

use StarkBank\UtilityPayment;

$log = UtilityPayment\Log::get("1902837198237992");

print_r($log);

创建税务支付

使用此SDK支付税费(例如ISS和DAS)也很简单。

use StarkBank\TaxPayment;

$payments = [
    new TaxPayment([
        "barCode" => "85660000001549403280074119002551100010601813",
        "description" => "33ff6f90de30c7f60526dbe6a1bb3d0cd1f751c89a2fc9a8aad087d4efdc0bce",
        "tags" => ["test2"],
        "scheduled" => "2021-07-13"
    ])];
$payments = TaxPayment::create($payment);
foreach($payments as $payment){
    print_r($payment);
}

注意:您可以使用字典格式传递每个支付元素,而不是使用TaxPayment对象。

查询税务支付

要使用过滤器搜索税务支付,请运行

use StarkBank\TaxPayment;

$payments = iterator_to_array(TaxPayment::query(["limit" => 10]));

print_r($payments);

获取税务支付

您可以通过其ID获取特定的税务支付。

use StarkBank\TaxPayment;

$payment = TaxPayment::get("5155165527080960");

print_r($payment);

获取税务支付PDF

创建后,可以通过其ID检索税务支付PDF。

use StarkBank\TaxPayment;

$pdf = TaxPayment::pdf("5155165527080960");

$fp = fopen('taxPayment.pdf', 'w');
fwrite($fp, $pdf);
fclose($fp);

请小心不要意外地对原始PDF内容应用任何编码,因为这可能在最终文件中产生异常结果,例如缺少图像和奇怪的字符。

删除税务支付

您也可以通过其ID取消税务支付。请注意,如果已处理,则无法执行此操作。

use StarkBank\TaxPayment;

$payment = TaxPayment::delete("5155165527080960");

print_r($payment);

查询税务支付日志

您可以通过指定过滤器搜索支付日志。使用此功能了解每个支付的生命周期。

use StarkBank\TaxPayment\Log;

$paymentLogs = iterator_to_array(Log::query(["limit" => 10, "types" => ["created"]]));

print_r($paymentLogs);

获取税务支付日志

如果您想通过其ID获取特定的支付日志,只需运行

use StarkBank\TaxPayment\Log;

$paymentLog = Log::get("1902837198237992");

print_r($paymentLog);

创建DARF支付

如果您想手动支付没有条形码的DARF,您可以创建DarfPayments。

use StarkBank\DarfPayment;
use \DateTime;
use \DateInterval;

$payments = [
    new DarfPayment([
        "description" => "Darf Payment Example",
        "tags" => ["Darf"],
        "due" => "2023-02-08",
        "competence" => "2020-04-03",
        "fineAmount" => 100,
        "interestAmount" => 100,
        "nominalAmount" => 1000,
        "revenueCode" => "0201",
        "taxId" => "45678350005",
        "scheduled" => "2023-02-05",
    ])];
$payments = DarfPayment::create($payment);
foreach($payments as $payment){
    print_r($payment);
}

注意:您可以使用字典格式传递每个支付元素,而不是使用DarfPayment对象。

查询DARF支付

要使用过滤器搜索DARF支付,请运行

use StarkBank\DarfPayment;

$payments = iterator_to_array(DarfPayment::query(["limit" => 10]));

print_r($payments);

获取DARF支付

您可以通过其ID获取特定的DARF支付。

use StarkBank\DarfPayment;

$payment = DarfPayment::get("5155165527080960");

print_r($payment);

获取DARF支付PDF

创建后,可以通过其ID检索DARF支付PDF。

use StarkBank\DarfPayment;

$pdf = DarfPayment::pdf("5155165527080960");

$fp = fopen('darfPayment.pdf', 'w');
fwrite($fp, $pdf);
fclose($fp);

请小心不要意外地对原始PDF内容应用任何编码,因为这可能在最终文件中产生异常结果,例如缺少图像和奇怪的字符。

删除DARF支付

您也可以通过其ID取消DARF支付。请注意,如果已处理,则无法执行此操作。

use StarkBank\DarfPayment;

$paymentLog = Log::get("1902837198237992");

print_r($paymentLog);

查询DARF支付日志

您可以通过指定过滤器搜索支付日志。使用此功能了解每个支付的生命周期。

use StarkBank\DarfPayment\Log;

$paymentLogs = iterator_to_array(Log::query(["limit" => 10, "types" => ["created"]]));

print_r($paymentLogs);

获取DARF支付日志

如果您想通过其ID获取特定的支付日志,只需运行

use StarkBank\DarfPayment\Log;

$paymentLog = Log::get("1902837198237992");

print_r($paymentLog);

注意:某些税费不能使用条形码支付。由于它们具有特定的参数,每个税费都有自己的资源和路由,所有这些都与TaxPayment资源类似。我们目前支持的是

  • DarfPayment,用于DARFs

在执行支付之前预览支付信息

您可以在实际支付前预览多种支付方式,以确认任何信息。如果未提供“计划”参数,则默认今天的日期为预期支付日期。目前,“计划”参数只对BrcodePreviews有效。此资源可以预览以下类型的支付:“brcode-payment”,“boleto-payment”,“utility-payment”和“tax-payment”

use StarkBank\PaymentPreview;

$previews = PaymentPreview::create([
    new PaymentPreview(["id" => "00020126580014br.gov.bcb.pix0136a629532e-7693-4846-852d-1bbff817b5a8520400005303986540510.005802BR5908T'Challa6009Sao Paulo62090505123456304B14A", "scheduled" => "2021-02-10"]),
    new PaymentPreview(["id" => "34191.09008 61207.727308 71444.640008 5 81310001234321"])
]);
foreach ($previews as $preview) {
    print_r($preview);
}

注意:您也可以直接以数组格式传递每个元素,而不使用构造函数,代替使用PaymentPreview对象。

创建由成本中心授权人员批准的支付请求。

您还可以请求必须通过特定成本中心审批流程才能执行的支付。在某些结构中,这允许对现金进行双重检查,并为您在支付发生之前有足够的时间将所需金额加载到账户中。审批可以在我们的网站上完成,并且必须按照成本中心指定的规则执行。

注意:中心Id参数的值可以通过登录我们的网站并访问所需的成本中心页面来查询。

use StarkBank\PaymentRequest;


$requests = PaymentRequest::create([
    new PaymentRequest([
        "centerId" => "5967314465849344",
        "payment" => new Transfer([
            "amount" => 100,
            "bankCode" => "033",
            "branchCode" => "0001",
            "accountNumber" => "10000-0",
            "taxId" => "012.345.678-90",
            "name" => "Tony Stark",
            "tags" => ["iron", "suit"]
        ]),
        "due" => (new DateTime("now"))->add(new DateInterval("P30D"))
    ])
]);

foreach($requests as $request){
    print_r($request);
}

注意:您也可以直接以数组格式传递每个请求元素,而不使用构造函数,代替使用PaymentRequest对象。

查询支付请求。

要搜索支付请求,运行

use StarkBank\PaymentRequest;

$requests = PaymentRequest::query(["centerId" => "5967314465849344", "limit" => 10]);

foreach($requests as $request){
    print_r($request);
}

创建企业持有人。

您可以为您的卡片创建持有人。它们支持将适用于所有底层卡的花费规则。

use StarkBank\CorporateHolder;

$holders = CorporateHolder::create([
    new CorporateHolder([
        "name" => "Iron Bank S.A.",
        "tags" => [
            "Traveler Employee"
        ],
        "permissions" => [
                    new CorporateHolder\Permission([
                        'ownerType' => 'project',
                        'ownerId' => $_SERVER["SANDBOX_ID"],
                    ])
                ],
        "rules" => [
            new StarkBank\CorporateRule([
                "name" => "General USD",
                "interval" => "day",
                "amount" => 100000,
                "currencyCode" => "USD",
                "schedule" => "every monday, wednesday from 00:00 to 23:59 in America/Sao_Paulo"
            ])
        ]
    ]),
]);

foreach ($holders as $holder) {
    print_r($holder);
}

注意:您也可以直接以字典格式传递每个企业持有人元素,代替使用企业持有人对象。

查询企业持有人。

您可以根据筛选条件查询多个持有人。

use StarkBank\CorporateHolder;

$holders = CorporateHolder::query();

foreach ($holders as $holder) {
    print_r($holder);
}

取消企业持有人。

要取消单个企业持有人,请通过其id运行

use StarkBank\CorporateHolder;

$holder = CorporateHolder::cancel("5155165527080960");

print_r($holder);

获取企业持有人。

要获取单个企业持有人,请通过其id运行

use StarkBank\CorporateHolder;

$holder = CorporateHolder::get("5155165527080960");

print_r($holder);

查询企业持有人日志。

您可以通过查询持有人日志来更好地了解持有人生命周期。

use StarkBank\CorporateHolder;

$logs = CorporateHolder\Log::query(["limit" => 50]);

foreach ($logs as $log) {
    print_r($log);
}

获取企业持有人日志。

您也可以通过其ID获取特定的日志。

use StarkBank\CorporateHolder;

$log = CorporateHolder\Log::get("5155165527080960");

print_r($log);

创建企业卡。

您可以发行具有特定花费规则的卡片。

use StarkBank\CorporateCard;

$cards = CorporateCard::create(
    new CorporateCard(
        "holdeId" => "5155165527080960",
    ),
);

foreach ($cards as $card) {
    print_r($card);
}

查询企业卡。

您可以根据一些筛选条件获取创建的卡列表。

use StarkBank\CorporateCard;

$cards = CorporateCard::query([
    "after" => "2020-01-01",
    "before" => "2020-03-01"
]);

foreach ($cards as $card) {
    print_r($card);
}

获取企业卡。

卡片创建后,可以通过其id检索有关卡片的信息。

use StarkBank\CorporateCard;

$card = CorporateCard::get("5155165527080960");

print_r($card);

更新企业卡。

您可以通过其id更新特定卡片。

use StarkBank\CorporateCard;

$card = CorporateCard::update("5155165527080960", ["status" => "blocked"]);

print_r($card);

取消企业卡。

您也可以通过其id取消卡片。

use StarkBank\CorporateCard;

$card = CorporateCard::cancel("5155165527080960");

print_r($card);

查询企业卡日志。

日志对于理解卡片生命周期非常重要。

use StarkBank\CorporateCard;

$logs = CorporateCard\Log::query(["limit" => 150]);

foreach ($logs as $log) {
    print_r($log);
}

获取企业卡日志。

您可以通过ID获取单个日志。

use StarkBank\CorporateCard;

$log = CorporateCard\Log::get("5155165527080960");

print_r($log);

查询企业采购。

您可以根据一些筛选条件获取创建的采购列表。

use StarkBank\CorporatePurchase;

$purchases = CorporatePurchase::query([
    "after" => "2020-01-01",
    "before" => "2020-03-01"
]);

foreach ($purchases as $purchase) {
    print_r($purchase);
}

获取企业采购。

采购创建后,可以通过其id检索有关采购的信息。

use StarkBank\CorporatePurchase;

$purchase = CorporatePurchase::get("5155165527080960");

print_r($purchase);

查询企业采购日志。

日志对于理解采购生命周期非常重要。

use StarkBank\CorporatePurchase;

$logs = CorporatePurchase\Log::query(["limit" => 150]);

foreach($logs as $log) {
    print_r($log);
}

获取企业采购日志。

您可以通过ID获取单个日志。

use StarkBank\CorporatePurchases;

$log = CorporatePurchase\Log::get("5155165527080960");

print_r($log);

创建企业发票。

您可以通过创建Pix发票从您在任何银行拥有的账户向您的企业余额转账,让您能够运行企业运营。

use StarkBank\CorporateInvoice;

$invoices = CorporateInvoice::create(
    new CorporateInvoice([
        "amount" => 1000
    ])
);

foreach ($invoices as $invoice) {
    print_r($invoice);
}

注意:您也可以直接以字典格式传递每个企业发票元素,代替使用企业发票对象。

查询企业发票。

您可以根据一些筛选条件获取已创建的发票列表。

use StarkBank\CorporateInvoice;

$invoices = CorporateInvoice::query(
    "after" => "2020-01-01",
    "before" => "2020-03-01"
);

foreach ($invoices as $invoice) {
    print_r($invoice);
}

创建企业提款。

您可以通过使用提款资源创建提款,将您的企业余额中的现金发送回您的银行余额。

use StarkBank\CorporateWithdrawal;

$withdrawals = CorporateWithdrawal::create(
    new CorporateWithdrawal([
        "amount" => 10000.
        "externalId" => "123",
        "description" => "Sending back"
    ])
);

foreach ($withdrawals as $withdrawal) {
    print_r($withdrawal);
}

注意:您也可以直接以字典格式传递每个企业提款元素,代替使用企业提款对象。

获取企业提款。

提款创建后,可以通过其id检索有关提款的信息。

use StarkBank\CorporateWithdrawal;

$withdrawal = CorporateWithdrawal::get("5155165527080960");

print_r($withdrawal);

查询企业提款。

您可以根据一些筛选条件获取创建的提款列表。

use StarkBank\CorporateWithdrawal;

$withdrawals = CorporateWithdrawal::query(
    "after" => "2020-01-01",
    "before" => "2020-03-01"
);

foreach ($withdrawals as $withdrawal) {
    print_r($withdrawal);
}

获取您的企业余额。

要了解您可用于授权的可用资金,请运行

use StarkBank\CorporateBalance;

$balance = CorporateBalance::get();

print_r($balance);

查询企业交易

为了了解您的余额变动(企业报表),您可以查询交易。请注意,当您进行购买、提款、收到企业发票付款等操作时,我们的系统会为您创建交易。

use StarkBank\CorporateTransaction;

$transactions = CorporateTransaction::query([
    "after" => "2020-01-01",
    "before" => "2020-03-01"
]);

foreach ($transactions as $transaction) {
    print_r($transaction);
}

获取企业交易

您可以通过交易ID获取特定的交易。

use StarkBank\CorporateTransaction;

$transaction = CorporateTransaction::get("5155165527080960");

print_r($transaction);

企业枚举

查询商户类别

您可以使用此资源查询任何商户类别。您还可以使用商户类别在《企业规则》中定义特定的类别过滤器。无论是代码(代表特定的MCC)还是类型(代码组),都将被接受为过滤器。

use StarkBank\MerchantCategory;

$categories = MerchantCategory::query([
    "search" => "food"
]);

foreach ($categories as $category) {
    print_r($category);
}

查询商户国家

您可以使用此资源查询任何商户国家。您还可以使用商户国家在《企业规则》中定义特定的国家过滤器。

use StarkBank\MerchantCountry;

$countries = MerchantCountry::query([
    "search" => "brazil"
]);

foreach ($countries as $country) {
    print_r($country);
}

查询卡方法

您可以使用此资源查询可用的卡方法。您还可以使用卡方法在《企业规则》中定义特定的购买方法过滤器。

use StarkBank\CardMethod;

$methods = CardMethod::query([
    "search" => "token"
]);

foreach ($methods as $method) {
    print_r($method);
}

分割

查询分割

您可以根据某些过滤器获取创建的分割列表。

use StarkBank\Split;

$splits = iterator_to_array(Split::query(["limit" => 10, "before" => new DateTime("now")]));

foreach ($splits as $split) {
    print_r($split);
}

获取分割

要获取单个分割(按其ID),请运行

use StarkBank\Split;

$split = Split::get("5155165527080960");
print_r($split);

查询分割日志

您可以查询分割日志以检查更多信息。

use StarkBank\Split\Log;

$logs = iterator_to_array(Log::query(["limit" => 10, splitIds=>["5155165527080960", "76551659167801921"]]));

foreach ($logs as $log) {
    print_r($log);
}

获取分割日志

您也可以通过指定其ID来获取分割日志。

use StarkBank\Split\Log;

$log = Log::get("76551659167801921");
print_r($log);

创建分割接收者

您可以使用分割接收者资源将接收者添加到发票分割。

use StarkBank\SplitReceiver;

$receivers = [    
            new SplitReceiver([
                "name"=> "John Snow",
                "taxId"=> "01234567890",
                "bankCode"=> "18236120",
                "branchCode"=> "0001",
                "accountNumber"=> "10000-0",
                "accountType"=> "checking",
                "tags"=> ["Snow"],
            ]),
            new SplitReceiver([
                "name"=> "Aria Stark",
                "taxId"=> "01234567890",
                "bankCode"=> "18236120",
                "branchCode"=> "0001",
                "accountNumber"=> "10000-0",
                "accountType"=> "checking",
                "tags"=> ["Stark"],
            ]),
        ];
$receivers = SplitReceiver::create($receivers);

print_r($receivers)

查询分割接收者

要查看为您的工作区创建的分割接收者,只需运行以下命令

use StarkBank\SplitReceiver;

$receivers = iterator_to_array(SplitReceiver::query(["limit" => 10, "before" => new DateTime("now")]));

foreach ($receivers as $receiver) {
    print_r($receiver);
}

获取分割接收者

要获取单个分割接收者(按其ID),请运行

use StarkBank\SplitReceiver;

$receiver = SplitReceiver::get("5155165527080960");
print_r($receiver);

查询分割接收者日志

您可以通过查询分割接收者日志来检查更多信息。

use StarkBank\SplitReceiver\Log;

$logs = iterator_to_array(Log::query(["limit" => 10, receiverIds=>["5155165527080960", "76551659167801921"]]));

foreach ($logs as $log) {
    print_r($log);
}

获取分割接收者日志

您也可以通过指定其ID来获取分割接收者日志。

use StarkBank\SplitReceiver\Log;

$log = Log::get("76551659167801921");
print_r($log);

设置分割配置文件

您可以创建配置文件或更新(如果已创建)。

use StarkBank\SplitProfile;

$profile = [    
            new SplitProfile([
                "interval"=> "day",
                "delay"=> 0,
                "tags"= ["john", "snow"]
            ]),
        ];
$profile = SplitProfile::put($profile);

print_r($profile)

查询分割配置文件

要查看您工作区中创建的分割配置文件,只需运行以下命令

use StarkBank\SplitProfile;

$profiles = iterator_to_array(SplitProfile::query(["limit" => 10, "before" => new DateTime("now")]));

foreach ($profiles as $profile) {
    print_r($profile);
}

获取分割配置文件

要获取单个分割配置文件(按其ID),请运行

use StarkBank\SplitProfile;

$profile = SplitProfile::get("5155165527080960");
print_r($profile);

查询分割配置文件日志

您可以通过查询分割配置文件日志来检查更多信息。

use StarkBank\SplitProfile\Log;

$logs = iterator_to_array(Log::query(["limit" => 10]));

foreach ($logs as $log) {
    print_r($log);
}

获取分割配置文件日志

您也可以通过指定其ID来获取分割配置文件日志。

use StarkBank\SplitProfile\Log;

$log = Log::get("76551659167801921");
print_r($log);

创建webhook订阅

要创建webhook订阅并在事件发生时接收通知,请运行

use StarkBank\Webhook;

$webhook = Webhook::create([
    "url" => "https://webhook.site/dd784f26-1d6a-4ca6-81cb-fda0267761ec",
    "subscriptions" => ["transfer", "invoice", "deposit", "brcode-payment", "boleto", "boleto-payment", "utility-payment", "tax-payment"]
]);

print_r($webhook);

查询webhook订阅

要搜索已注册的webhooks,请运行

use StarkBank\Webhook;

$webhooks = Webhook::query();

foreach($webhooks as $webhook){
    print_r($webhook);
}

获取webhook订阅

您可以通过其ID获取特定的webhook。

use StarkBank\Webhook;

$webhook = Webhook::get("10827361982368179");

print_r($webhook);

删除webhook订阅

您也可以通过其ID删除特定的webhook。

use StarkBank\Webhook;

$webhook = Webhook::delete("10827361982368179");

print_r($webhook);

处理webhook事件

处理到达您的webhook的事件很容易。请记住传递签名头,以便SDK可以确保事件确实是StarkBank发送给您的。

use StarkBank\Event;

$response = listen()  # this is the method you made to get the events posted to your webhook

$event = Event::parse($response->content, $response->headers["Digital-Signature"]);

if ($event->subscription == "transfer"){
    print_r($event->log->transfer);
} elseif ($event->subscription == "deposit"){
    print_r($event->log->deposit);
} elseif ($event->subscription == "invoice"){
    print_r($event->log->invoice);
} elseif ($event->subscription == "brcode-payment"){
    print_r($event->log->payment);
} elseif ($event->subscription == "boleto"){
    print_r($event->log->boleto);
} elseif ($event->subscription == "boleto-payment"){
    print_r($event->log->payment);
} elseif ($event->subscription == "utility-payment"){
    print_r($event->log->payment);
} elseif ($event->subscription == "tax-payment"){
    print_r($event->log->payment);
}

查询webhook事件

要搜索webhook事件,请运行

use StarkBank\Event;

$events = Event::query(["after" => "2020-03-20", "isDelivered" => false]);

foreach($events as $event){
    print_r($event);
}

获取webhook事件

您可以通过其ID获取特定的webhook事件。

use StarkBank\Event;

$event = Event::get("10827361982368179");

print_r($event);

删除webhook事件

您也可以通过其ID删除特定的webhook事件。

use StarkBank\Event;

$event = Event::delete("10827361982368179");

print_r($event);

将webhook事件标记为已投递

这可以在您丢失事件的情况下使用。使用此功能,您可以手动将API检索的事件设置为“已投递”,以帮助使用isDelivered=false进行未来的事件查询。

use StarkBank\Event;

$event = Event::update("129837198237192", ["isDelivered" => true]);

print_r($event);

查询失败的webhook事件投递尝试信息

您还可以获取失败的webhook事件投递尝试信息。

use StarkBank\Event\Attempt;

$attempts = Attempt::query(["eventIds" => $event->id, "limit" => 1]);

foreach($attempts as $attempt){
    print_r($attempt);
}

获取失败的webhook事件投递尝试信息

要检索单个尝试的信息,请使用以下功能

use StarkBank\Event\Attempt;

$attempt = Attempt::get("1616161616161616");

print_r($attempt);

创建新的工作区

组织用户允许您在您的组织中创建新的工作区(银行账户)。工作区具有独立的余额、报表、操作和用户。工作区之间的唯一联系是控制它们的组织。

注意:此路由仅在将组织用户与workspaceId=null一起使用时才有效。

use StarkBank\Workspace;

$workspace = Workspace::create(
    [
        "username" => "iron-bank-workspace-1",
        "name" => "Iron Bank Workspace 1",
        "allowedTaxIds" => ["96448045031", "26312286002"]
    ],
    $organization
);

print_r($workspace)

列出您的工作区

此路由列出了工作空间。如果没有传递参数,将列出用户可访问的所有工作空间,但您也可以通过直接搜索其用户名或ID来查找其他工作空间。

use StarkBank\Workspace;

$workspaces = Workspace::query(["limit" => 30]);

foreach($workspaces as $workspace){
    print_r($workspace);
}

获取工作空间

您可以通过ID获取特定的工作空间。

use StarkBank\Workspace;

$workspace = Workspace::get("10827361982368179");

print_r($workspace);

更新工作空间

您可以通过ID更新特定的工作空间。

use StarkBank\Workspace;

$workspace = Workspace::update(
   "10827361982368179", 
   [
       "username" => "new-username", 
       "name" => "New name", 
       "allowedTaxIds" => ["96448045031", "26312286002"]
   ],
   $organization
);

print_r($workspace);

请求

此资源允许您向StarkBank路由发送HTTP请求。

GET

您可以对任何StarkBank路由执行GET请求。

您可以使用路径中的ID获取单个资源。

use StarkBank\Request;

$request = Request::get("invoice/5155165527080960")->json();

print_r($request);

您还可以获取特定资源的日志。

use StarkBank\Request;

$request = Request::get("invoice/log/5155165527080960")->json();

print_r($request);

将使用相同的方法列出请求资源的所有创建项。

use StarkBank\Request;

$query = [
    "limit" => 10,
    "status" => "paid"
]
$request = Request::get(
    "invoice/log/5155165527080960",
    $query
    )->json();

print_r($request);

要列出日志,您将使用与获取单个日志相同的逻辑。

use StarkBank\Request;

$query = [
    "limit" => 10,
    "status" => "created"
]
$request = Request::get(
    "invoice/log/5155165527080960",
    $query
    )->json();

print_r($request);

您可以使用此方法获取资源文件。

use StarkBank\Request;

$request = Request::get(
    "invoice/log/5155165527080960/pdf",
    )->content;

$fp = fopen('invoice.pdf', 'w');
fwrite($fp, $request);
fclose($fp);

POST

您可以对任何StarkBank路由执行POST请求。

这将为您请求中发送的每个项目创建一个对象。

注意:无法同时创建多个资源。如果您想创建多个资源,例如发票和银行汇票,则需要发送单独的请求。

use StarkBank\Request;

$body = [
    "invoices" => [
        [
            "amount" => 400000,
            "taxId" => "012.345.678-90",
            "name" => "Arya Stark",    
        ]
    ]
];
$request = Request::post(
    "invoice",
    $body
)->json();

print_r($request)

PATCH

您可以对任何StarkBank路由执行PATCH请求。

您可以更新StarkBank资源的单个项目。

use StarkBank\Request;

$body = ["amount" => 0];
$request = Request::patch(
    "invoice/log/5155165527080960/",
    $body
)->json();

print_r($request)

PUT

您可以对任何StarkBank路由执行PUT请求。

您可以放置StarkBank资源的单个项目。

use StarkBank\Request;

$data = [
    "profiles" =>[
        [
            "interval" => "day",
            "delay" => 0
        ]
    ]
];

$request = Request::put(
    "split-profile",
    $data
)->json();

print_r($request)

DELETE

您可以对任何StarkBank路由执行DELETE请求。

您可以删除StarkBank资源的单个项目。

use StarkBank\Request;

$request = Request::delete("invoice/log/5155165527080960")->json();

print_r($request);

错误处理

SDK可能引发四种类型的错误之一: InputErrorsInternalServerErrorUnknownErrorInvalidSignatureError

InputErrors将在API检测到您的请求中存在错误(状态码400)时引发。如果您捕获到此类错误,您可以通过API检测到的每个单独的错误来获取其元素以进行验证。例如

use StarkBank\Transaction;
use StarkBank\Error\InputErrors;

try {
    $transactions = Transaction::create([
        new Transaction([
            "amount" => 99999999999999,  # (R$ 999,999,999,999.99)
            "receiverId" => "1029378109327810",
            "description" => ".",
            "externalId" => "12345",  # so we can block anything you send twice by mistake
            "tags" => ["provider"]
        ]),
    ]);
} catch (InputErrors $e) {
    foreach($e->errors as $error){
        echo "\n\ncode: " . $error->errorCode;
        echo "\nmessage: " . $error->errorMessage;
    }
}

InternalServerError将在API遇到内部错误时引发。如果您遇到这个,请放心,开发团队已经在紧急修复错误并尽快恢复您的服务。

UnknownError将在请求遇到既不是 InputErrors 也不是 InternalServerError 的错误时引发,例如连接问题。

InvalidSignatureError将由StarkBank\Event::parse()在提供的内容和签名与Stark Bank公钥不匹配时引发。

帮助和反馈

如果您对我们的SDK有任何疑问,请给我们发送电子邮件。我们会迅速回复您,保证做到这一点。我们在这里是为了帮助您尽快与我们集成。我们也喜欢反馈,所以请毫不犹豫地与我们分享您的想法。

电子邮件: help@starkbank.com