SDK,用于简化PHP与Stark Infra API的集成

0.12.0 2024-07-18 17:17 UTC

README

欢迎使用Stark Infra PHP SDK!本工具旨在帮助PHP开发者轻松集成我们的API。此SDK版本与Stark Infra API v2兼容。

简介

索引

支持的PHP版本

该库支持以下PHP版本

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

Stark Infra API文档

请随意查看我们的API文档

版本控制

本项目遵循以下版本模式

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

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

设置

1. 安装我们的SDK

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

composer require starkinfra/sdk

要使用绑定,请使用以下命令

require_once('vendor/autoload.php');

2. 创建您的私钥和公钥

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

您可以使用以下方法之一

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

2.2. 使用我们的SDK

use StarkInfra;

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

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

注意:在创建新的凭证时,建议您在将使用它的基础设施内部创建密钥,以避免危险的网络传输您的 私钥。然后,您可以单独将 公钥 导出至将用于新项目创建的计算机。

3. 注册您的用户凭证

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

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

3.1. 在沙箱中创建项目

3.1.1. 登录 StarkInfra 沙箱

3.1.2. 前往菜单 > 集成

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

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

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

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

use StarkInfra;

// 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 StarkInfra\Project([
    "environment" => "sandbox",
    "id" => "5656565656565656",
    "privateKey" => $privateKeyContent
]);

3.2. 在沙箱中创建组织凭证

3.2.1. 登录 StarkInfra 沙箱

3.2.2. 前往菜单 > 集成

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

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

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

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

use StarkInfra;

// 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 StarkInfra\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 = StarkInfra\IssuingBalance::get(StarkInfra\Organization::replace($organization, "4848484848484848"));

注意1:永远不要硬编码您的私钥。从环境变量或加密数据库中获取。

注意2:我们支持“sandbox”和“production”作为环境。

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

4. 设置用户

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

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

有两种方式将用户告知SDK

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

use StarkInfra;

$balance = StarkInfra\IssuingBalance::get($project);  # or organization

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

use StarkInfra;

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

$balance = StarkInfra\IssuingBalance::get();  # or organization

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

5. 设置错误语言

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

use StarkInfra;

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

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

资源列表和手动分页

几乎所有的SDK资源都提供了 querypage 函数。

  • query 函数提供了一个简单直接的方式来有效地遍历所有符合您提供筛选条件的结果,在您到达当前批次的末尾时无缝检索从API的下一批元素。如果您不担心数据量或处理时间,这就是您要采取的方式。
use StarkInfra;

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

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

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

为了简化下面的SDK示例,我们将只使用 query 函数,但您也可以自由使用 page

沙箱测试

您的初始余额为零。在Stark Infra的许多操作中,您需要在您的账户中有资金,这些资金可以通过创建starkbank.Invoice添加到您的余额中。

在沙盒环境中,大多数创建的starkbank.Invoice将自动付款,因此您无需做其他任何事情来添加资金到您的账户。只需创建一些starkbank.Invoice并稍等片刻。

在生产环境中,您(或您的客户之一)需要实际支付此starkbank.Invoice,资金才能被计入您的账户。

用法

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

发行

查询发行产品

要查看您可用的子发行卡产品,只需运行以下命令

use StarkInfra\IssuingProduct;

$products = IssuingProduct::query();

foreach ($products as $product) {
    print_r($product);
}

这将告诉您哪些卡产品和卡号前缀可供您使用。

创建发行持卡人

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

use StarkInfra\IssuingHolder;

$holders = IssuingHolder::create([
    new IssuingHolder([
        "name" => "Iron Bank S.A.",
        "taxId" => "012.345.678-90",
        "externalId" => "1234",
        "tags" => [
            "Traveler Employee"
        ],
        "rules" => [
            new StarkInfra\IssuingRule([
                "name" => "General USD",
                "interval" => "day",
                "amount" => 100000,
                "currencyCode" => "USD"
            ])
        ]
    ]),
]);

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

注意:除了使用发行持卡人对象外,您还可以以字典格式传递每个转账元素。

查询发行持卡人

您可以根据筛选器查询多个持卡人。

use StarkInfra\IssuingHolder;

$holders = IssuingHolder::query();

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

取消发行持卡人

要取消单个发行持卡人,请运行以下操作

use StarkInfra\IssuingHolder;

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

print_r($holder);

获取发行持卡人

要按其id获取单个发行持卡人,请运行以下操作

use StarkInfra\IssuingHolder;

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

print_r($holder);

查询发行持卡人日志

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

use StarkInfra\IssuingHolder;

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

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

获取发行持卡人日志

您还可以通过其id获取特定日志。

use StarkInfra\\IssuingHolder;

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

print_r($log);

创建发行卡

您可以使用特定的花费规则发行卡。

use StarkInfra\IssuingCard;

$cards = IssuingCard::create([
    new IssuingCard([
        "holdeNname" => "Developers",
        "holderTaxId" => "012.345.678-90",
        "holderExternalId" => "1234",
        "rules" => [
            new StarkInfra\IssuingRule([
                "name" => "general",
                "interval" => "week",
                "amount" => 50000,
                "currencyCode" => "USD"
            ])
        ]
    ]),
]);

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

查询发行卡

您可以根据某些筛选器获取创建的卡列表。

use StarkInfra\IssuingCard;

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

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

获取发行卡

创建后,可以通过其id检索卡的详细信息。

use StarkInfra\IssuingCard;

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

print_r($card);

更新发行卡

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

use StarkInfra\IssuingCard;

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

print_r($card);

取消发行卡

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

use StarkInfra\IssuingCard;

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

print_r($card);

查询发行卡日志

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

use StarkInfra\IssuingCard;

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

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

获取发行卡日志

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

use StarkInfra\IssuingCard;

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

print_r($log);

查询发行设计

您可以根据某些筛选器获取可用设计列表。

use StarkInfra\IssuingDesign;

$designs = IssuingDesign::query(["limit" => 1]);

foreach ($designs as $design) {
    print_r($design);
}

获取发行设计

您可以通过其id检索设计信息。

use StarkInfra\IssuingDesign;

$design = IssuingDesign::get("5155165527080960");

print_r($design);

查询发行压印套件

您可以根据某些筛选器获取创建的压印套件列表。

use StarkInfra\IssuingEmbossingKit;

$kits = IssuingEmbossingKit::query([
    "after" => "2022-11-01",
    "before" => "2022-12-01"
]);

foreach ($kits as $kit) {
    print_r($kit);
}

获取发行压印套件

创建后,您可以通过其id检索压印套件的详细信息。

use StarkInfra\IssuingEmbossingKit;

$kit = IssuingEmbossingKit::get("5155165527080960");

print_r($kit);

查询发行库存

您可以根据某些筛选器获取可用库存列表。

use StarkInfra\IssuingStock;

$stocks = IssuingStock::query(["limit" => 1]);

foreach ($stocks as $stock) {
    print_r($stock);
}

获取发行库存

您可以通过其id检索库存信息。

use StarkInfra\IssuingStock;

$stock = IssuingStock::get("5155165527080960");

print_r($stock);

查询发行库存日志

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

use StarkInfra\IssuingStock;

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

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

获取发行库存日志

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

use StarkInfra\IssuingStock;

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

print_r($log);

创建发行补货

您可以为特定的发行库存订购补货。

