Laravel 9 - Create Contact in ZOHO Crm Tutorial Example

In this article i will share with you how to integrate zoho api in laravel 9 application and how to create contact in zoho crm using laravel. zoho is a best application for create lead, contact and you can manage your sale there.

So, recentally i was working in one laravel sale related application and they want to create contact in Zoho platform frorm the laravel application. so, here i am share with you how to implement create contact in zoho crm from the laravel 9.

Simply, follow the step. i make it this article very simple.

Step - 1 : Create Routes

Here, we create two route for add contact in zoho crm from the laravel 9 application.

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ContactController;
use App\Http\Controllers\ZohoController;

// Listing contact route
Route::get('contacts', [ContactController::class, 'index'])->name('contacts');

// Add contact in ZOHO
Route::get('zohocrmauth', [ZohoController::class, 'auth'])->name('zohocrmauth');
Route::get('zohocrm', [ZohoController::class, ['store')->name('zohocrm');

Step - 2 : Add Controller and Models

In, this step we need to created "ContactController", "ZohoController" and "Contact" Model using the following artisan command.

php artisan make:controller ContactController --resource --model=Contact
php artisan make:controller ZohoController

After the running above command your model and controller created in your application now just write the following code in it.

app/Http/Controllers/ContactController.php

namespace App\Http\Controllers;

use App\Models\Contact;
use Illuminate\Http\Request;

class ContactController extends Controller
{
    public function index()
    {
    	$data = Contact::get();
        return view('articles.index', compact('data'));
    }
}

app/Http/Controllers/ZohoController.php

namespace App\Http\Controllers;

use App\Models\Contact;
use Illuminate\Http\Request;

class ZohoController extends Controller
{
    public function auth(Request $request)
    {
        $uri = route('zohocrm');
        $scope =  'ZohoInvoice.contacts.Create';
        $clientid = 'here your zoho clientid';
        $accestype = 'offline';

        $redirectTo = 'https://accounts.zoho.com/oauth/v2/auth' . '?' . http_build_query(
        [
        'client_id' => $clientid,
        'redirect_uri' => $uri,
        'scope' => 'ZohoInvoice.contacts.Create',
        'response_type' => 'code',
        ]);

        \Session()->put('zoho_contact_id', $request->id);

        return redirect($redirectTo);
    }

    public function store(Request $request)
    {
        $input = $request->all();
        $contact_id = \Session::get('zoho_contact_id');
        $client_id = 'Here your zoho crm client_id';
        $client_secret = 'Here your zoho crm client_secret';
        \Session::forget('zoho_contact_id');

        // Get ZohoCRM Token
        $tokenUrl = 'https://accounts.zoho.com/oauth/v2/token?code='.$input["code"].'&client_id='.$client_id.'&client_secret='.$client_secret.'&redirect_uri='.route('zohocrm').'&grant_type=authorization_code';

        $tokenData = [

        ];

        $curl = curl_init();     
        curl_setopt($curl, CURLOPT_VERBOSE, 0);     
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);     
        curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);     
        curl_setopt($curl, CURLOPT_TIMEOUT, 300);   
        curl_setopt($curl, CURLOPT_POST, TRUE);//Regular post  
        curl_setopt($curl, CURLOPT_URL, $tokenUrl);     
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);     
        curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($tokenData));

        $tResult = curl_exec($curl);
        curl_close($curl);
        $tokenResult = json_decode($tResult);
        if(isset($tokenResult->access_token) && $tokenResult->access_token != '') {
            $getContact = Contact::where('id', $contact_id)->first();

            // Add Contact in ZohoCRM
            $jsonData = '{
                "contact_name": "'.$getContact->company_name.'",
                "company_name": "'.$getContact->company_name.'",
                "website": "'.$getContact->website_url.'",
                "billing_address": {
                    "attention": "Mr.'.$getContact->userName.'",
                    "address": "'.$getContact->getApplication.'",
                    "street2": "",
                    "state_code": "",
                    "city": "'.$getContact->city.'",
                    "state": "'.$getContact->state_country.'",
                    "zip": '.$getContact->zip_code.',
                    "country": "'.$getContact->country.'",
                    "fax": "",
                    "phone": "'.$getContact->phone_no.'"
                },
                "shipping_address": {
                    "attention": "Mr.'.$getContact->userName.'",
                    "address": "'.$getContact->getApplication.'",
                    "street2": "",
                    "state_code": "",
                    "city": "'.$getContact->city.'",
                    "state": "'.$getContact->state_country.'",
                    "zip": '.$getContact->zip_code.',
                    "country": "'.$getContact->country.'",
                    "fax": "",
                    "phone": "'.$getContact->phone_no.'"
                },
                "contact_persons": [
                    {
                        "salutation": "Mr",
                        "first_name": "'.$getContact->userName.'",
                        "last_name": "",
                        "email": "'.$getContact->userEmail.'",
                        "phone": "'.$getContact->phone_no.'",
                        "mobile": "'.$getContact->userMobile.'",
                        "is_primary_contact": true
                    }
                ]
            }';

            $curl = curl_init('https://invoice.zoho.com/api/v3/contacts');
            curl_setopt($curl, CURLOPT_VERBOSE, 0);     
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);     
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);     
            curl_setopt($curl, CURLOPT_TIMEOUT, 300);   
            curl_setopt($curl, CURLOPT_POST, TRUE);//Regular post  
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);     
            curl_setopt($curl, CURLOPT_HTTPHEADER, array(
                "Authorization: Zoho-oauthtoken ".$tokenResult->access_token,
                "X-com-zoho-invoice-organizationid: 688931512"
            ) );
            curl_setopt($curl, CURLOPT_POSTFIELDS,'JSONString='.$jsonData);
            
            //Execute cUrl session
            $cResponse = curl_exec($curl);
            curl_close($curl);

            $contactResponse = json_decode($cResponse);
            // echo "<pre>";
            // print_r($jsonData);
            // dd($contactResponse);
            if(isset($contactResponse->code) && $contactResponse->code == 0) {
                \Session::put('success','Contact created in ZohoCRM successfully.!');
                return redirect()->route('contacts');
            } else {
                \Session::put('error','Contact not create, please try again.!!');
                return redirect()->route('contacts');
            }
        } else {
            \Session::put('error','ZohoCRM token not generated, please try again.!!');
            return redirect()->route('contacts');
        }        
    }
}

Step - 3 : Create Contact Listing View

Now we need to create very simple listing view for our "contacts". just write the following simple bootstrap 4 view for listing data in table formate.

resources/views/contacts/index.blade.php

<!DOCTYPE html>
<html>
<head>
    <title>Laravel 9 Contact add in Zoho CRM - laravelcode.com</title>
    <link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha/css/bootstrap.css" rel="stylesheet">
</head>
<body>
  
<div class="container">
    @if ($message = Session::get('success'))
        <div class="alert alert-success">
            <p>{{ $message }}</p>
        </div>
    @endif
   
    <table class="table table-bordered">
        <tr>
            <th>No</th>
            <th>Name</th>
            <th>Email</th>
            <th width="280px">Action</th>
        </tr>
        @foreach ($data as $key => $value)
        <tr>
            <td>{{ ++$i }}</td>
            <td>{{ $value->name }}</td>
            <td>{{ $value->email }}</td>
            <td>
                <a class="btn btn-info" href="{{ route('zohocrmauth', ['id' => $value->id]) }}">Add Contact in ZOHO</a>
            </td>
        </tr>
        @endforeach
    </table>
</div>
   
</body>
</html>

i hope you like this article.