tio-jobs / asaas-php
缺失的ASAAS PHP/Laravel包
Requires
- php: ^8.2
- guzzlehttp/guzzle: ^7.8
- illuminate/container: ^10.28.0 || ^11.0
- illuminate/contracts: ^10.28.0 || ^11.0
- illuminate/support: ^10.28.0 || ^11.0
Requires (Dev)
- captainhook/captainhook: ^5.19
- friendsofphp/php-cs-fixer: ^3.46
- larastan/larastan: ^2.7
- laravel/pint: ^1.0
- nunomaduro/collision: ^7.9
- orchestra/testbench: ^8.0
- pestphp/pest: ^2.28
- pestphp/pest-plugin-faker: ^2.0
- pestphp/pest-plugin-laravel: ^2.2
- pestphp/pest-plugin-watch: ^2.0
- phpstan/phpstan: ^1.10
- roave/security-advisories: dev-latest
This package is auto-updated.
Last update: 2024-09-23 10:43:41 UTC
README
此 Pacote Laravel
通过抽象 ASAAS 支付网关
的端点而创建,允许您处理主账户和子账户!
🇺🇸
此 Laravel 包
通过抽象巴西 ASAAS 支付网关
的端点而创建。文档可用葡萄牙语(PT-BR)提供,以便于我们针对巴西开发者的使用。如果您有任何问题,请毫不犹豫地打开一个问题或联系作者。
系统要求
- PHP 8.1+
- Composer 2+
- Laravel 10+
获取ASAAS API密钥
要获取ASAAS API密钥,您需要访问您的 个人资料 > 集成。
安装包
注意:
此包尚未准备好用于生产!因此,第一步,将您的 composer.json
修改为
"minimum-stability": "dev",
现在,您可以使用以下命令安装beta版本
composer require tio-jobs/asaas-php
# ou
composer require tio-jobs/asaas-php:v0.2.0-beta
发布配置文件
要发布配置文件,只需键入
php artisan vendor:publish
# então procure por AsaasPhpServiceProvider e pressione [ENTER]
修改 .ENV 文件
将API密钥的常量添加到您的 .env 文件中(使用单引号)
ASAAS_API_VERSION=v3 ASAAS_SANDBOX_BASE_URL=https://sandbox.asaas.com/api/ ASAAS_SANDBOX_API_KEY='sua-chave-sandbox' ASAAS_SANDBOX_PIX_KEY=sua-chave-pix-sandbox ASAAS_SANDBOX_EMAIL_ACCOUNT='seu-email-sandbox' ASAAS_SANDBOX_WEBHOOK_URL='sua-url-webhook-sandbox' ASAAS_SANDBOX_WEBHOOK_TOKEN='seu-token-webhook-sandbox-aleatório' ASAAS_PRODUCTION_BASE_URL=https://api.asaas.com/ ASAAS_PRODUCTION_API_KEY='sua-chave-produção' ASAAS_PRODUCTION_PIX_KEY=sua-chave-pix-produção ASAAS_PRODUCTION_EMAIL_ACCOUNT='seu-email-produção' ASAAS_PRODUCTION_WEBHOOK_URL='sua-url-webhook-produção' ASAAS_PRODUCTION_WEBHOOK_TOKEN='seu-token-webhook-produção-aleatório' ASAAS_ALLOW_SUB_ACCOUNTS=false # Quando FALSE, carrega automaticamente a chave da API do .env; do contrário a mesma deverá no código
消费ASAAS API
注意: 所有响应都位于目录 \tests\Fixtures\responses 中。
客户 - 列出
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->customer()->list(); dd($response);
客户 - 创建
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->customer()->create( name: 'Teste Usuário', cpfCnpj: sanitize("012.345.678-90"), email: str("Teste@teste.com.br")->lower()->toString(), mobilePhone: sanitize("(16) 99222-2222") ); dd($response);
有关更多可用字段,请参阅: https://docs.asaas.com/reference/criar-novo-cliente
客户 - 获取
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->customer()->get(id: 'cus_000005500564'); dd($response);
客户 - 查找
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->customer()->findByDocument(document: '01234567890'); dd($response);
客户 - 更新
这里有一个使用 asaas-php
更新手机号码的示例
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->customer()->update(id: 'cus_000005824295', mobilePhone: sanitize("(11) 91111-1111")); dd($response);
有关更多可用字段,请参阅: https://docs.asaas.com/reference/atualizar-cliente-existente
客户 - 删除
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->customer()->delete(id: 'cus_000005824295'); dd($response);
客户 - 恢复
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->customer()->restore(id: 'cus_000005824295',); dd($response);
客户 - 通知
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->customer()->notifications( id: 'cus_000005824295',); dd($response);
账单 - 直接通过支票支付
$data = new \TioJobs\AsaasPhp\DataTransferObjects\Charges\Billet\DirectBilletDTO( customerId: 'cus_000005824295', value: 19.25, ); $response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->directByBillet(DTO: $data); dd($response, $resource->getBilletUrl($response));
账单 - 通过动态PIX支付
$data = new \TioJobs\AsaasPhp\DataTransferObjects\Charges\Pix\DynamicPixDTO( customerId: 'cus_000005824295', value: 29.99, ); $response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->pixDynamic(DTO: $data); dd($response, $resource->getPixPaymentData($response));
账单 - 通过静态PIX支付
$data = new \TioJobs\AsaasPhp\DataTransferObjects\Charges\Pix\StaticPixDTO( description: 'Pix Estático - Descrição do Teste', value: 19.90, ); $response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->pixStatic(DTO: $data); dd($response);
账单 - 直接通过信用卡支付
$creditCardDTO = new \TioJobs\AsaasPhp\DataTransferObjects\Charges\CreditCard\CreditCardDTO( holderName: 'marcelo h almeida', number: '5162306219378829', expiryMonth: '05', expiryYear: '2024', ccv: '318', ); $creditCardHolderInfoDTO = new \TioJobs\AsaasPhp\DataTransferObjects\Charges\CreditCard\CreditCardHolderInfoDTO( name: 'Marcelo Henrique Almeida', email: 'marcelo.almeida@gmail.com', document: '24971563792', postalCode: '89223-005', addressNumber: '277', phone: '4738010919', mobilePhone: '47998781877', addressComplement: '', ); $directCreditCardDTO = new \TioJobs\AsaasPhp\DataTransferObjects\Charges\CreditCard\DirectCreditCardDTO( customerId: 'cus_000005824295', value: 29.99, creditCardDTO: $creditCardDTO, creditCardHolderInfoDTO: $creditCardHolderInfoDTO, ); $response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->directByCreditCard(DTO: $directCreditCardDTO); dd($response);
账单 - 部分通过信用卡支付
$creditCardDTO = new \TioJobs\AsaasPhp\DataTransferObjects\Charges\CreditCard\CreditCardDTO( holderName: 'marcelo h almeida', number: '5162306219378829', expiryMonth: '05', expiryYear: '2024', ccv: '318', ); $creditCardHolderInfoDTO = new \TioJobs\AsaasPhp\DataTransferObjects\Charges\CreditCard\CreditCardHolderInfoDTO( name: 'Marcelo Henrique Almeida', email: 'marcelo.almeida@gmail.com', document: '24971563792', postalCode: '89223-005', addressNumber: '277', phone: '4738010919', mobilePhone: '47998781877', addressComplement: '', ); $partialCreditCardDTO = new \TioJobs\AsaasPhp\DataTransferObjects\Charges\CreditCard\PartialCreditCardDTO( customerId: 'cus_000005824295', value: 30.00, installments: 2, installmentValue: 15.00, creditCardDTO: $creditCardDTO, creditCardHolderInfoDTO: $creditCardHolderInfoDTO, ); $response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->partialCreditCard(DTO: $partialCreditCardDTO); dd($response);
账单 - 列出所有账单
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->all(limit: 10, offset: 0); dd($response);
账单 - 删除账单
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->delete( id: 'pay_t7b3b3fvioxuqx4e',); dd($response);
账单 - 更新账单
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->update( id: 'pay_j875qgxq8ycbl42i', data: [ 'dueDate' => \Carbon\Carbon::now()->addDay()->format('Y-m-d'), ], ); dd($response);
账单 - 向账单发送文件
[POST] https://sandbox.asaas.com/api/v3/payments/{id}/documents
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->uploadDocument( id: 'pay_j875qgxq8ycbl42i', data: [ 'availableAfterPayment' => true, 'type' => \TioJobs\AsaasPhp\Enums\DocumentTypeEnum::DOCUMENT->value, attach(filePath: base_path('packages/tio-jobs/asaas-php/examples/files/test-document.pdf'), fieldName: 'file')), ], ); dd($response);
账单 - 删除发送的文件
[DELETE] https://sandbox.asaas.com/api/v3/payments/{id}/documents/{documentId}
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->charge()->deleteDocument( id: 'pay_j875qgxq8ycbl42i', document: '4b052313-ec78-42ae-8374-42a1718aab75',); dd($response);
子账户 - 创建子账户
注意:
对于使用CPF的个人账户,字段 birthDate
是必需的。
$subAccountDto = new \TioJobs\AsaasPhp\DataTransferObjects\SubAccounts\SubAccountDTO( name: 'Larissa e Helena Advocacia Ltda', email: 'financeiro@larissaehelenaadvocacialtda.com.br', document: '88.354.691/0001-72', companyType: \TioJobs\AsaasPhp\Enums\CompanyTypeEnum::INDIVIDUAL, mobilePhone: '(11) 99173-6850', postalCode: '14015-000', address: 'Rua Visconde do Rio Branco', addressNumber: '123', province: 'Centro', subAccountWebhooksDTO: new SubAccountWebhooksDTO(), complement: '', site: 'https://www.larissaehelenaadvocacialtda.com.br', ); $response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->subAccount()->create(DTO: $subAccountDto); dd($response);
子账户 - 列出子账户
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->subAccount()->all() dd($response);
子账户 - 检查待处理文件
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->subAccount()->checkPendingDocuments() dd($response);
子账户 - 发送待处理文件
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->subAccount()->updateDocument( documentId: 'b445460f-4bd5-41cc-8493-712b6e0966f2', type: \TioJobs\AsaasPhp\Enums\FileDocumentTypeEnum::ENTREPRENEUR_REQUIREMENT, documentFile: attach(base_path('packages/tio-jobs/asaas-php/examples/files/test-document.pdf'), 'documentFile'), ) dd($response);
子账户 - 获取已发送文件
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->subAccount()->getDocument(documentId: '37106b34-21b6-497f-bb12-87d924b34b16'); dd($response);
子账户 - 更新已发送文件
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->subAccount()->updateDocument( documentId: '09f4903c-55fe-452e-bd4e-129780143214', documentFile: attach(filePath: base_path('packages/tio-jobs/asaas-php/examples/files/test-document.pdf'), fieldName: 'documentFile'), ); dd($response);
子账户 - 删除已发送文件
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->subAccount()->deleteDocument( documentId: '09f4903c-55fe-452e-bd4e-129780143214',); dd($response);
银行服务 - 银行对账单
要查看所有类型的银行对账单,请参阅: https://docs.asaas.com/reference/recuperar-extrato
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->bank()->getStatement( startDate: now()->subMonths(3)->format('Y-m-d'), endDate: now()->format('Y-m-d'), offset: 0, limit: 10, ); dd($response);
银行服务 - 转账到其他银行或PIX密钥
$bankAccountDTO = new \TioJobs\AsaasPhp\DataTransferObjects\BankServices\BankAccountDTO( bankCode: '111', accountName: 'Conta do Bradesco Teste', ownerName: 'Larissa e Helena Advocacia Ltda', document: '01234567890', agency: '1111', accountNumber: '111111', accountDigit: '1', bankAccountTypeEnum: \TioJobs\AsaasPhp\Enums\BankAccountTypeEnum::CONTA_CORRENTE, ); $response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->bank()->otherTransfer( value: 10.00, operationTypeEnum: \TioJobs\AsaasPhp\Enums\OperationTypeEnum::TED, bankAccountDTO: $bankAccountDTO, pixKey: null, pixTypeEnum: null, descriptionForPix: null, scheduleDate: null, // if null, send immediately! ) dd($response);
银行服务 - 转账到ASAAS账户
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->bank()->transferToAsaas( walletId: 'a45e79db-36ab-48e2-a278-d438cf14329f', value: 49.90,); dd($response);
银行服务 - 获取转账
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->bank()->getTransfer(transferId: 'be0ae5ad-a93e-4f82-8e12-964e5303627a'); dd($response);
银行服务 - 获取所有转账
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->bank()->getAllTransfers(); dd($response);
通知 - 更新通知
$response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->notifications()->update( notificationId: 'not_3xd6o7qmx475t333', DTO: new \TioJobs\AsaasPhp\DataTransferObjects\Notifications\UpdateNotificationDTO( enabled: false, emailEnabledForProvider: false, smsEnabledForProvider: false, emailEnabledForCustomer: true, smsEnabledForCustomer: true, phoneCallEnabledForCustomer: false, whatsappEnabledForCustomer: true, //scheduleOffset: \TioJobs\AsaasPhp\Enums\ScheduleOffsetEnum::FIVE, // only valid to PAYMENT_DUEDATE_WARNING ), ); dd($response);
通知 - 批量更新通知
$notifications = [ new \TioJobs\AsaasPhp\DataTransferObjects\Notifications\UpdateNotificationDTO( notificationId: 'not_3xd6o7qmx475t333', enabled: false, emailEnabledForProvider: false, smsEnabledForProvider: false, emailEnabledForCustomer: true, smsEnabledForCustomer: true, phoneCallEnabledForCustomer: false, whatsappEnabledForCustomer: true, //scheduleOffset: \TioJobs\AsaasPhp\Enums\ScheduleOffsetEnum::FIVE, // only valid to PAYMENT_DUEDATE_WARNING ), new \TioJobs\AsaasPhp\DataTransferObjects\Notifications\UpdateNotificationDTO( notificationId: 'not_622b0ypi6ocj6ss4', enabled: false, emailEnabledForProvider: false, smsEnabledForProvider: false, emailEnabledForCustomer: true, smsEnabledForCustomer: true, phoneCallEnabledForCustomer: false, whatsappEnabledForCustomer: true, //scheduleOffset: \TioJobs\AsaasPhp\Enums\ScheduleOffsetEnum::FIVE, // only valid to PAYMENT_DUEDATE_WARNING ) ]; $response = \TioJobs\AsaasPhp\Facades\AsaasPhp::make()->notifications()->batchUpdate( customerId: 'cus_000005824295', DTO: $notifications ); dd($response);
覆盖率测试
CORE - Asaas Core Class [] 检查列表方法 [] 检查创建方法 [] 检查获取方法 [] 检查搜索方法 [] 检查更新方法 [] 检查删除方法 [] 检查恢复方法 [] 检查通知方法 [] 检查收费方法 [] 检查上传方法
CORE - AsaasPhp Facade [x] 检查是否 facade 返回 Asaas.php 核心类
客户 [x] 创建客户 [x] 客户通知 [x] 删除客户 [x] 通过文件找到客户 [x] 获取客户 [x] 列出客户 [x] 恢复客户 [x] 更新客户
收费 - 支票 [x]
WEBHOOKS
强烈推荐使用 https://pipedream.com/ (通过 GitHub 登录) 来配置您的 ASAAS_SANDBOX_WEBHOOK_URL
。
对于 ASAAS_PRODUCTION_WEBHOOK_URL
,您可以在 routes/api.php
中创建一个 POST 路由,例如
Route::post('/webhooks/asaas', function (Request $request) { // your business logic here! \Illuminate\Support\Facades\Log::info('/webhooks/asaas', $request->all()); });
贡献
欢迎贡献。请阅读我们的 贡献指南(英文)。
致谢
由 Icaro William 和 贡献者 提供。