use StarkInfra\IssuingRestock;

$restocks = IssuingRestock::create([
    new IssuingRestock([
        "count" => 100,
        "stockId" => "5136459887542272"
    ]),
]);

foreach ($restocks as $restock) {
    print_r($restock);
}

查询发行补货

您可以根据某些筛选器获取创建的补货列表。

use StarkInfra\IssuingRestock;

$restocks = IssuingRestock::query(["limit" => 1]);

foreach ($restocks as $restock) {
    print_r($restock);
}

获取发行补货

创建后,您可以通过其id检索补货的详细信息。

use StarkInfra\IssuingRestock;

$restock = IssuingRestock::get("5664445921492992");
    
print_r($restock);

查询发行补货日志

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

use StarkInfra\IssuingRestock;

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

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

获取发行补货日志

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

use StarkInfra\IssuingRestock;

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

print_r($log);

创建发行压印请求

您可以创建一个压印实体卡的请求。

use StarkInfra\IssuingEmbossingRequest;

$requests = IssuingEmbossingRequest::create([
    new IssuingEmbossingRequest([
        "kitId" => "5648359658356736", 
        "cardId" => "5714424132272128", 
        "displayName1" => "Antonio Stark", 
        "shippingCity" => "Sao Paulo",
        "shippingCountryCode" => "BRA",
        "shippingDistrict" => "Bela Vista",
        "shippingService" => "loggi",
        "shippingStateCode" => "SP",
        "shippingStreetLine1" => "Av. Paulista, 200",
        "shippingStreetLine2" => "10 andar",
        "shippingTrackingNumber" => "My_custom_tracking_number",
        "shippingZipCode" => "12345-678",
        "embosserId" => "5746980898734080"
    ])
]);

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

查询发行压印请求

您可以根据某些筛选器获取创建的压印请求列表。

use StarkInfra\IssuingEmbossingRequest;

$requests = IssuingEmbossingRequest::query(["limit" => 10]);

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

获取发行压印请求

创建后,可以通过其ID检索压印请求的信息。

use StarkInfra\IssuingEmbossingRequest;

$request = IssuingEmbossingRequest::get("5664445921492992");
    
print_r($request);

查询IssuingEmbossingRequest日志

日志对于理解压印请求的生命周期非常重要。

use StarkInfra\IssuingEmbossingRequest;

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

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

获取IssuingEmbossingRequest日志

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

use StarkInfra\IssuingEmbossingRequest;

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

print_r($log);

创建IssuingTokenRequest

您可以创建一个请求,提供必须发送到钱包应用程序的所需数据。

use StarkInfra\IssuingTokenRequest;

$requests = IssuingTokenRequest::create([
    new IssuingTokenRequest([
        "cardId" => "5189831499972623", 
        "walletId" => "google", 
        "methodCode" => "app"
    ])
]);

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

处理令牌授权

处理发送到您的端点的令牌授权非常简单。请记住传递签名头,以便SDK可以确保是StarkInfra发送了事件。如果您在2秒内不批准或拒绝授权,授权将被拒绝。

use StarkInfra\IssuingToken;

$request = listen();  # this is your handler to listen for authorization requests

$token = IssuingToken::parse(
    $request->content, 
    $request->headers["Digital-Signature"]
);

# after parsing you should analyse the authorization request and then respond

# To approve:
sendResponse(  # you should also implement this method to respond the read request
    IssuingToken::response([
        "status" => "approved",
        "activation_methods" =>[
            {
                "type" => "app",
                "value" => "com.subissuer.android"
            },
            {
                "type" => "text",
                "value" => "** *****-5678"
            }
        ],
        "designId" => "4584031664472031",
        "tags" => ["token", "user/1234"]
    ]);
);

# To deny:
sendResponse(  # you should also implement this method to respond the read request
    IssuingToken::response([
        "status" => "denied",
        "reason" => "other",
    ]);
);

处理令牌激活

处理发送到您的端点的令牌激活通知非常简单。请记住传递签名头,以便SDK可以确保是Stark Infra发送了事件。

use StarkInfra\IssuingToken;

$request = listen();  # this is the method you made to get the events posted to your tokenAuthorizationUrl endpoint

$token = IssuingToken::parse(
    $request->content, 
    $request->headers["Digital-Signature"]
);

之后,您可以生成激活码并将其发送给持卡人。持卡人在钱包应用程序中输入收到的代码。我们将接收并发送到tokenAuthorizationUrl进行验证。完成配置过程。

use StarkInfra\IssuingToken;

$request = listen();  # this is the method you made to get the events posted to your tokenAuthorizationUrl endpoint

sendResponse(  # you should also implement this method to respond the read request
    IssuingToken::response([
        "status" => "approved",
        "tags" => ["token", "user/1234"]
    ]);
);

# To deny:
sendResponse(  # you should also implement this method to respond the read request
    IssuingToken::response([
        "status" => "denied",
        "reason" => "other",
        "tags" => ["token", "user/1234"]
    ]);
);

获取一个IssuingToken

您可以通过其ID获取单个令牌。

use StarkInfra\IssuingToken;

$token = IssuingToken::get("5749080709922816");
    
print_r($token);

查询IssuingTokens

您可以通过一些过滤器获取创建的令牌列表。

use StarkInfra\IssuingToken;

$tokens = IssuingToken::query(["limit" => 10]);

foreach ($tokens as $token) {
    print_r($token);
}

更新一个IssuingToken

您可以通过其ID更新一个特定的令牌。

use StarkInfra\IssuingToken;

$token = IssuingToken::update(
    "5155165527080960",
    "status" => "blocked"
);

print_r($token);

取消一个IssuingToken

您也可以通过其ID取消一个令牌。

use StarkInfra\IssuingToken;

$token = IssuingToken::cancel("5155165527080960");

print_r($token);

获取一个IssuingTokenDesign

您可以通过其ID获取单个设计。

use StarkInfra\IssuingTokenDesign;

$design = IssuingTokenDesign::get("5749080709922816");
    
print_r($design);

查询IssuingTokenDesigns

您可以根据某些筛选器获取可用设计列表。

use StarkInfra\IssuingTokenDesign;

$designs = IssuingTokenDesign::query(["limit" => 5]);

foreach ($designs as $design) {
    print_r($design);
}

获取一个IssuingTokenDesign PDF

可以通过其ID检索设计PDF。

use StarkInfra\IssuingTokenDesign;

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

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

处理购买授权

处理发送到您的端点的购买授权非常简单。请记住传递签名头,以便SDK可以确保是StarkInfra发送了事件。如果您在2秒内不批准或拒绝授权,授权将被拒绝。

use StarkInfra\IssuingPurchase;

$request = listen();  # this is your handler to listen for authorization requests

$purchase = IssuingPurchase::parse(
    $request->content, 
    $request->headers["Digital-Signature"]
);

# after parsing you should analyse the authorization request and then respond

# To approve:
sendResponse(  # you should also implement this method to respond the read request
    IssuingPurchase::response([
        "status" => "approved",
    ]);
);

# To deny:
sendResponse(  # you should also implement this method to respond the read request
    IssuingPurchase::response([
        "status" => "denied",
        "reason" => "stolenCard",
    ]);
);

查询IssuingPurchases

您可以通过一些过滤器获取创建的购买列表。

use StarkInfra\IssuingPurchase;

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

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

