Kaizen 94 PHP SDK V4 Configuration and Initialization

Kaizen 94 PHP SDK V4 Configuration and Initialization

Hello and welcome to another Kaizen week!

In previous Kaizen posts, we have covered in detail how to configure and initialize PHP SDKs for Zoho CRM v2.1 APIs. We have since released SDKs for v4 and v5 APIs. However, starting from v4, there are some changes in the configuration and initialization process.  In this post, we will discuss you how to configure and initialize PHP SDK v4 and v5.

The PHP Software Development Kit (SDK) simplifies the integration of client PHP applications with Zoho CRM. Acting as a wrapper for the REST APIs, it streamlines the usage of Zoho CRM services. 

Before proceeding with the configuration, make that your client application meets the prerequisites. This includes having PHP 7 or above installed, along with the cURL extension, which is necessary for connecting and communicating with Zoho CRM APIs.

I. Register your application with Zoho CRM

Registering your application with Zoho CRM is a mandatory step in order to authenticate and authorize API calls using the OAuth2.0 standards.
  1. Go to https://api-console.zoho.com
  2. Click on Get Started or +ADD CLIENT.
  3. Choose the Client Type as Self-Client or Server based Applications depending on your application.
  4. Fill in the necessary details and click CREATE. Once you successfully register your self-client, you will receive a Client ID and Client Secret.

II. Installing the PHP SDK 

  1. If not already installed, follow the instructions provided at the corresponding link to install Composer.

     Mac/Linux
     curl -sS https://getcomposer.org/installer | php (terminal command)
     Windows https://getcomposer.org/doc/00-intro.md#installation-windows

  2. Install PHP-SDK using Composer
    1. Navigate to the workspace of your client app.
    2. Run the following command in the workspace. Upon successful installation, the system will create a package named vendor in the workspace of your client app. 
       
      composer require zohocrm/php-sdk-4.0 (for v4 APIs)
       composer require zohocrm/php-sdk-5.0 (for v5 APIs)
  3. To use the SDK in your project, add the following line in your project PHP files. This loads and includes our PHP-SDK library in your project. If you skip this step, you will get a fatal error in response due to the missing libraries.
     require 'vendor/autoload.php';

III. Token Persistence

Token persistence refers to storing and utilizing authentication tokens provided by Zoho, enabling the SDK to refresh the access tokens without user intervention. The SDK offers three types of persistence - File, DB, and Custom - with file persistence being the default method. 
The persistence is achieved by writing an implementation of the inbuilt TokenStore interface, which has the following callback methods. 

 Methods Description
 findToken(Token $token) Invoked before firing a request to fetch the saved tokens. This method returns an implementation of Token interface object for the library to process it.
 saveToken(Token $token) Invoked after fetching access and refresh tokens from Zoho. This method saves the token details.
 deleteToken($id) This method is used to delete the given token details.
 getTokens() The method is used to retrieve all the stored tokens.
 deleteTokens()  The method to delete all the stored tokens.
 findTokenById($id)  This method is used to retrieve the user token details based on the unique ID.

Here, $token is an instance of the Token interface.

Token Persistence using a Database

In Database persistence, tokens are stored and retrieved from a database (e.g., MySQL).
Create a table in your database with the following required columns. For example, if you want to persist your tokens in a table named token in database named zoho, use this:
 
 CREATE DATABASE zoho; // use this to create database named zoho
// use this to create a table named token, with the following necessary columns
CREATE TABLE token ( 
  id varchar(10) NOT NULL,
  user_name varchar(255) NOT NULL,
  client_id varchar(255),
  client_secret varchar(255),
  refresh_token varchar(255),
  access_token varchar(255),
  grant_token varchar(255),
  expiry_time varchar(20),
  redirect_url varchar(255),
  primary key (id)
);

Note that the columns are different for API v2.1. Please refer to this post for more details. . 

File Persistence

File Persistence allows storing and retrieving the authentication tokens from the given file path. The file contains id, user_name, client_id, client_secret, refresh_token, access_token, grant_token, expiry_time and redirect_url. 

Custom Persistence

