Facade

 avatar
unknown
php
a year ago
5.1 kB
7
Indexable
<?php

namespace App\Services\Provider;

use Illuminate\Support\Facades\Http;
use Illuminate\Support\Facades\Storage;

class WhatsAppProvider
{

    private $whatsapp = [];

    private $attachment = [];

    private $body = [];


    function __construct()
    {

    }

    public function to($number)
    {
        $this->whatsapp['to'] = $number;
        return $this;
    }

    public function type($type)
    {
        $this->whatsapp['type'] = $type;
        return $this;
    }

    public function template($name, $language)
    {
        $this->whatsapp['template'] = [
            "name" => $name,
            "language" => ["code" => "$language"]
        ];
        return $this;
    }

    public function attachment($type, $data)
    {
        $this->attachment[] = [
                "type" => $type,
                $type => $data
        ];

        $this->setHeader();

        return $this;

    }

    public function reply($id)
    {
        $this->whatsapp['type'] = [
           "context" => [
               "message_id" => $id
           ]
        ];

        return $this;
    }

    public function sendDocument($link, $filename=null, $caption=null)
    {
        $this->whatsapp['type'] = "document";
        $this->whatsapp['document'] = [
            "link" => $link,
            "filename" => $filename,
            "caption" => $caption
        ];

        return $this;
    }


    public function sendImage($link)
    {
        $this->whatsapp['type'] = "image";
        $this->whatsapp['image'] = [
            "link" => $link
        ];

        return $this;
    }

    public function sendText($text, $preview=false)
    {
        $this->whatsapp['type'] = "text";
        $this->whatsapp['text'] = [
            "preview_url" => $preview,
            "body" => $text
        ];

        return $this;
    }

    public function text($text)
    {
        $this->body[] = [
            "type" => "text",
            "text" => $text
        ];

        return $this;
    }

    public function currency($fallback, $code, $amount_1000)
    {
        $this->body[] = [
            "type" => "currency",
            "currency" => [
                "fallback_value" => $fallback,
                "code" => $code,
                "amount_1000" => $amount_1000
            ]
        ];

        return $this;
    }


    private function setHeader()
    {
        $this->whatsapp[$this->whatsapp['type']]['components'][] = [
            "type" => "header",
            "parameters" => $this->attachment
        ];

        return $this;
    }

    public function addButtonCode($text)
    {
        $this->whatsapp[$this->whatsapp['type']]['components'][] = [
            "type" => "button",
            "sub_type" => "url",
            "index" => 0,
            "parameters" => [
                0 => [
                    "type" => "text",
                    "text" => $text
                ]
            ]
        ];

        return $this;
    }

    public function prepare()
    {
        $this->whatsapp[$this->whatsapp['type']]['components'][] = [
            "type" => "body",
            "parameters" => $this->body
        ];

        return $this;
    }

    public function dd()
    {
        dd($this->whatsapp);
    }

    public function getMediaProfile()
    {
        $this->whatsapp['messaging_product'] = 'whatsapp';
        $this->whatsapp['recipient_type'] = 'individual';

        $response = Http::withToken(config('app.access_waba'))
            ->acceptJson()
            ->accept('application/json')
            ->get('https://graph.facebook.com/v17.0/5515996603199/media');

       return $this;

    }
        public function getMedia($id, $tenant_id='') {
        $this->whatsapp['messaging_product'] = 'whatsapp';
        $this->whatsapp['recipient_type'] = 'individual';

        $response = Http::withToken(config('app.access_waba'))
            ->acceptJson()
            ->accept('application/json')
            ->get('https://graph.facebook.com/v17.0/'.$id);

        $response = json_decode($response->body());

        $type = explode("/", $response->mime_type);

        $file = Http::withToken(config('app.access_waba'))->withHeaders([
            'accept' => 'application/octet-stream',
        ])->get($response->url);

        $file_name = $tenant_id.'/'.$type[0].'/'.time().'.'.$type[1];

        $file = Storage::put($file_name, $file->body());

        return $file_name;

    }

    public function sendMessage()
    {
        $this->whatsapp['messaging_product'] = 'whatsapp';
        $this->whatsapp['recipient_type'] = 'individual';

        $response = Http::withToken(config('app.access_waba'))
            ->acceptJson()
            ->accept('application/json')
            ->post('https://graph.facebook.com/v17.0/200173996516071/messages', $this->whatsapp);

        return $response;

    }

}
Editor is loading...
Leave a Comment