获取一个IssuingPurchase

创建后,可以通过其ID检索购买的信息。

use StarkInfra\IssuingPurchase;

$log = IssuingPurchase::get("5155165527080960");

print_r($log);

查询IssuingPurchase日志

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

use StarkInfra\IssuingPurchase;

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

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

获取一个IssuingPurchase日志

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

use StarkInfra\IssuingPurchases;

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

print_r($log);

创建IssuingInvoices

您可以使用Withdrawal资源创建Pix发票,从您在任何银行的账户中将资金转账到您的Issuing余额,允许您运行发行操作。

use StarkInfra\IssuingInvoice;

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

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

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

获取一个IssuingInvoice

创建后,可以通过其ID检索发票的信息。其状态表示它是否已被支付。

use StarkInfra\IssuingInvoice;

$invoice = IssuingInvoice::get("5155165527080960");

print_r($invoice);

查询IssuingInvoices

您可以通过一些过滤器获取创建的发票列表。

use StarkInfra\IssuingInvoice;

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

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

查询IssuingInvoice日志

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

use StarkInfra\IssuingInvoice;

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

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

获取一个IssuingInvoice日志

您还可以通过其id获取特定日志。

use StarkInfra\IssuingInvoice;

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

print_r($log);

创建IssuingWithdrawals

您可以使用Withdrawal资源创建提款,将您的Issuing余额中的现金退还到您的Banking余额。

use StarkInfra\IssuingWithdrawal;

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

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

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

获取一个IssuingWithdrawal

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

use StarkInfra\IssuingWithdrawal;

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

print_r($withdrawal);

查询IssuingWithdrawals

您可以通过一些过滤器获取创建的提款列表。

use StarkInfra\IssuingWithdrawal;

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

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

获取您的IssuingBalance

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

use StarkInfra\IssuingBalance;

$balance = IssuingBalance::get();

print_r($balance);

查询IssuingTransactions

要了解您的余额变化(发行对账单),您可以查询交易。请注意,当您进行购买、提款、接收发行发票付款等操作时,我们的系统会为您创建交易。

use StarkInfra\IssuingTransaction;

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

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

获取一个IssuingTransaction

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

use StarkInfra\IssuingTransaction;

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

print_r($transaction);

发布枚举

查询商户类别

您可以使用此资源查询任何商户类别。您还可以使用MerchantCategories在IssuingRules中定义特定的类别过滤器。代码(代表特定的MCC)或类型(代码组)都将被接受作为过滤器。

use StarkInfra\MerchantCategory;

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

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

查询商户国家

您可以使用此资源查询任何商户国家。您还可以使用MerchantCountries在IssuingRules中定义特定的国家过滤器。

use StarkInfra\MerchantCountry;

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

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

查询卡方法

您可以使用此资源查询可用的卡方法。您还可以使用CardMethods在IssuingRules中定义特定的购买方法过滤器。

use StarkInfra\CardMethod;

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

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

Pix

创建Pix请求

您可以使用Pix请求将钱从您的用户之一转给任何人

use StarkInfra\PixRequest;
use StarkInfra\Utils\EndToEndId;

$requests = PixRequest::create([
    new PixRequest([
        "amount" => 1000,
        "externalId" => "my-external-id:1",
        "senderAccountNumber" => "76543-8",
        "senderBranchCode" => "2201",
        "senderAccountType" => "checking",
        "senderName" => "Tony Stark",
        "senderTaxId" => "594.739.480-42",
        "receiverBankCode" => "341",
        "receiverAccountNumber" => "00000-0",
        "receiverBranchCode" => "0001",
        "receiverAccountType" => "checking",
        "receiverName" => "Daenerys Targaryen Stormborn",
        "receiverTaxId" => "012.345.678-90",
        "endToEndId" => EndToEndId::create("20018183"),
    ]),
    new PixRequest([
        "amount" => 200,
        "externalId" => "my-external-id:2",
        "senderAccountNumber" => "76543-8",
        "senderBranchCode" => "2201",
        "senderAccountType" => "checking",
        "senderName" => "Tony Stark",
        "senderTaxId" => "594.739.480-42",
        "receiverBankCode" => "341",
        "receiverAccountNumber" => "00000-0",
        "receiverBranchCode" => "0001",
        "receiverAccountType" => "checking",
        "receiverName" => "Daenerys Targaryen Stormborn",
        "receiverTaxId" => "012.345.678-90",
        "endToEndId" => EndToEndId::create("20018183"),
    ]);
]);

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

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

查询Pix请求

您可以根据过滤器查询多个Pix请求。

use StarkInfra\PixRequest;

$requests = PixRequest::query([
    "limit" => 10,
    "after" => "2020-04-01",
    "before" => "2020-04-30",
    "status" => "success",
    "tags" => ['iron', 'suit'],
    "endToEndIds" => ['E79457883202101262140HHX553UPqeq'],
]);

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

获取Pix请求

创建后,可以通过其ID检索Pix请求的信息。其状态表示它是否已被支付。

use StarkInfra\PixRequest;

$request = PixRequest::get("5155966664310784");

print_r($request);

处理入站的Pix请求授权

处理到达您的端点的授权请求很容易。请记住传递签名头,以便SDK可以确保是StarkInfra向您发送了事件。如果您在1秒内不批准或拒绝授权,则授权将被拒绝。

use StarkInfra\PixRequest;

$request = listen();  # this is your handler to listen for authorization requests

$request = PixRequest::parse(
    $request->content, 
    $request->headers["Digital-Signature"]
);

# after parsing you should analyse the authorization request and then respond

# To approve:
sendResponse(  # you should also implement this method to respond the read request
    PixRequest::response([
        "status" => "approved",
    ]);
);

# To deny:
sendResponse(  # you should also implement this method to respond the read request
    PixRequest::response([
        "status" => "denied",
        "reason" => "invalidAccountNumber",
    ]);
);

查询Pix请求日志

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

use StarkInfra\PixRequest;

$logs = PixRequest\Log::query([
    "limit" => 10,
    "types" => "created",
    "after" => "2020-04-30",
]);

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

获取Pix请求日志

您还可以通过其id获取特定日志。

use StarkInfra\PixRequest;

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

print_r($log);

创建Pix撤销

您可以使用Pix撤销部分或全部撤销Pix请求。

use StarkInfra\PixReversal;

$reversals = PixReversal::create([
    new PixReversal([
        "amount" => 100,
        "externalId" => "my-external-id:3",
        "endToEndId" => "E00000000202201060100rzsJzG9PzMg",
        "reason" => "fraud",
    ]),
    new PixReversal([
        "amount" => 200,
        "externalId" => "my-external-id:4",
        "endToEndId" => "E00000000202201060100rzsJzG9P1GH",
        "reason" => "fraud",
    ]);
]);

foreach($reversals as $reversal){
    print_r($reversal);
}

查询Pix撤销

您可以根据过滤器查询多个Pix撤销。

use StarkInfra\PixReversal;

$reversals = PixReversal::query([
    "fields" => ['amount', 'senderName'],
    "limit" => 10,
    "after" => "2020-04-01",
    "before" => "2020-04-30",
    "status" => "success",
    "tags" => ['iron', 'suit'],
    "returnIds" => ['D20018183202202030109X3OoBHG74wo'],
]);

foreach($reversals as $reversal){
    print_r($reversals);
}