Custom Persistence refers to a technique where users can create their own method of storing and retrieving authentication tokens. To use this method, users need to implement the TokenStore interface and override its methods according to their own logic.

IV. Configuration

The configuration step involves setting up various details in the SDK, such as user authentication, token persistence, logging, API call timeout settings, and more. The following keys are defined during this process:
  1. environment (mandatory): The API environment which decides the domain and the URL to make API calls, in Domain::Environment pattern.
    Domains : USDataCenter, EUDataCenter, INDataCenter, CNDataCenter, AUDataCenter
    Environments : PRODUCTION(), DEVELOPER(), SANDBOX()
  2. Token (mandatory): This key contains the user token details. Create an instance of OAuthToken with the information that you get after registering your Zoho client.  Depending on the available tokens, you can select one of the following flows:
    Note : You need to generate the tokens (grant/access/refresh) beforehand to use them in the respective flows.
    a) grantToken flow - You should use the grant Token for configuration.
     $token = (new OAuthBuilder())
      ->clientId("clientId")
      ->clientSecret("clientSecret")
      ->userSignature($user) //optional
      ->grantToken("grantToken")
      ->redirectURL("redirectURL") //optional
      ->build();

    b) refreshToken flow - Utilize the refresh token in this flow.
    $token = (new OAuthBuilder())
      ->clientId("clientId")
      ->clientSecret("clientSecret")
    ->userSignature($user) //optional
      ->refreshToken("refreshToken")
      ->build();

    c) accessToken flow - You can use the access token to configure in this flow. Please note that the token will not be persisted in this case, and the access token will be directly used to make the API calls.
    $token = (new OAuthBuilder())
       ->userSignature($user) //optional
       ->accessToken("accessToken")
       ->build(); 

    d) id flow - You can use the id from the persisted token file/DB to make API calls. The id is a unique system generated value for each token details entry in the file/DB.
    $token = (new OAuthBuilder())
       ->id("id")
       ->build();

  3. logger (optional) : Create an instance of Logger Class to log exception and API information. You can set the level you want to log (FATAL, ERROR, WARNING, INFO, DEBUG, TRACE, ALL, OFF), and also configure the file path and file name for the log file. The default level is OFF.

    $logger = (new LogBuilder())
      ->level(Levels::INFO)
      ->filePath("/Documents/php_sdk_log.log")
      ->build();

  4. store (optional) : Configure your token persistence using this method. If this is skipped, the SDK creates the sdk_tokens.txt in the current working directory to persist the tokens by default. For more details, refer here.
  5. SDKConfig (optional) : The additional SDK configurations are taken care of with this method. 
     Configuration Key
    Description
     autoRefreshFields
     Default Value : False
    A boolean configuration key to enable or disable automatic refreshing of module fields in the background. If set to true, fields are refreshed every hour, and if set to false, fields must be manually refreshed or deleted.
     pickListValidation
     Default Value : True
    This field enables or disables pick list validation. If enabled, user input for pick list fields is validated, and if the value does not exist in the pick list, the SDK throws an error. If disabled, the input is not validated and the API call is made.
     enableSSLVerification
     Default Value : True
    A boolean field to enable or disable curl certificate verification. If set to true, the SDK verifies the authenticity of certificate. If set to false, the SDK skips the verification.
     connectionTimeout
     Default Value : 0
    The maximum time (in seconds) to wait while trying to connect. Use 0 to wait indefinitely.
     timeout
     Default Value : 0
    The maximum time (in seconds) to allow cURL functions to execute. Use 0 to wait indefinitely.

  6. requestProxy (optional) : Contains the proxy properties of the user. Configure this only if you're using a proxy server to make the API calls.
    $requestProxy = (new ProxyBuilder())
     ->host("proxyHost")
     ->port("proxyPort")
     ->user("proxyUser")
     ->password("password")
     ->build();

  7. resourcePath (optional) : Configure the absolute directory path to store user specific files containing module fields information. If skipped, the files will be stored in the project directory itself.

V. Initilization

After completing the configuration, you can proceed with initializing the SDK, and begin making API requests.

