ArgetJaoPedro

Guilherme aqui

Apr 20th, 2021
958
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  
  3. namespace App\Services;
  4.  
  5. use Illuminate\Support\Facades\Http;
  6.  
  7. class MelhorEnvio
  8. {
  9.     public $accessToken;
  10.     public $refreshToken;
  11.     protected $header = [
  12.         'Accept' => 'application/json',
  13.         'User-Agent' => 'Ecommerce Maxifarma. Contato técnico: Ecomp (comunicacao@ecomp.co)'
  14.     ];
  15.  
  16.     public function __construct()
  17.     {
  18.         $this->accessToken = config('services.melhorenvio.callback');
  19.         $this->ids = [];
  20.  
  21.         // CODIGO ABAIXO FOI FEITO PARA FAZER A AUTHENTICAÇÃO POR OAUTH
  22.         // $url = config('services.melhorenvio.url').'/oauth/token';
  23.         // $body = [
  24.         //     'grant_type' => 'authorization_code',
  25.         //     'client_id' => config('services.melhorenvio.id'),
  26.         //     'client_secret' => config('services.melhorenvio.secret'),
  27.         //     'redirect_uri' => config('services.melhorenvio.callback'),
  28.         //     'code' => config('services.melhorenvio.code')
  29.         // ];
  30.  
  31.         // $http = new GuzzleHttp\Client;
  32.  
  33.         // $response = Http::asForm()->post($url, $body);
  34.  
  35.         // $this->accessToken = config('services.melhorenvio.code');
  36.         // $this->refreshToken = $response->refresh_token;
  37.     }
  38.  
  39.     function calculateShipping($shipmentData)
  40.     {
  41.         $body = [
  42.             'from' => [
  43.                 'postal_code' => config('pharmacy.postal_code') // farmacia
  44.             ],
  45.  
  46.             'to' => [
  47.                 'postal_code' => $shipmentData->postalCode // cliente
  48.             ],
  49.  
  50.             'package' => [
  51.                 'height' => config('pharmacy.package.height'),
  52.                 'width' => config('pharmacy.package.width'),
  53.                 'length' => config('pharmacy.package.length'),
  54.                 'weight' =>  ($shipmentData->weight + config('pharmacy.package.base_weight')) / 1000 // Conversão de gramas para quilogramas
  55.             ],
  56.             'options' => [
  57.                 'insurance_value' => config('pharmacy.insurance_value'), // seguro, conferir com o cliente
  58.                 'receipt' => false,
  59.                 'own_hand' => false
  60.             ],
  61.             'services' => config('pharmacy.services')
  62.         ];
  63.  
  64.         $header = [
  65.             'Accept' => 'application/json',
  66.             'User-Agent' => 'Ecommerce Maxifarma. Contato técnico: Ecomp (comunicacao@ecomp.co)',
  67.             'Content-Type' => 'application/json',
  68.             'Authorization' => 'Bearer ' . config('services.melhorenvio.code')
  69.         ];
  70.  
  71.         $url = config('services.melhorenvio.url').'/api/v2/me/shipment/calculate';
  72.         $response = Http::withHeaders($header)->withToken(config('services.melhorenvio.code'))->post($url, $body);
  73.         return $response;
  74.     }
  75.  
  76.     public function addShippingToCart($shipmentData) {
  77.         $productsCollection = collect($shipmentData['products']);
  78.         $products = $productsCollection->map(function($item) {
  79.             return [
  80.                 'name' => $item['name'],
  81.                 'quantity' => $item['quantity'],
  82.                 'unitary_value' => $item['unitary_value']
  83.             ];
  84.         });
  85.  
  86.         $body = [
  87.             'service'=> $shipmentData['shipmentService'], // TODO: pegar o serviço certo
  88.             'agency'=> config('pharmacy.agency'),
  89.             'from'=> [
  90.                 'name'=> config('pharmacy.name'),
  91.                 'phone'=> config('pharmacy.phone'),
  92.                 'email'=> config('pharmacy.email'),
  93.                 'company_document'=> config('pharmacy.email'), // cnpj
  94.                 // 'state_register'=> config('pharmacy.state_register'),
  95.                 'address'=> config('pharmacy.address'),
  96.                 'complement'=> config('pharmacy.complement'),
  97.                 'number'=> config('pharmacy.number'),
  98.                 'district'=> config('pharmacy.district'),
  99.                 'city'=> config('pharmacy.city'),
  100.                 'country_id'=> 'BR',
  101.                 'postal_code'=> config('pharmacy.postal_code'),
  102.                 //  Abaixo estão alguns possíveis campos que não foram colocados nessa requisição.
  103.                 // 'document'=> $shipmentData->cpf,  // cpf
  104.                 // 'note'=> 'observação'
  105.             ],
  106.             'to'=> [
  107.                 'name'=> $shipmentData['name'],
  108.                 'phone'=> $shipmentData['phone'],
  109.                 'email'=> $shipmentData['email'],
  110.                 'document'=> $shipmentData['cpf'], // cpf
  111.                 'address'=> $shipmentData['street'],
  112.                 'complement'=> $shipmentData['complement'],
  113.                 'number'=> $shipmentData['house_number'],
  114.                 'district'=> $shipmentData['neighbourhood'],
  115.                 'city'=> $shipmentData['city'],
  116.                 'country_id'=> 'BR',
  117.                 'postal_code'=> $shipmentData['postal_code'],
  118.                 //  Abaixo estão alguns possíveis campos que não foram colocados nessa requisição.
  119.                 // 'company_document'=> '89794131000101', // cnpj
  120.                 // 'state_register'=> '123456',
  121.                 // 'state_abbr'=> 'PR',
  122.                 // 'note'=> 'observação'
  123.             ],
  124.  
  125.             'products' => $products,
  126.  
  127.             'volumes'=> [
  128.                 [
  129.                     'height'=> config('pharmacy.package.height'),
  130.                     'width'=> config('pharmacy.package.width'),
  131.                     'length'=> config('pharmacy.package.length'),
  132.                     'weight'=> ($shipmentData['weight'] + config('pharmacy.package.base_weight')) / 1000 // Conversão de gramas para quilogramas
  133.                 ]
  134.             ],
  135.             'options'=> [
  136.                 'insurance_value'=> $shipmentData['price'],
  137.                 'receipt'=> false,
  138.                 'own_hand'=> false,
  139.                 'reverse'=> false,
  140.                 'non_commercial'=> false,
  141.                 'invoice'=> false,
  142.                 'platform'=> 'Nome da Plataforma',
  143.                 'tags'=> [
  144.                     [
  145.                         'tag'=> 'Maxifarma',
  146.                         'url'=> ''
  147.                     ]
  148.                 ]
  149.             ]
  150.         ];
  151.  
  152.     $header = [
  153.         'Accept' => 'application/json',
  154.         'User-Agent' => 'Ecommerce Maxifarma. Contato técnico: Ecomp (comunicacao@ecomp.co)',
  155.         'Content-Type' => 'application/json',
  156.         'Authorization' => 'Bearer ' . config('services.melhorenvio.code')
  157.     ];
  158.  
  159.     $url = config('services.melhorenvio.url').'/api/v2/me/cart';
  160.     $response = Http::withHeaders($header)->withToken(config('services.melhorenvio.code'))->post($url, $body);
  161.     return $response;
  162.     }
  163.  
  164.     public function buyShippings() {
  165.  
  166.         $shippings = app(MelhorEnvio::class)->getShippings();
  167.         $shippings = json_decode($shippings);
  168.         $cartIds = collect([]);
  169.  
  170.         foreach ($shippings->data as $shipping) {
  171.             $cartIds->push($shipping->id);
  172.         }
  173.  
  174.         $body = ['orders' => $cartIds ];
  175.  
  176.         $header = [
  177.             'Accept' => 'application/json',
  178.             'User-Agent' => 'Ecommerce Maxifarma. Contato técnico: Ecomp (comunicacao@ecomp.co)',
  179.             'Content-Type' => 'application/json',
  180.             'Authorization' => 'Bearer ' . config('services.melhorenvio.code')
  181.         ];
  182.  
  183.         $url = config('services.melhorenvio.url').'/api/v2/me/shipment/checkout';
  184.         $response = Http::withHeaders($header)->withToken(config('services.melhorenvio.code'))->post($url, $body);
  185.         app(MelhorEnvio::class)->ids = [];
  186.         return $response;
  187.     }
  188.  
  189.     public function getShippings() {
  190.         $header = [
  191.             'Accept' => 'application/json',
  192.             'User-Agent' => 'Ecommerce Maxifarma. Contato técnico: Ecomp (comunicacao@ecomp.co)',
  193.             'Content-Type' => 'application/json',
  194.             'Authorization' => 'Bearer ' . config('services.melhorenvio.code')
  195.         ];
  196.  
  197.         $url = config('services.melhorenvio.url').'/api/v2/me/cart';
  198.         $response = Http::withHeaders($header)->withToken(config('services.melhorenvio.code'))->get($url);
  199.         return $response;
  200.     }
  201. }
  202.  
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×