获取Pix撤销

创建后,可以通过其ID检索Pix撤销的信息。其状态表示它是否已被支付。

use StarkInfra\PixReversal;

$reversal = PixReversal::get("5155966664310784");

print_r($reversal);

处理入站的Pix撤销授权

处理到达您的端点的授权请求很容易。请记住传递签名头,以便SDK可以确保是StarkInfra向您发送了事件。如果您在1秒内不批准或拒绝授权,则授权将被拒绝。

use StarkInfra\PixReversal;

$request = listen();  # this is your handler to listen for authorization requests

$reversal = PixReversal::parse(
    $request->content, 
    $request->headers["Digital-Signature"]
);

# after parsing you should analyse the authorization request and then respond

# To approve:
sendResponse(  # you should also implement this method to respond the read request
    PixReversal::response([
        "status" => "approved",
    ]);
);

# To deny:
sendResponse(
    PixReversal::response([
        "status" => "denied",
        "reason" => "invalidAccountNumber",
    ]);
);

查询Pix撤销日志

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

use StarkInfra\PixReversal;

$logs = PixReversal\Log::query([
    "limit" => 10,
    "after" => "2020-04-01",
    "before" => "2020-04-30",
]);

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

获取Pix撤销日志

您还可以通过其id获取特定日志。

use StarkInfra\PixReversal;

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

print_r($log);

获取您的Pix余额

要查看您账户中的余额,请运行

use StarkInfra\PixBalance;

$balance = PixBalance::get();

print_r($balance);

创建Pix报表

报表由央行直接生成,仅供直接参与者使用。要获取您账户在特定日期发生的所有交易的报表,请运行

use StarkInfra\PixStatement;

$statement = PixStatement::create(
    new PixStatement([
        "after" => "2022-01-01",
        "before" => "2022-01-01",
        "type" => "transaction",
    ]);
);

print_r($statement)

查询Pix报表

您可以根据过滤器查询多个Pix报表。

use StarkInfra\PixStatement;

$statements = PixStatement::query([
    "limit" => 10,
    "ids" => ["5155165527080960"],
]);

foreach($statements as $statement){
    print_r($statement);
}

获取Pix报表

报表仅供直接参与者使用。要获取ID为Pix报表

use StarkInfra\PixStatement;

$statement = PixStatement::get("5155966664310784");

print_r($statement);

获取Pix报表.csv文件

要获取ID为Pix报表的.csv文件,请运行

use StarkInfra\PixStatement;

$csv = PixStatement::csv("5656565656565656");

$fp = fopen('statement.zip', 'w');
fwrite($fp, $csv);
fclose($fp);

创建Pix密钥

您可以使用Pix密钥将银行账户信息链接到密钥ID

use StarkInfra\PixKey;

$keys = PixKey::create(
    new PixKey([
        "accountCreated" => "2022-01-01",
        "accountNumber" => "76543",
        "accountType" => "salary",
        "branchCode" => "1234",
        "name" => "Jamie Lannister",    
        "taxId" => "012.345.678-90"
    ]);
);

foreach($keys as $key){
    print_r($key);
}

查询Pix密钥

您可以根据过滤器查询您拥有的多个Pix密钥。

use StarkInfra\PixKey;

$keys = PixKey::query([
    "after" => "2020-04-01",
    "before" => "2020-04-30"
]);

foreach($keys as $key){
    print_r($key);
}

获取Pix密钥

可以通过其ID和咨询代理的税务ID检索Pix密钥的信息。必须提供endToEndId,以便将任何结果购买与此查询相关联,避免央行执行清账。

use StarkInfra\PixKey;
use StarkInfra\Utils\EndToEndId;

$key = PixKey::get(
    "5915632394567680",
    "20.018.183/0001-80",
    [
        "endToEndId" => EndToEndId::create("20018183")
    ]
);

print_r($key);

更新Pix密钥

更新与Pix密钥链接的账户信息。

use StarkInfra\PixKey;

$key = PixKey::update(
    "6203417408045056",
    "reconciliation"
    [
        "name" => "Tony Stark"
    ]
);

print_r($key);

取消Pix密钥

使用其ID取消特定的Pix密钥。

use StarkInfra\PixKey;

$key = PixKey::cancel("5915632394567680");

print_r($key);

查询Pix密钥日志

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

use StarkInfra\PixKey;

$logs = PixKey\Log::query([
    "limit" => 50, 
    "after" => "2022-01-01",
    "before" => "2022-01-20",
    "types" => [
        "created"
    ]
]);

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

获取Pix密钥日志

您还可以通过其id获取特定日志。

use StarkInfra\PixKey;

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

print_r($log);

创建Pix索赔

您可以使用Pix索赔请求将另一个银行的Pix密钥转移到您的账户之一

use StarkInfra\PixClaim;

$claim = PixClaim::create(
    new PixClaim([
        "accountCreated" => "2022-01-01",
        "accountNumber" => "76549", 
        "accountType" => "salary", 
        "branchCode" => "1234",
        "name" => "Random Name",
        "taxId" => "012.345.678-90",
        "keyId" => "+551165857989",
    ]);
);

print_r($claim)

查询Pix索赔

您可以根据过滤器查询多个Pix索赔。

use StarkInfra\PixClaim;

$claims = PixClaim::query([
    "limit" => 1,
    "after" => "2022-01-01",
    "before" => "2022-01-12",
    "status" => "delivered",
    "ids" => ["5729405850615808"],
    "type" => "ownership",
    "flow" => "in",
    "keyType" => "phone",
    "keyId" => "+5511989898989"
]);

foreach ($claims as $claim){
    print_r($claim);
}

获取PixClaim

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

use StarkInfra\PixClaim;

$claim = PixClaim::get("5155165527080960");

print_r($claim);

更新PixClaim

可以通过修改其状态来确认或取消PixClaim。接收到的PixClaim必须由捐赠者确认才能完成。只有当原因是“欺诈”时,所有权PixClaim才能由捐赠者取消。发送的PixClaim也可以取消。

use StarkInfra\PixClaim;

$claim = PixClaim::update(
    "5155165527080960",
    "canceled"
);

print_r($claim);

查询PixClaim日志

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

use StarkInfra\PixClaim;

$logs = PixClaim\Log::query([
    "limit" => 50, 
    "ids" => ["5729405850615808"],
    "after" => "2022-01-01",
    "before" => "2022-01-20",
    "types" => ["created"],
    "claimIds" => ["5719405850615809"]
]);

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

获取PixClaim日志

您还可以通过其id获取特定日志。

use StarkInfra\PixClaim;

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

print_r($log);

创建PixDirector

要在中央银行注册PixDirector的联系方式,请运行以下操作:

use StarkInfra\PixDirector;

$director = PixDirector::create(
    new PixDirector ([
        "name" => "Edward Stark",
        "taxId" => "03.300.300/0001-00",
        "phone" => "+55-11999999999",
        "email" => "ned.stark@company.com",
        "password" => "12345678",
        "teamEmail" => "pix.team@company.com",
        "teamPhones" => [
            "+55-11988889999", "+55-11988889998"
        ]
    ]);
);

print_r($director);

创建PixInfractions

PixInfractions用于报告引起欺诈怀疑的交易,请求退款或撤销退款。交易的任何一方都可以创建PixInfractions。

use StarkInfra\PixInfraction;