Here is a sample code to initialize the SDK, using refresh token flow and DB Persistence. 
 <?php
  use com\zoho\api\authenticator\OAuthBuilder;
  use com\zoho\api\authenticator\store\DBBuilder;
  use com\zoho\crm\api\InitializeBuilder;
  use com\zoho\crm\api\UserSignature;
  use com\zoho\crm\api\dc\USDataCenter;
  use com\zoho\api\logger\LogBuilder;
  use com\zoho\api\logger\Levels;
  use com\zoho\crm\api\SDKConfigBuilder;
  use com\zoho\crm\api\ProxyBuilder;

  require_once "vendor/autoload.php";

  class Initialize
  {
    public static function initializeSDK()
    {
      $user = new UserSignature("patricia@zoho.com");
      $environment = USDataCenter::PRODUCTION();
      $token = (new OAuthBuilder())
        ->clientId("1000.xxxxxxxxxxxxxxxx")
        ->clientSecret("554a9xxxxxxxxxxxxxxxxx")
->userSignature($user) //optional
        ->refreshToken("1000.xxxxxxxxxxxxxxxxxxxx") 
        ->redirectURL("www.zoho.com") //optional
        ->build();
     $logger = (new LogBuilder())
       ->level(Levels::INFO)
       ->filePath("/Documents/php_sdk_log.log")
       ->build();
     $tokenstore = (new DBBuilder())
       ->host("insert_your_hostname_here")
       ->databaseName("insert_your_database_name_here")
       ->userName("insert_your_db_username_here")
       ->password("insert_your_db_password_here")
       ->portNumber("insert_your_portnumber_here")
       ->tableName("insert_your_table_name_here")
       ->build();
     $autoRefreshFields = false;
     $pickListValidation = false;
     $connectionTimeout = 2;
     $timeout = 2;
     $enableSSLVerification = false;
     $configInstance = (new SDKConfigBuilder())
       ->autoRefreshFields($autoRefreshFields)
       ->pickListValidation($pickListValidation)
       ->sslVerification($enableSSLVerification)
       ->connectionTimeout($connectionTimeout)
       ->timeout($timeout)
       ->build();
     $resourcePath = "/Documents/phpsdk-application";
     $requestProxy = (new ProxyBuilder())
       ->host("proxyHost")
       ->port("proxyPort")
       ->user("proxyUser")
       ->password("password")
       ->build();
    (new InitializeBuilder())
      ->environment($environment)
      ->token($token)
      ->store($tokenstore) //optional
      ->SDKConfig($configInstance) //optional
      ->resourcePath($resourcePath) //optional
      ->logger($logger) //optional
      ->requestProxy($requestProxy) //optional
      ->initialize();
   }
 }

Initialize::initializeSDK();
?>

You are now set to use the PHP SDK and make API calls. 

If you have any queries, let us know the comments below, or send an email to support@zohocrm.com. We would love to hear from you!

