✏️ 正在编辑: TransfeeraService.php
路径:
/srv/systems_dir/koruspay/application/Modules/Api/TransfeeraService.php
提示:
您可以编辑任何文件(包括二进制文件),但请注意不当修改可能导致文件损坏。
<?php namespace Modules\Api; use Carbon\Carbon; use Core_Exception; use Core_Service_Partner; use Core_Service_Transfeera; use DomainException; use Exception; use Model_DbTable_Split; use Model_DbTable_SplitItens; use Model_DbTable_Transactions; use Model_Payers; use Model_Split; use Model_Transactions; use Throwable; class TransfeeraService { public static $_calculateTaxTransaction = false; public function createPayer($payer) { throw new Exception("API Desabilitada"); } public function createInvoice($transaction, $type) { $service = new Core_Service_Transfeera($transaction['company_id']); $data = []; if ($type == 'BANKSLIP') { $charge = $service->createInvoiceBankSlip($transaction); } else { $charge = $service->createInvoicePix($transaction); } if ($charge->error) { throw new Exception($charge->error); } if (in_array($type, ['PIX', 'SPLIT'])) { $data = [ "situation" => 'PENDENTE', "invoice_id_pix" => $charge->id, "pix_qr_code" => $charge->emv_payload, "pix_copy_paste" => $charge->emv_payload, "invoice_date" => Carbon::now()->format('Y-m-d H:i:s') ]; } elseif ($type == 'BANKSLIP') { $data = [ "situation" => 'PENDENTE', "invoice_id_boleto" => $charge->id, "pix_copy_paste" => $charge->qrcode->emv_payload, "barcode" => $charge->boleto->barcode, "digitable_line" => $charge->boleto->linha_digitavel, "invoice_date" => Carbon::now()->format('Y-m-d H:i:s') ]; } return $data; } public function createTransfer($transaction, $type) { $service = new Core_Service_Transfeera($transaction['company_id']); if ($type == 'SAQUE') { $return = $service->createWithdraw($transaction['amount']); } else { $return = $service->createTransfer($transaction, $type == 'TARIFA'); } if ($return->error) { throw new Core_Exception($return->message); } return [ 'transfer_id' => $return->id ?: null, 'status_description' => null ]; } public function getInvoiceDetail($invoice) { if ($invoice['invoice_id_pix']) { $service = new Core_Service_Transfeera($invoice['company_id']); $detail = $service->getInvoicePixDetail($invoice['invoice_id_pix']); return [ "pix_qr_code" => $detail->emv_payload, "pix_copy_paste" => $detail->emv_payload, 'situation' => $detail->status == "CONCLUIDA" ? "RECEBIDO" : "PENDENTE" ]; } else { throw new Exception("API Desabilitada"); } } public function checkPayment($transaction) { if (empty($transaction['invoice_id_boleto']) && empty($transaction['invoice_id_pix'])) { throw new Exception("Cobrança ainda não foi gerada."); } $service = new Core_Service_Transfeera($transaction['company_id']); $dataCharge = $service->getInvoicePixDetail($transaction['invoice_id_pix']); return $this->_receiptPayment($dataCharge); } protected function _receiptPayment($charge) { if (empty($charge)) { throw new Exception('Cobrança não encontrada.'); } if ($charge->status != "CONCLUIDA") { throw new Exception('Cobrança não está paga.'); } $transaction = (new Model_DbTable_Transactions())->findById($charge->integration_id); if (!$transaction) { throw new Exception('Transação não encontrada.'); } $transaction->situation = "RECEBIDO"; $transaction->payment_date = $charge->updated_at; $transaction->amount_paid = $charge->pix_received->value; $transaction->low_date = Carbon::now()->format('Y-m-d H:i:s'); $transaction->save(); if ($transaction->split_id > 0) { Model_Split::updateStatus(md5($transaction->split_id), 'RECEBIDO', 'PENDENTE'); } try { (new Model_Transactions())->createTax($transaction); } catch (Throwable $tr) { \Yuppie_Log::write("ERRO AO CRIAR TRANSFERÊNCIA DE TARIFA: " . $tr->getMessage()); } try { $partner = new Core_Service_Partner($transaction->company_id); if ($transaction->type == 'CREDITO') { $partner->sendNFSe($transaction->id); } if ($transaction->type == 'RECEBIMENTO') { $partner->returnInvoices([$transaction->id]); } } catch (DomainException $de) { \Yuppie_Log::write("ERRO AO EMITIR NFSE DO PARCEIRO: " . $de->getMessage()); } catch (Throwable $tr) { \Yuppie_Log::write("ERRO AO ENVIAR BAIXA PARA O PARCEIRO: " . $tr->getMessage()); } return $transaction->company_id; } public function receipt($playload) { $charge = $playload ? $playload->data: null; if (empty($charge)) { throw new Exception('Cobrança não encontrada.'); } $transaction = (new Model_DbTable_Transactions())->findById($charge->integration_id); if (!$transaction || $transaction->situation !== "PENDENTE") { throw new Exception('Transação não encontrada ou não está pendente.'); } $transaction->situation = "RECEBIDO"; $transaction->payment_date = $playload->date; $transaction->amount_paid = $charge->value; $transaction->proof_url = $charge->bank_receipt_url ?: $charge->receipt_file_url; $transaction->low_date = Carbon::now()->format('Y-m-d H:i:s'); $transaction->save(); if ($transaction->split_id > 0) { Model_Split::updateStatus(md5($transaction->split_id), 'RECEBIDO', 'PENDENTE'); } try { (new Model_Transactions())->createTax($transaction); } catch (Throwable $tr) { \Yuppie_Log::write("ERRO AO CRIAR TRANSFERÊNCIA DE TARIFA: " . $tr->getMessage()); } try { $partner = new Core_Service_Partner($transaction->company_id); if ($transaction->type == 'CREDITO') { $partner->sendNFSe($transaction->id); $partner->sendProofPayment($transaction); } if ($transaction->type == 'RECEBIMENTO') { $partner->returnInvoices([$transaction->id]); } } catch (DomainException $de) { \Yuppie_Log::write("ERRO AO EMITIR NFSE DO PARCEIRO: " . $de->getMessage()); } catch (Throwable $tr) { \Yuppie_Log::write("ERRO AO ENVIAR BAIXA PARA O PARCEIRO: " . $tr->getMessage()); } return $transaction->company_id; } public function transfer($playload) { $transfer = $playload ? $playload->data: null; if (empty($transfer->status)) { throw new Exception('Status não informado.'); } if (empty($transfer->integration_id)) { throw new Exception('Identificador da transferencia não informado.'); } $status = [ 'FINALIZADO' => 'CONCLUIDO', 'FALHA' => 'ERRO' ]; $situation = $status[$transfer->status]; $data = [ 'situation' => $situation, 'status_description' => $transfer->status_description, 'proof_url' => $transfer->bank_receipt_url ?: $transfer->receipt_file_url, 'date_error' => $situation == 'ERRO' ? Carbon::now()->format('Y-m-d') : null, 'amount_paid' => $transfer->value, 'payment_date' => $situation == 'CONCLUIDO' ? $transfer->transfer_date : null, 'low_date' => $situation == 'CONCLUIDO' ? Carbon::now()->format('Y-m-d H:i:s') : null ]; $dataFilter = array_filter($data); $transaction = Model_Transactions::updateTransfer($transfer->id, $dataFilter); if ($transaction && $transaction->split_item_id > 0) { unset($dataFilter['amount_paid'], $dataFilter['payment_date'], $dataFilter['low_date']); (new Model_DbTable_SplitItens())->updateItem($transaction->split_item_id, $dataFilter); (new Model_DbTable_Split())->setStatusLote($transaction->split_item_id); } } public function getTaxDetail($tax) { throw new Exception("API Desabilitada"); } public function getExtract($fields, $company) { throw new Exception("API Desabilitada"); } public function chargeReceivable($playload) { $charge = $playload ? $playload->data: null; if (empty($charge)) { throw new Exception('Cobrança não encontrada.'); } if ($charge->status != "paid") { \Yuppie_Log::write("Cobrança não está paga => " . print_r($playload, true)); throw new Exception('Cobrança não está paga.'); } $transaction = (new Model_DbTable_Transactions())->findById($charge->external_id); if (!$transaction) { \Yuppie_Log::write("Transaction não encontrada => " . print_r($playload, true)); throw new Exception('Transação não encontrada.'); } $transaction->situation = "RECEBIDO"; $transaction->payment_date = $playload->date; $transaction->amount_paid = current($charge->payments)->amount ? current($charge->payments)->amount / 100 : null; $transaction->proof_url = current($charge->payments)->receipt_url ?: null; $transaction->penalty = $charge->fine_amount ? $charge->fine_amount / 100 : null; $transaction->fees = $charge->interest_amount ? $charge->interest_amount / 100 : null; $transaction->discount = $charge->discount_amount ? $charge->discount_amount / 100 : null; $transaction->low_date = Carbon::now()->format('Y-m-d H:i:s'); $transaction->save(); try { (new Core_Service_Partner($transaction->company_id))->returnInvoices([$transaction->id]); } catch (Throwable $tr) { \Yuppie_Log::write("ERRO AO ENVIAR BAIXA PARA O PARCEIRO: " . $tr->getMessage()); } return $transaction->company_id; } public function getBalance(int $companyId) { return (new Core_Service_Transfeera($companyId))->balance(); } }
💾 保存文件
← 返回文件管理器