$infractions = PixInfraction::create([
    new PixInfraction([
        "referenceId" => "E20018183202201201450u34sDGd19lz",
        "type" => "fraud",
    ]);
]);

foreach ($infractions as $infraction){
    print_r($infraction);
}

查询PixInfractions

您可以根据过滤器查询多个PixInfractions。

use StarkInfra\PixInfraction;

$infractions = PixInfraction::query([
    "limit" => 1,
    "after" => "2022-01-01",
    "before" => "2022-01-12",
    "status" => "delivered",
    "ids" => ["5155165527080960"],
]);

foreach ($infractions as $infraction){
    print_r($infraction);
}

获取PixInfraction

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

use StarkInfra\PixInfraction;

$infraction = PixInfraction::get("5155165527080960");

print_r($infraction);

更新PixInfraction

接收到的PixInfraction可以通过修改其状态来确认或拒绝。在修改PixInfraction后,其状态变为已关闭。

use StarkInfra\PixInfraction;

$infraction = PixInfraction::update(
    "5155165527080960",
    "agreed"
)

print_r($infraction)

取消PixInfraction

使用其id取消特定的PixInfraction。

use StarkInfra\PixInfraction;

$infraction = PixInfraction::cancel("5155165527080960");

print_r($infraction);

查询PixInfraction日志

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

use StarkInfra\PixInfraction;

$logs = PixInfraction\Log::query([
    "limit" => 50, 
    "ids" => ["5729405850615808"],
    "after" =>"2022-01-01",
    "before" =>"2022-01-20",
    "types" => ["created"],
    "infractionIds" => ["5155165527080960"]
]);

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

获取PixInfraction日志

您还可以通过其id获取特定日志。

use StarkInfra\PixInfraction;

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

print_r($log);

创建PixFraud

参与者或当接受PixInfraction时可以自动创建PixFraud。

use StarkInfra\PixFraud;

$frauds = PixFraud::create([
    new PixFraud([
        "externalId" => "my_external_id_1234",
        "type" => "mule",
        "taxId" => "01234567890",
    ]);
]);

foreach ($frauds as $fraud){
    print_r($fraud);
}

查询PixFrauds

您可以根据过滤器查询多个PixFrauds。

use StarkInfra\PixFraud;

$frauds = PixFraud::query([
    "limit" => 1,
    "after" => "2022-01-01",
    "before" => "2022-01-12",
    "status" => "delivered",
    "ids" => ["6638842090094592", "4023146587080960"],
]);

foreach ($frauds as $fraud){
    print_r($fraud);
}

获取PixFraud

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

use StarkInfra\PixInfraction;

$infraction = PixInfraction::get("5155165527080960");

print_r($infraction);

取消PixFraud

使用其id取消特定的PixFraud。

use StarkInfra\PixFraud;

$fraud = PixFraud::cancel("5155165527080960");

print_r($fraud);

获取PixUser

您可以使用其taxId获取用户的特定欺诈统计数据。

use StarkInfra\PixUser;

$user = PixUser::get("01234567890");

print_r($user);

创建PixChargebacks

检测到交易中的欺诈或系统故障导致错误交易时,可以创建PixChargeback。

use StarkInfra\PixChargeback;

$chargebacks = PixChargeback::create([
    new PixChargeback([
        "amount" => 100,
        "referenceId" => "E20018183202201201450u34sDGd19lz",
        "reason" => "fraud"
    ]);
]);

foreach ($chargebacks as $chargeback){
    print($chargeback);
}    

查询PixChargebacks

您可以根据过滤器查询多个PixChargebacks。

use StarkInfra\PixChargeback;

$chargebacks = PixChargeback::query([
    "limit" => 1,
    "after" => "2022-01-01",
    "before" => "2022-01-12",
    "status" => "delivered",
    "ids" => ["5155165527080960"]
]);

foreach ($chargebacks as $chargeback){
    print($chargeback);
}    

获取PixChargeback

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

use StarkInfra\PixChargeback;

$chargeback = PixChargeback::get("5155165527080960");

print_r($chargeback);

更新PixChargeback

接收到的PixChargeback可以通过修改其状态来批准或拒绝。在修改PixChargeback后,其状态变为已关闭。

use StarkInfra\PixChargeback;

$chargeback = PixChargeback::update(
    "5155165527080960",
    "accepted"
);

print_r($chargeback);

取消PixChargeback

使用其id取消特定的PixChargeback。

use StarkInfra\PixChargeback;

$chargeback = PixChargeback::cancel("5155165527080960");

print_r($chargeback);

查询PixChargeback日志

您可以通过查询PixChargeback日志来更好地了解撤销请求的生命周期。

use StarkInfra\PixChargeback;

$logs = PixChargeback\Log::query([
    "limit" => 50, 
    "ids" => ["5729405850615808"],
    "after" => "2022-01-01",
    "before" => "2022-01-20",
    "types" => ["created"],
    "chargebackIds" => ["5155165527080960"]
]);

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

获取PixChargeback日志

您还可以通过其id获取特定日志。

use StarkInfra\PixChargeback;

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

print_r($log);

查询PixDomains

在此处您可以列出在巴西中央银行注册的所有PixDomains。PixDomain对象显示注册的Pix参与者可以发行动态QR码的域名和QR码域名证书。

use StarkInfra\PixDomain;

$domains = PixDomain::query();

foreach ($domains as $domain){
    print($domain);
}

创建StaticBrcodes

StaticBrcodes通过二维码或表示PixKey和一些额外固定参数(如金额和结算ID)的图像存储账户信息。它们可以很容易地用于接收Pix交易。

use StarkInfra\StaticBrcode;

$brcodes = StaticBrcode::create([
    new StaticBrcode([
        "name" => "Jamie Lannister",
        "keyId" => "+5511988887777",
        "amount" => 100,
        "reconciliationId" => "123",
        "city" =>"Rio de Janeiro"
    ]);
]);

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

查询StaticBrcodes

您可以根据过滤器查询多个StaticBrcodes。

use StarkInfra\StaticBrcode;

$brcodes = StaticBrcode::query([
    "limit" => 50, 
    "after" => "2022-01-01",
    "before" => "2022-01-20",
    "uuids" => ["5ddde28043a245c2848b08cf315effa2"],
]);

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

获取StaticBrcodes

创建后,可以通过其UUID检索StaticBrcode的信息。

use StarkInfra\StaticBrcode;

$brcode = StaticBrcode::get("5ddde28043a245c2848b08cf315effa2");

print_r($brcode);

创建DynamicBrcodes

BR代码存储由Pix二维码表示的信息,用于方便地发送或接收Pix交易。DynamicBrcodes代表具有可以随时更改的信息的费用,因为所有用于支付的数据都是动态地从存储在BR代码中的URL请求的。Stark Infra将接收GET请求并将其转发到您的注册端点,该端点包含包含BR代码UUID的GET请求以进行识别。

use StarkInfra\DynamicBrcode;

$brcodes = DynamicBrcode::create([
    new DynamicBrcode([
        "name" => "Jamie Lannister",
        "city" =>"Rio de Janeiro"
        "externalId" => "my_unique_id",
        "type" => "instant",
    ]);
]);

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

查询DynamicBrcodes

您可以根据过滤器查询多个DynamicBrcodes。

use StarkInfra\DynamicBrcode;