Cheers!




    Access your files securely from anywhere



                  Zoho Developer Community




                                          • Desk Community Learning Series


                                          • Digest


                                          • Functions


                                          • Meetups


                                          • Kbase


                                          • Resources


                                          • Glossary


                                          • Desk Marketplace


                                          • MVP Corner


                                          • Word of the Day


                                          • Ask the Experts





                                                    Manage your brands on social media



                                                          Zoho TeamInbox Resources



                                                              Zoho CRM Plus Resources

                                                                Zoho Books Resources


                                                                  Zoho Subscriptions Resources

                                                                    Zoho Projects Resources


                                                                      Zoho Sprints Resources


                                                                        Qntrl Resources


                                                                          Zoho Creator Resources



                                                                              Zoho CRM Resources

                                                                              • CRM Community Learning Series

                                                                                CRM Community Learning Series


                                                                              • Kaizen

                                                                                Kaizen

                                                                              • Functions

                                                                                Functions

                                                                              • Meetups

                                                                                Meetups

                                                                              • Kbase

                                                                                Kbase

                                                                              • Resources

                                                                                Resources

                                                                              • Digest

                                                                                Digest

                                                                              • CRM Marketplace

                                                                                CRM Marketplace

                                                                              • MVP Corner

                                                                                MVP Corner





                                                                                  Design. Discuss. Deliver.

                                                                                  Create visually engaging stories with Zoho Show.

                                                                                  Get Started Now


                                                                                    Zoho Show Resources


                                                                                      Zoho Writer Writer

                                                                                      Get Started. Write Away!

                                                                                      Writer is a powerful online word processor, designed for collaborative work.

                                                                                        Zoho CRM コンテンツ








                                                                                          Nederlandse Hulpbronnen


                                                                                              ご検討中の方




                                                                                                    • Recent Topics

                                                                                                    • Incident Report: Zoho Cliq Services Restored in the EU Region (March 19, 2025)

                                                                                                      We received a report that the Zoho Cliq service in the EU region was down. It's been restored now. Our team is actively monitoring the issue, analyzing the root cause, and will share updates. Incident details: Date and Time: Mar 19, 2025, 11:44:24 AM
                                                                                                    • zet pack not working

                                                                                                      We are using the zet pack command to package our Zoho extension. However, after running the command, the extension gets packed, but the resulting package is empty. We've attached a screenshot for reference. Could you please assist us with resolving this
                                                                                                    • Very slow Zoho Mail?

                                                                                                      For the last week or so Zoho Mail seems to have starting functioning very slowly and having a few bugs. It's slow to open mails, slow to send, slow to change between email accounts. Sometimes clicking on a particular folder (eg Sent folder) stops working
                                                                                                    • Zoho Error: This Operation has been restricted. Please contact support-as@zohocorp.com for further details

                                                                                                      Hello There, l tried to verify my domain (florindagoreti.com.br) and its shows this error: This Operation has been restricted. Please contact support-as@zohocorp.com for further details. Screenshot Given Below -  please check what went wrong. Thanks
                                                                                                    • ERROR 554 5.1.8 Sender Address Blocked code(554)

                                                                                                      We have an email with Zoho ( comercial@bruiser.com.br), but, when we try associate the account in GMAIL, the server shows this message:  554 5.1.8 Sender Address Blocked code(554) I see this error appear when the limits of returns exceded 10 messages,
                                                                                                    • Dashboard tabs - last month relative

                                                                                                      Hello, On my dashboard, it has "last month relative" under some tabs such as deals created, for example, highlighting if it has increased or decreased from last month. Is it possible to add this feature onto the other tabs? There are a handful which don't
                                                                                                    • Disappearing Mouse cursor in Zoho Mail / Windows 11 (Chrome + Edge)

                                                                                                      I'm seeing an issue when writing mails with the light theme with the mouse cursor being white and the document area also being white - making it nearly impossible to see the mouse cursor. I see the problem on Windows 11 under Chrome and Edge. (Yet to
                                                                                                    • Best way to handle email sharing in CRM for safety

                                                                                                      Hello :) We have CRM+ and are configuring email sharing. We have gone for the public sharing with blocked domains for our company emails, and other companies who may email with private information. We have some contacts in the business who have a normal
                                                                                                    • Zoho Flow and Slack emojis

                                                                                                      Anyone have an luck with using slack emojis in zoho flow? When I send :smile: in zoho flow to slack, the message just says ':smile:' the mentions '@user' don't resolve either.
                                                                                                    • Urgent: Server Error & Broken Files in MS Office

                                                                                                      Hi, We have attempted to reach you multiple times via chat, email, and this platform but have not received a response. We are experiencing the following issues: When opening a document for editing, we receive a "server error" message (see attached screenshot).
                                                                                                    • No special characters on Brand's name.

                                                                                                      Our brand is called Haber's and we can't add that name because of the " ' " please allow special characters on brand's name.
                                                                                                    • setting owner of note when adding via deluge

                                                                                                      My organization has requested the ability to mass update the notes related list in the deals module. Since this can't be done with the mass update feature, I created an update "notes single" line field and created a workflow rule that triggers a function
                                                                                                    • Approver

                                                                                                      I noticed that this year, the leave approver for all employees has been changed to the portal admin. How can I revert this and set myself as the approver again, as I was previously?
                                                                                                    • Recurring Bookings

                                                                                                      Will Zoho Bookings ever offer an option to the customer to schedule recurring meetings (unlimited) for the same days/times? Making a client schedule the same days/times for an entire month is a tedious process. I'd like to offer the option upfront to
                                                                                                    • How do we add Google Analytics code to Zoho Bookings scheduling pages or the thank you page?

                                                                                                      We need to track user activity on individual Bookings' pages and/or the thank you pages? How do we do this?
                                                                                                    • Add Image Upload Field to Zoho Bookings Registration Form

                                                                                                      Hi, We would like to request the addition of an image upload field to the Zoho Bookings registration form. Currently, Zoho Bookings only supports text-based fields (e.g., Single Line, Multi-Line, Email, Checkbox, Dropdown, Radio Button, and Date), but
                                                                                                    • Bookings duration - days

                                                                                                      Hi team, Is there any way to setup services/bookings that span multiple days? I am using Zoho Bookings for meeting room bookings. Clients may wish to book a room for more than one day, for up to a month.  If not, is there a plan to allow services to be setup with durations of Days as well as hours and minutes? Many thanks, Anna.
                                                                                                    • Bookings Sync with Zoho Calendar Breaks Again and Again

                                                                                                      I have documented notes since June 2019! The sync between Bookings and Zoho Calendar continues to break at random times. We are nearly 3 years later and still have sync problems pop up randomly! As I type, it's broken again. I have been a stubborn client
                                                                                                    • Can't Reschedule appointments

                                                                                                      Hi,  I am attempting to reschedule all appointments for this week from one Trainer to another. I have made sure the time is available in the Trainers calendar we are moving the appointments to but whenever I go to reschedule the appointment it still comes up saying the trainer has no available time at all this week.  The next appointment is Wednesday 11am so need to get it switched over ASAP!! Thanks
                                                                                                    • Zoho Bookings: How to set a limit for maximum bookings per day?

                                                                                                      Let's say I have 1 hour slots OPEN for an entire day. What if I want all of the OPEN slots to turn OFF if/when I hit a certain number of total bookings for that day? I usually only want a total of 5 appointments to be booked but I'm not sure of the exact
                                                                                                    • Calendar view - All-day with date-time fields

                                                                                                      Hi friends, I have a calendar view that is showing records based on e.g. start-time and end-time, both of datatype date-time. I couldn't figure out of to show "all day records" in the all-day section of the weekly and daily views. Trying to set start-time/end-time to e.g.  15-10-2012 00:00:00 was not helpful. What else should I try please? Kind regards, Idan
                                                                                                    • Zoho CRM Tags not carrying over to Zoho Campaigns

                                                                                                      We would like to create Campaign Segments and/or Lists based upon tags given in Zoho CRM, but we are unable to figure out how to do it. For example, if a customer is tagged "Residential" we would like Zoho Campaigns to create a list or segment based on
                                                                                                    • Zoho Bookings Not Showing Allocated Time Slots

                                                                                                      Hi, I have a real problem at the moment with Zoho Bookings not showing any available time slots and really not sure why this is happening. Could Someone from support please investigate. I have gone through all of my settings and calendar integration and can't see what the problem is. WOuld welcome some support please. https://zoho-tony1709.zohobookings.com/#/customer/coachcurl https://zoho-tony1709.zohobookings.com/#/customer/tagb Tony
                                                                                                    • Attention: Important updates to the payment gateway integrations

                                                                                                      Greetings from the Zoho Bookings team! We have a few important updates to the payment gateway integrations that allow you to collect online payments for your appointments. The following payment gateways will be updated, and we encourage you to make the
                                                                                                    • Multi Day booking for resources

                                                                                                      I have following business-case: Rental for Tablets. Customer should be able to select how many device for how many days he'd like to rent. Same as a car rental for multiple days. Is this possible with Bookings on the current version?
                                                                                                    • Export Options

                                                                                                      Hi, In calendar, List view, there is an option to show or hide fields, and we export this view daily, and use it to create a Gantt type chart for the days bookings. It would be SUPER helpful (and time saving) to be able to export the Notes and or Custom
                                                                                                    • Tip #3: How to change your booking page language

                                                                                                      Displaying your booking page in your target audience's language can greatly increase customer satisfaction. By speaking their language, you will help customers feel more comfortable scheduling with you and create a stronger connection with them. Let's
                                                                                                    • Ability to Set Text Direction for Individual Cells in Zoho Sheet

                                                                                                      Dear Zoho Sheet Team, We hope you are doing well. We would like to request an enhancement in Zoho Sheet that allows users to set the text direction (right-to-left or left-to-right) for individual cells, similar to what is available in Google Sheets. Use
                                                                                                    • Create Google meet link for a group

                                                                                                      Hello, in the company that I work, we have been using calendly to create a consultation where more than one person can schedule at the same hour and day. I've been trying to implement it on zoho bookings and I don't know if it is possible. In my tests,
                                                                                                    • Link for booked scedule on invitation

                                                                                                      I hav installed some sites for booking appointments in the booking app ... but tht invitation does not contain a link to the meeting software e.b.ZOOM, Google Meet or Teams ... how do I fix this?
                                                                                                    • Zoho Desk integration with Power BI

                                                                                                      Hi, I want to be able to create a Power BI report which has live updates of ticket data from zoho desk, is this possile at all? Thanks Jack
                                                                                                    • Implement Meeting Polls in Zoho Bookings

                                                                                                      Dear Zoho Bookings Support Team, We'd like to propose a feature enhancement related to appointment scheduling within Zoho Bookings. Current Functionality: Zoho Bookings excels at streamlining individual appointment scheduling. Users can set availability
                                                                                                    • Adding number of days to an estimate.

                                                                                                      I need both QTY of item and "number of days hire" in my estimates at the line item level. Any clues as to how this is done would be greatly appreciated. It needs to calculate. Thanks J
                                                                                                    • Guided Conversation History Does Not Show in Ticket Submission

                                                                                                      Hello, An issue I've noticed is that once a user steps through the 3-5 questions on the guided conversations bot that raises a Zoho ticket for them, the history of the selections do not show on the ticket. It would be beneficial if the ticket could include
                                                                                                    • Function 58: Custom calculation in item table of invoices (2 fields)

                                                                                                      Hello everyone, and welcome back to our series! In Zoho Books, the Item Amount in invoices is calculated by multiplying the Quantity and Rate fields. Previously, we shared a function to include a custom field in this calculation. Today, we are taking
                                                                                                    • Re-assigning a user account

                                                                                                      I’d like to reassign an existing Zoho One user account (for a member of staff that is no longer working for the company) to a new member of staff that is joining the company. If I do this will we lose the emails associated with Contacts in the CRM for
                                                                                                    • How to Add a Contact to a Campaign Using Deluge Script

                                                                                                      Hi ZohoCommunity, I need help with adding a contact to a campaign in Zoho Campaigns using Deluge script. Specifically, I want to automatically add a contact to a campaign when the campaign name field in the contact information is filled. This field is
                                                                                                    • Creator to WorkDrive workflow | Missing "Upload file" WorkDrive action in Flow or not?

                                                                                                      I am trying to build a Creator app with a form through which files can be uploaded to WorkDrive and simultaneously added to a Creator database. As far as I understood, automating this Creator-WorkDrive workflow can best be done with Flow, offering greater
                                                                                                    • Issue with Zoho CRM DELUGE Search – No Results Returned

                                                                                                      Hi, I’m trying to run the following code, but it returns nothing. I have 4 records where the Next_Date field has the value "OK". I tried changing the date format to different types, like "2025-01-01", but I still get no results. Can you help me understand
                                                                                                    • Subform Bug during Approval Process

                                                                                                      If a field is editable during the waiting stage of an Approval Process and a record is modified, the subform glitches. Steps to reproduce: In the Approval Process, allow a field to be modified while waiting for approval. Edit the record during this stage.
                                                                                                    • Next Page