|
@@ -3,6 +3,7 @@
|
|
|
namespace App\Services\Pagarme;
|
|
namespace App\Services\Pagarme;
|
|
|
|
|
|
|
|
use App\Data\Pagarme\Request\PagarmeTransferRequestData;
|
|
use App\Data\Pagarme\Request\PagarmeTransferRequestData;
|
|
|
|
|
+use App\Data\Pagarme\Response\PagarmeTransferResponseData;
|
|
|
use App\Models\Provider;
|
|
use App\Models\Provider;
|
|
|
use App\Models\ProviderWithdrawal;
|
|
use App\Models\ProviderWithdrawal;
|
|
|
use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
|
|
use App\Services\Pagarme\Concerns\SendsPagarmeRequests;
|
|
@@ -12,7 +13,7 @@ class PagarmeTransferService
|
|
|
{
|
|
{
|
|
|
use SendsPagarmeRequests;
|
|
use SendsPagarmeRequests;
|
|
|
|
|
|
|
|
- public function createTransfer(int $amountInCents, string $recipientId, string $idempotencyKey): array
|
|
|
|
|
|
|
+ public function createTransfer(int $amountInCents, string $recipientId, string $idempotencyKey): PagarmeTransferResponseData
|
|
|
{
|
|
{
|
|
|
if ($this->shouldMockTransferRequest()) {
|
|
if ($this->shouldMockTransferRequest()) {
|
|
|
return $this->mockTransferResponse(
|
|
return $this->mockTransferResponse(
|
|
@@ -22,31 +23,31 @@ class PagarmeTransferService
|
|
|
);
|
|
);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return $this->pagarmeRequest(
|
|
|
|
|
|
|
+ return PagarmeTransferResponseData::fromArray($this->pagarmeRequest(
|
|
|
method: 'POST',
|
|
method: 'POST',
|
|
|
path: '/transfers',
|
|
path: '/transfers',
|
|
|
payload: new PagarmeTransferRequestData(
|
|
payload: new PagarmeTransferRequestData(
|
|
|
- amount: $amountInCents,
|
|
|
|
|
|
|
+ amount: $amountInCents,
|
|
|
recipientId: $recipientId,
|
|
recipientId: $recipientId,
|
|
|
),
|
|
),
|
|
|
idempotencyKey: $idempotencyKey,
|
|
idempotencyKey: $idempotencyKey,
|
|
|
errorMessage: 'Erro ao criar transferencia (saque) no Pagar.me.',
|
|
errorMessage: 'Erro ao criar transferencia (saque) no Pagar.me.',
|
|
|
- );
|
|
|
|
|
|
|
+ ));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public function getTransfer(string $transferId): array
|
|
|
|
|
|
|
+ public function getTransfer(string $transferId): PagarmeTransferResponseData
|
|
|
{
|
|
{
|
|
|
if ($this->shouldMockTransferRequest()) {
|
|
if ($this->shouldMockTransferRequest()) {
|
|
|
return $this->mockTransferLookupResponse($transferId);
|
|
return $this->mockTransferLookupResponse($transferId);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return $this->pagarmeRequest(
|
|
|
|
|
|
|
+ return PagarmeTransferResponseData::fromArray($this->pagarmeRequest(
|
|
|
method: 'GET',
|
|
method: 'GET',
|
|
|
path: "/transfers/{$transferId}",
|
|
path: "/transfers/{$transferId}",
|
|
|
payload: [],
|
|
payload: [],
|
|
|
idempotencyKey: "get-transfer-{$transferId}",
|
|
idempotencyKey: "get-transfer-{$transferId}",
|
|
|
errorMessage: 'Erro ao consultar transferencia no Pagar.me.',
|
|
errorMessage: 'Erro ao consultar transferencia no Pagar.me.',
|
|
|
- );
|
|
|
|
|
|
|
+ ));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
//
|
|
//
|
|
@@ -56,71 +57,58 @@ class PagarmeTransferService
|
|
|
return app()->environment('local', 'development');
|
|
return app()->environment('local', 'development');
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private function mockTransferResponse(int $amountInCents, string $recipientId, string $idempotencyKey): array
|
|
|
|
|
|
|
+ private function mockTransferResponse(int $amountInCents, string $recipientId, string $idempotencyKey): PagarmeTransferResponseData
|
|
|
{
|
|
{
|
|
|
- $provider = Provider::query()
|
|
|
|
|
- ->where('recipient_id', $recipientId)
|
|
|
|
|
- ->first();
|
|
|
|
|
-
|
|
|
|
|
|
|
+ $provider = Provider::query()->where('recipient_id', $recipientId)->first();
|
|
|
$createdAt = Carbon::now();
|
|
$createdAt = Carbon::now();
|
|
|
|
|
|
|
|
- return [
|
|
|
|
|
- 'id' => $this->mockTransferId($idempotencyKey),
|
|
|
|
|
- 'amount' => $amountInCents,
|
|
|
|
|
- 'type' => 'credito_em_conta',
|
|
|
|
|
- 'status' => 'pending_transfer',
|
|
|
|
|
- 'fee' => 0,
|
|
|
|
|
- 'funding_date' => null,
|
|
|
|
|
- 'funding_estimated_date' => $createdAt->copy()->addWeekday()->toISOString(),
|
|
|
|
|
- 'transaction_id' => null,
|
|
|
|
|
- 'bank_account' => $provider?->recipient_default_bank_account,
|
|
|
|
|
- 'date_created' => $createdAt->toISOString(),
|
|
|
|
|
- 'created_at' => $createdAt->toISOString(),
|
|
|
|
|
-
|
|
|
|
|
- 'metadata' => [
|
|
|
|
|
|
|
+ return new PagarmeTransferResponseData(
|
|
|
|
|
+ id: $this->mockTransferId($idempotencyKey),
|
|
|
|
|
+ amount: $amountInCents,
|
|
|
|
|
+ type: 'credito_em_conta',
|
|
|
|
|
+ status: 'pending_transfer',
|
|
|
|
|
+ fee: 0,
|
|
|
|
|
+ fundingDate: null,
|
|
|
|
|
+ fundingEstimatedDate: $createdAt->copy()->addWeekday()->toISOString(),
|
|
|
|
|
+ bankAccount: $provider?->recipient_default_bank_account,
|
|
|
|
|
+ bankResponse: null,
|
|
|
|
|
+ createdAt: $createdAt->toISOString(),
|
|
|
|
|
+ metadata: [
|
|
|
'mocked' => true,
|
|
'mocked' => true,
|
|
|
'environment' => app()->environment(),
|
|
'environment' => app()->environment(),
|
|
|
'recipient_id' => $recipientId,
|
|
'recipient_id' => $recipientId,
|
|
|
'idempotency_key' => $idempotencyKey,
|
|
'idempotency_key' => $idempotencyKey,
|
|
|
'provider_id' => $provider?->id,
|
|
'provider_id' => $provider?->id,
|
|
|
],
|
|
],
|
|
|
-
|
|
|
|
|
- 'bank_response' => null,
|
|
|
|
|
- ];
|
|
|
|
|
|
|
+ );
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- private function mockTransferLookupResponse(string $transferId): array
|
|
|
|
|
|
|
+ private function mockTransferLookupResponse(string $transferId): PagarmeTransferResponseData
|
|
|
{
|
|
{
|
|
|
- $withdrawal = ProviderWithdrawal::query()
|
|
|
|
|
- ->where('transfer_id', $transferId)
|
|
|
|
|
- ->first();
|
|
|
|
|
|
|
+ $withdrawal = ProviderWithdrawal::query()->where('transfer_id', $transferId)->first();
|
|
|
|
|
|
|
|
if ($withdrawal?->gateway_payload) {
|
|
if ($withdrawal?->gateway_payload) {
|
|
|
- return $withdrawal->gateway_payload;
|
|
|
|
|
|
|
+ return PagarmeTransferResponseData::fromArray($withdrawal->gateway_payload);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
$createdAt = Carbon::now();
|
|
$createdAt = Carbon::now();
|
|
|
|
|
|
|
|
- return [
|
|
|
|
|
- 'id' => $transferId,
|
|
|
|
|
- 'amount' => $withdrawal ? (int) round((float) $withdrawal->gross_amount * 100) : 0,
|
|
|
|
|
- 'type' => $withdrawal?->type ?? 'credito_em_conta',
|
|
|
|
|
- 'status' => $withdrawal?->status?->value ?? 'pending_transfer',
|
|
|
|
|
- 'fee' => $withdrawal ? (int) round((float) $withdrawal->gateway_fee_amount * 100) : 0,
|
|
|
|
|
- 'funding_date' => $withdrawal?->completed_at?->toISOString(),
|
|
|
|
|
- 'funding_estimated_date' => $createdAt->copy()->addWeekday()->toISOString(),
|
|
|
|
|
- 'transaction_id' => null,
|
|
|
|
|
- 'bank_account' => $withdrawal?->bank_account,
|
|
|
|
|
- 'date_created' => $withdrawal?->created_at?->toISOString() ?? $createdAt->toISOString(),
|
|
|
|
|
- 'created_at' => $withdrawal?->created_at?->toISOString() ?? $createdAt->toISOString(),
|
|
|
|
|
-
|
|
|
|
|
- 'metadata' => $withdrawal?->metadata ?? [
|
|
|
|
|
|
|
+ return new PagarmeTransferResponseData(
|
|
|
|
|
+ id: $transferId,
|
|
|
|
|
+ amount: $withdrawal ? (int) round((float) $withdrawal->gross_amount * 100) : 0,
|
|
|
|
|
+ type: $withdrawal?->type ?? 'credito_em_conta',
|
|
|
|
|
+ status: $withdrawal?->status?->value ?? 'pending_transfer',
|
|
|
|
|
+ fee: $withdrawal ? (int) round((float) $withdrawal->gateway_fee_amount * 100) : 0,
|
|
|
|
|
+ fundingDate: $withdrawal?->completed_at?->toISOString(),
|
|
|
|
|
+ fundingEstimatedDate: $createdAt->copy()->addWeekday()->toISOString(),
|
|
|
|
|
+ bankAccount: $withdrawal?->bank_account,
|
|
|
|
|
+ bankResponse: $withdrawal?->bank_response,
|
|
|
|
|
+ createdAt: $withdrawal?->created_at?->toISOString() ?? $createdAt->toISOString(),
|
|
|
|
|
+ metadata: $withdrawal?->metadata ?? [
|
|
|
'mocked' => true,
|
|
'mocked' => true,
|
|
|
'environment' => app()->environment(),
|
|
'environment' => app()->environment(),
|
|
|
],
|
|
],
|
|
|
-
|
|
|
|
|
- 'bank_response' => $withdrawal?->bank_response,
|
|
|
|
|
- ];
|
|
|
|
|
|
|
+ );
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
private function mockTransferId(string $idempotencyKey): string
|
|
private function mockTransferId(string $idempotencyKey): string
|