$brcodes = DynamicBrcode::query([
    "limit" => 50, 
    "after" => "2022-01-01",
    "before" => "2022-01-20",
    "uuids" => ["5ddde28043a245c2848b08cf315effa2"],
]);

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

获取DynamicBrcode

创建后,可以通过UUID检索DynamicBrcode上的信息。

use StarkInfra\DynamicBrcode;

$brcode = DynamicBrcode::get("5ddde28043a245c2848b08cf315effa2");

print_r($brcode);

验证DynamicBrcode读取

当用户读取DynamicBrcode时,会向DynamicBrcode中存储的URL发起GET请求,以获取完成交易所需的信息。使用此方法验证接收到的GET请求的真实性。如果提供的数字签名与Stark公钥不匹配,将引发StarkInfra\Exception\InvalidSignatureException。

use StarkInfra\DynamicBrcode;

$request = listen();  # this is the method you made to get the read requests posted to your registered endpoint

$uuid = DynamicBrcode::verify(
    $request->content, 
    $request->headers["Digital-Signature"]
);

对Due DynamicBrcode读取的回复

当用户读取Due DynamicBrcode时,会向您的注册URL发送包含BR代码UUID的GET请求,以获取完成交易所需的信息。

GET请求必须在5秒内回复,HTTP状态码为200,格式如下。

use StarkInfra\DynamicBrcode;

$request = listen();  # this is the method you made to get the read requests posted to your registered endpoint

$uuid = DynamicBrcode::verify(
    getUuid($request->url),  # you should implement this method to extract the UUID from the request's URL
    $request->headers["Digital-Signature"]
);

$invoice = getInvoice($uuid); # you should implement this method to get information on the BR code from its uuid

sendResponse(  # you should also implement this method to respond the read request
    DynamicBrcode::responseDue([
        "version" => $invoice->version,
        "created" => $invoice->created,
        "due" => $invoice->due,
        "keyId" => $invoice->keyId,
        "status" => $invoice->status,
        "reconciliationId" => $invoice->reconciliationId,
        "amount" => $invoice->amount,
        "senderName" => $invoice->senderName,
        "senderTaxId" => $invoice->senderTaxId,
        "receiverName" => $invoice->receiverName,
        "receiverTaxId" => $invoice->receiverTaxId,
        "receiverStreetLine" => $invoice->receiverStreetLine,
        "receiverCity" => $invoice->receiverCity,
        "receiverStateCode" => $invoice->receiverStateCode,
        "receiverZipCode" => $invoice->receiverZipCode
    ]);
);

对即时DynamicBrcode读取的回复

当用户读取即时DynamicBrcode时,会向您的注册URL发送包含BR代码UUID的GET请求,以获取完成交易所需的信息。

GET请求必须在5秒内回复,HTTP状态码为200,格式如下。

use StarkInfra\DynamicBrcode;

$request = listen();  # this is the method you made to get the read requests posted to your registered endpoint

$uuid = DynamicBrcode::verify(
    getUuid($request->url),  # you should implement this method to extract the uuid from the request's URL
    $request->headers["Digital-Signature"]
);

$invoice = getInvoice($uuid); # you should implement this method to get the information of the BR code from its uuid

sendResponse(  # you should also implement this method to respond the read request
    DynamicBrcode::responseDue([
        "version" => $invoice->version,
        "created" => $invoice->created,
        "keyId" => $invoice->keyId,
        "status" => $invoice->status,
        "reconciliationid" => $invoice->reconciliationId,
        "amount" => $invoice->amount,
        "cashierType" => $invoice->cashierType,
        "cashierBankCode" => $invoice->cashierBankCode,
        "cashAmount" => $invoice->cashAmount
    ]);
);

创建BrcodePreviews

您可以创建BrcodePreviews来预览在付款之前BR代码。

use StarkInfra\BrcodePreview;

$previews = BrcodePreview::create([
    new BrcodePreview([
        "id" => "00020126420014br.gov.bcb.pix0120nedstark@hotmail.com52040000530398654075000.005802BR5909Ned Stark6014Rio de Janeiro621605126674869738606304FF71",
        "payerId" => "123.456.780-01"
    ]),
    new BrcodePreview([
        "id" => "00020126430014br.gov.bcb.pix0121aryastark@hotmail.com5204000053039865406100.005802BR5910Arya Stark6014Rio de Janeiro6216051262678188104863042BA4",
        "payerId" => "123.456.780-01"
    ])
]);

foreach ($previews as $preview) {
    print_r($preview);
}

借贷

如果您想建立贷款业务,可以使用Stark Infra创建CCB合同。这将使您的业务能够在不要求银行许可证的情况下进行贷款,只要您使用信贷基金或证券化公司。

启动操作所需步骤

  1. 在您的信贷基金或证券化账户中存入资金
  2. 为信贷接收者请求创建身份验证(确保您有他们的文件和明确授权)
  3. (可选)创建一个信贷模拟,显示信贷接收者的分期付款计划信息
  4. 创建一个包含所需分期付款计划的信贷单据

创建CreditNotes

对于贷款业务,您可以使用CreditNote生成CCB合同。

注意:在能够为同一税务ID创建信贷操作之前,您必须已经为该税务ID创建了一个身份验证。

use StarkInfra\CreditNote;
use StarkInfra\CreditSigner;
use StarkInfra\CreditNote\Invoice;
use StarkInfra\CreditNote\Transfer;

$notes = CreditNote::create([
    new CreditNote([
        "templateId" => "0123456789101112",
        "name" => "Jamie Lannister",
        "taxId" => "012.345.678-90",
        "nominalAmount" => 100000,
        "scheduled" => "2022-05-11",
        "payment" => new Transfer([
            "bankCode" => "00000000",
            "branchCode" => "1234",
            "accountNumber" => "129340-1",
            "taxId" => "012.345.678-90", 
            "name" => "Jamie Lannister"
        ]),
        "paymentType" => "transfer",
        "invoices" =>[
            new Invoice([
                "amount" => 120000,
                "due" => "2022-07-11",
                "fine" => 3.0,
                "interest" => 1.0
            ])
        ], 
        "signers" =>[
            new CreditSigner([
                "contact" =>  "jamie.lannister@gmail.com",
                "method" => "link",
                "name" => "Jamie Lannister",
            ])
        ],
        "rebateAmount" => 0,
        "tags" => [
            'War supply',
            'Invoice #1234'
        ],
        "externalId" => "my_unique_id",
        "streetLine1" => "Av. Paulista, 200",
        "streetLine2" => "10 andar",
        "district" => "Bela Vista",
        "city" => "Sao Paulo",
        "stateCode" => "SP",
        "zipCode" => "01310-000"
    ]);
]);

foreach($notes as $note){
    print_r($note);
}

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

查询CreditNotes

您可以根据过滤器查询多个Credit Notes。

use StarkInfra\CreditNote;

$notes = CreditNote::query([
    "limit" => 10,
    "after" => "2020-04-01",
    "before" => "2020-04-30",
    "status" => "signed",
]);

foreach($notes as $note){
    print_r($note);
}

获取CreditNote

创建后,可以通过id检索CreditNote的信息。

use StarkInfra\CreditNote;

$note = CreditNote::get("5155966664310784");

print_r($note);

取消CreditNote

如果CreditNote尚未签署,您可以取消它。

use StarkInfra\CreditNote;

$note = CreditNote::cancel("5155966664310784");

print_r($note);

查询CreditNote日志

您可以通过查询CreditNote日志更好地理解信贷单据的生命周期。

use StarkInfra\CreditNote\Log;

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

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

获取CreditNote日志

您还可以通过其id获取特定日志。

use StarkInfra\CreditNote\Log;

$log = Log::get("5155966664310784");

print_r($log);

创建CreditPreviews

在创建之前,您可以预览信贷操作(目前我们只有CreditNote / CCB预览)

use StarkInfra\CreditPreview;
use StarkInfra\CreditNote\Invoice;

$previews = CreditPreview::create([
    new CreditPreview([
        "type" => "credit-note",
        "credit" => new CreditPreview\CreditNotePreview([
            "type" => "american",
            "nominalAmount" => 100000,
            "scheduled" => "2022-10-11",
            "taxId" => "012.345.678-90",
            "initialDue" => "2022-11-11",
            "nominalInterest" => 10,
            "count" => 5,
            "interval" => "month",
        ])
    ]),
    new CreditPreview([
        "type" => "credit-note",
        "credit" => new CreditPreview\CreditNotePreview([
            "initialAmount" => 2478,
            "initialDue" => "2022-10-22",
            "nominalAmount" => 90583,
            "nominalInterest" => 3.7,
            "rebateAmount" => 23,
            "scheduled" => "2022-09-28",
            "taxId" => "477.954.506-44",
            "type" => "sac"
        ])
    ]),
    new CreditPreview([
        "type" => "credit-note",
        "credit" => new CreditPreview\CreditNotePreview([
            "initialAmount" => 4449,
            "initialDue" => "2022-09-16",
            "interval" => "year",
            "nominalAmount" => 96084,
            "nominalInterest" => 3.1,
            "rebateAmount" => 239,
            "scheduled" => "2022-09-02",
            "taxId" => "81.882.684/0001-02",
            "type" => "price"
        ])
    ]),
    new CreditPreview([
        "type" => "credit-note",
        "credit" => new CreditPreview\CreditNotePreview([
            "count" => 8,
            "initialDue" => "2022-09-18",
            "nominalAmount" => 6161,
            "nominalInterest" => 3.2,
            "scheduled" => "2022-09-03",
            "taxId" => "59.352.830/0001-20",
            "type" => "american"
        ])
    ]),
    new CreditPreview([
        "type" => "credit-note",
        "credit" => new CreditPreview\CreditNotePreview([
            "initialDue" => "2022-09-13",
            "nominalAmount" => 86237,
            "nominalInterest" => 2.6,
            "scheduled" => "2022-09-03",
            "taxId" => "37.293.955/0001-94",
            "type" => "bullet"
        ])
    ]),
    new CreditPreview([
        "type" => "credit-note",
        "credit" => new CreditPreview\CreditNotePreview([
            "invoices" => [
                new Invoice([
                    "amount" => 14500,
                    "due" => "2022-10-19"
                ]),
                new Invoice([
                    "amount" => 14500,
                    "due" => "2022-11-25"
                ])
            ],
            "nominalAmount" => 29000,
            "rebateAmount" => 900,
            "scheduled" => "2022-09-31",
            "taxId" => "36.084.400/0001-70",
            "type" => "custom"
        ])
    ]),
]);

foreach($previews as $preview){
    print_r($preview);
}

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

创建CreditHolmes

在您请求信贷操作之前,您可能想检查信贷接收者以前进行的信贷操作。

为此,打开CreditHolmes调查以接收关于信贷接收者在中央银行SCR中注册的所有债务和信贷操作的信息。

use StarkInfra\CreditHolmes;

$holmes = CreditHolmes::create([
    new CreditHolmes([
        "taxId" => "012.345.678-90",
        "competence" => "2022-09"
    ]),
    new CreditHolmes([
        "taxId" => "012.345.678-90",
        "competence" => "2022-08"
    ]),
    new CreditHolmes([
        "taxId" => "012.345.678-90",
        "competence" => "2022-07"
    ]);
]);

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

查询CreditHolmes

您可以根据过滤器查询多个CreditHolmes。

use StarkInfra\CreditHolmes;

$holmes = CreditHolmes::query([
    "after" => "2020-04-01",
    "before" => "2020-04-30",
    "status" => "success",
]);

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

获取CreditHolmes

创建后,可以通过id检索CreditHolmes的信息。

use StarkInfra\CreditHolmes;

$logs = CreditHolmes::get("5155165527080960");

print_r($log);

查询CreditHolmes日志

您可以通过查询CreditHolmes日志更好地理解它们的生命周期。

use StarkInfra\CreditHolmes\Log;

$logs = Log::query([
    "limit" => 10,
    "ids" => ["5729405850615808"],
    "after" => "2020-04-01",
    "before" => "2020-04-30",
    "types" => ["created"]
]);

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

获取CreditHolmes日志

您还可以通过其id获取特定日志。

use StarkInfra\CreditHolmes\Log;

$logs = CreditHolmes\Log::get("5155165527080960");

print_r($log);

身份

一些操作,尤其是信贷操作,要求在之前验证个人或企业的身份。

身份验证按照以下顺序进行:

  1. 为特定的税务识别号创建身份资源。
  2. 将文件附加到身份资源上。
  3. 更新身份资源以指示所有文件均已附加。
  4. 将身份发送进行验证,并返回 webhook 通知以反映操作的成功或失败。

创建IndividualIdentities

您可以通过创建IndividualIdentity来验证自然人的文件。

use StarkInfra\IndividualIdentity;

$identities = IndividualIdentity::create([
    new IndividualIdentity([
        "name" => "Walter White",
        "taxId" => "012.345.678-90",
        "tags" =>["breaking", "bad"]
    ]);
]);

foreach($identities as $identity){
    print_r($identity);
}

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

查询IndividualIdentity

您可以根据过滤器查询多个个体身份。

use StarkInfra\IndividualIdentity;

$identities = IndividualIdentity::query([
    "limit" => 10,
    "after" => "2020-04-01",
    "before" => "2020-04-30",
    "status" => "success",
    "tags" =>["breaking", "bad"]
]);

foreach($identities as $identity){
    print_r($identity);
}

获取IndividualIdentity

创建后,可以通过其id检索个体身份的信息。

use StarkInfra\IndividualIdentity;

$identity = IndividualIdentity::get("5155165527080960");

print_r($identity);

更新IndividualIdentity

您可以将特定身份状态更新为“处理中”,以便将其发送进行验证。

use StarkInfra\IndividualIdentity;

$identity = IndividualIdentity::update(
    "5155165527080960",
    "processing"
)

print_r($identity)

注意:在通过修补其状态发送您的个体身份进行验证之前,您必须使用CreditDocument资源的创建方法发送所有必需的文件。请注意,您必须通过其id在CreditDocument资源的创建方法中引用个体身份。

取消IndividualIdentity

您可以在将状态更新为“处理中”之前取消个体身份。

use StarkInfra\IndividualIdentity;

$identity = IndividualIdentity::cancel("5155165527080960");

print_r($identity);

查询IndividualIdentity日志

您可以通过查询个体身份日志来更好地了解个体身份的生命周期。

use StarkInfra\IndividualIdentity\Log;

$logs = IndividualIdentity\Log::query([
    "limit" => 10,
    "after" => "2020-04-01",
    "before" => "2020-04-30"
]);

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

获取IndividualIdentity日志

您还可以通过其id获取特定日志。

use StarkInfra\IndividualIdentity\Log;

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

print_r($log);

创建IndividualDocuments

您可以通过创建个体文件将文件的图像附加到特定的个体身份。您必须通过其id引用所需的个体身份。

$documents = IndividualDocument::create([
    new IndividualDocument([
        "type" => "identity-front",
        "content" => "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD...",
        "identityId" => "5155165527080960",
        "tags" => ["breaking", "bad"]
    ]),
    new IndividualDocument([
        "type" => "identity-back",
        "content" => "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD...",
        "identityId" => "5155165527080960",
        "tags" => ["breaking", "bad"]
    ]),
    new IndividualDocument([
        "type" => "selfie",
        "content" => "data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAASABIAAD...",
        "identityId" => "5155165527080960",
        "tags" => ["breaking", "bad"]
    ]);
]);

foreach($documents as $document){
    print_r($document);
}

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

查询IndividualDocuments

您可以根据过滤器查询多个个体文件。

use StarkInfra\IndividualDocument;

$logs = IndividualDocument::query([
    "limit" => 10,
    "after" => "2020-04-01",
    "before" => "2020-04-30",
    "status" => "success",
    "tags" => ["breaking", "bad"]
]);

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

获取IndividualDocument

创建后,可以通过其id检索个体文件的信息。

use StarkInfra\IndividualDocument;

$document = IndividualDocument::get("5155165527080960");

print_r($document);

查询IndividualDocument日志

您可以通过查询个体文件日志来更好地了解个体文件的生命周期。

use StarkInfra\IndividualDocument\Log;

$logs = IndividualDocument\Log::query([
    "limit" => 10,
    "after" => "2020-04-01",
    "before" => "2020-04-30"
]);

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

获取IndividualDocument日志

您还可以通过其id获取特定日志。

use StarkInfra\IndividualDocument\Log;

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

print_r($log);

Webhook

创建webhook

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

use StarkInfra\Webhook;

$webhook = Webhook::create(
    new Webhook(
        "url" => "https://webhook.site/",
        "subscriptions" =>[
            "credit-note"
            "issuing-card", "issuing-invoice", "issuing-purchase",
            "pix-request.in", "pix-request.out", "pix-reversal.in", "pix-reversal.out", "pix-claim", "pix-key", "pix-infraction", "pix-chargeback"
        ]
    );
);

print_r($webhook);

查询webhooks

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

use StarkInfra\Webhook;

$webhooks = Webhook::query();

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

获取webhook

您可以通过其id获取特定的Webhook。

use StarkInfra\Webhook;

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

print_r($webhook);

删除webhook

您也可以通过其id删除特定的Webhook。

use StarkInfra\Webhook;

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

print_r($webhook);

处理Webhook事件

处理发送到您的Webhook端点的事件非常简单。请记住传递签名头,以便 SDK 可以确保是 StarkInfra 发送给您的事件。

use StarkInfra\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 == "pix-request.in"){
    print_r($event->log->request);
} elseif ($event->subscription == "pix-claim"){
    print_r($event->log->claim);
} elseif ($event->subscription == "pix-key"){
    print_r($event->log->key);
} elseif ($event->subscription == "pix-infraction"){
    print_r($event->log->infraction);
} elseif ($event->subscription == "pix-chargeback"){
    print_r($event->log->chargeback);
} elseif ($event->subscription == "pix-request.out"){
    print_r($event->log->request);
} elseif ($event->subscription == "pix-reversal.in"){
    print_r($event->log->reversal);
} elseif ($event->subscription == "pix-reversal.out"){
    print_r($event->log->reversal);
} elseif ($event->subscription == "issuing-card"){
    print_r($event->log->card);
} elseif ($event->subscription == "issuing-invoice"){
    print_r($event->log->invoice);
} elseif ($event->subscription == "issuing-purchase"){
    print_r($event->log->purchase);
} 

查询webhook事件

要搜索webhook事件,请运行

use StarkInfra\Event;

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

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

获取webhook事件

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

use StarkInfra\Event;

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

print_r($event);

删除webhook事件

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

use StarkInfra\Event;

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

print_r($event);

将webhook事件设置为已送达

在您丢失事件的情况下,可以使用此功能。使用此功能,您可以手动将来自API的事件设置为“已送达”,以帮助未来的事件查询使用 "isDelivered" => false

use StarkInfra\Event;

$event = Event::update("1298371982371929", true);

print_r($event);

查询失败的webhook事件交付尝试信息

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

use StarkInfra\Event\Attempt;

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

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

获取失败的webhook事件交付尝试信息

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

use StarkInfra\Event\Attempt;

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

print_r($attempt);

request

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

GET

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

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

use StarkInfra\Request;

$request = Request::get("pix-request/5155165527080960");

print_r($request);

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

use StarkInfra\Request;

$request = Request::get("pix-request/log/5155165527080960");

print_r($request);

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

use StarkInfra\Request;

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

print_r($request);

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

use StarkInfra\Request;

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

print_r($request);

POST

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

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

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

use StarkInfra\Request;
$ext = "this-is-my-unique-external-id";
$body = [
    "holders" => [
        [
            "name" => "Holder Test",
            "taxId" => "012.345.678-90",
            "externalId" => $ext,
            "tags" => ["Traveler Employee"],
        ]
    ]
];
$request = Request::post(
    "suing-holder",
    $body
);

print_r($request)

PATCH

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

可以更新StarkInfra资源中的单个项目。

use StarkInfra\Request;

$path = "issuing-holder/5155165527080960";
$request = Request::patch(
    $path, 
    ["tags" => ["arya", "stark"]]
)->content;
$content = json_decode($request, true);
print_r($content)

DELETE

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

可以删除StarkInfra资源中的单个项目。

use StarkInfra\Request;

$path = "issuing-holder/5155165527080960";
$request = Request::delete($path)->content;
$result = json_decode($request, true);

print_r($result);

处理错误

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

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

use StarkInfra;
use StarkInfra\Error\InputErrors;

try {
    $cards = StarkInfra\IssuingCard::create([
        new StarkInfra\IssuingCard([
            "holdeNname" => "Developers",
            "holderTaxId" => "012.345.678-90",
            "holderExternalId" => "1234",
            "rules" => [
                new StarkInfra\IssuingRule([
                    "name" => "general",
                    "interval" => "week",
                    "amount" => 50000,
                    "currencyCode" => "USD"
                ])
            ]
        ]),
    ]);
} catch (InputErrors $e) {
    foreach($e->errors as $error){
        echo "\n\ncode: " . $error->errorCode;
        echo "\nmessage: " . $error->errorMessage;
    }
}

InternalServerError将在API遇到内部错误时抛出。如果您遇到这个问题,请放心,开发团队已经在赶紧行动,纠正错误并尽快恢复您的操作。

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

InvalidSignatureError将专门由StarkInfra\Event::parse()在提供的内容和签名与Stark Infra公钥不匹配时抛出。

帮助和反馈

如果您对我们的SDK有任何疑问,只需发送电子邮件给我们。我们将会快速回复您,这是我们的承诺。我们在这里是为了帮助您尽快与我们集成。我们也热爱反馈,所以请不要犹豫,与我们分享您的想法。

邮箱: help@starkbank.com