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




                                    Zoho Desk Resources

                                    • Desk Community Learning Series


                                    • Digest


                                    • Functions


                                    • Meetups


                                    • Kbase


                                    • Resources


                                    • Glossary


                                    • Desk Marketplace


                                    • MVP Corner


                                    • Word of the Day



                                        Zoho Marketing Automation


                                                Manage your brands on social media



                                                      Zoho TeamInbox Resources

                                                        Zoho DataPrep Resources



                                                          Zoho CRM Plus Resources

                                                            Zoho Books Resources


                                                              Zoho Subscriptions Resources

                                                                Zoho Projects Resources


                                                                  Zoho Sprints Resources


                                                                    Qntrl Resources


                                                                      Zoho Creator Resources



                                                                          Zoho Campaigns 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

                                                                                                  • Pre-fill TO and CC fields for Email Templates

                                                                                                    This would be a game changer to be able to set either specific email addresses or merge fields based on deal role titles into email templates. Please pass this along to *hopefully* add to future features of Zoho CRM.
                                                                                                  • Pick list - Cannot save list "Special Characters not Allowed" error message

                                                                                                    Bulk uploading values. All values are pretty standard - with the exception of a "-" (dash). Like:  Industry - Prepared Food Is the simple dash a special character too? Jan
                                                                                                  • Flow with CRM

                                                                                                    Hello, I have a simple flow that uses a web hook to enter data into a Sales Order. I have the web hook sending Flow data which has a PO field. If the PO has a special character like - or / or \ the task fails. How can I get the flow to be okay with the
                                                                                                  • Making the Resolution Tab Mandatory

                                                                                                    Hello Everyone! This edition is here to show you how to make the Resolution mandatory when closing a ticket. The Ticket Resolution tab helps keep a record of the solution provided for the ticket query. The resolution can serve as a quick reference to
                                                                                                  • Notificación de cumpleaños

                                                                                                    Hola: Se puede enviar alguna alerta de felicitación al personal que cumple años, que se dispare solo? Si existe como se puede hacer? Saludos
                                                                                                  • Automation#25: Move Tickets to Unassigned When the Owner Is Offline

                                                                                                    Hello Everyone, Welcome to this week's Community Series! 'Tis the holiday season—a time when work often takes a brief pause. The holiday spirit is in full swing at Zylker Techfix too, with employees taking some well-deserved time off. During this period,
                                                                                                  • Callback URLs

                                                                                                    I need to connect to an external service through an API that requires me to provide a Callback URL so that a status update can be sent back when the API request has been processed. Is there a way to do this in Creator without having to use a middleware
                                                                                                  • Email signature not being included if user creates ticket / sends email

                                                                                                    When I create a ticket (send email), the signature doesn't appear to be added to the ticket. Can you confirm if this is the case? It would obviously be useful to include the user's signature even when sending a client an email and not only on replie
                                                                                                  • Zoho Notebook window ignores taskbar

                                                                                                    When maximized to full screen, the Zoho Notebook window ignores the presence of the taskbar and overlaps it. What could be the problem? Linux Mint 22 Cinnamon. Zoho Notebook 3.2.0
                                                                                                  • URL for job opening

                                                                                                    I would like to ask you to add this feature to the product: create an unique url for each job opening on Zoho Recruit, so that I can add a link to it when I post the opportunity in a mailing list or on a forum.
                                                                                                  • Document images

                                                                                                    We used to be able to rotate the images but this has now been removed ???
                                                                                                  • VENDORS ARE NOT SYNCHED WITH CONTACTS IN CRM

                                                                                                    Hello, While the ACCOUNTS and CONTACTS (Including the primary contact) are synced with the CONTACTS module in CRM, the vendor's CONTACTS are not synced with CRM - which basically forces the users to re-enter all vendor's contacts twice and then update
                                                                                                  • Involved account types are not applicable when create journals

                                                                                                    { "journal_date": "2016-01-31", "reference_number": "20160131", "notes": "SimplePay Payroll", "line_items": [{ "account_id": "538624000000035003", "description": "Net Pay", "amount": 26690.09, "debit_or_credit": "credit" }, { "account_id": "538624000000000403", "description": "Gross", "amount": 32000, "debit_or_credit": "debit" }, { "account_id": "538624000000000427", "description": "CPP", "amount": 1295.64, "debit_or_credit": "debit" }, { "account_id": "538624000000000376", "description":
                                                                                                  • KB Templates

                                                                                                    * It would be nice if Zoho can provide users an option to create custom templates for KB articles. Also, it would be nice as well if the users can have an option to 1.) select a default template and 2.) declare default tag/tags, for KB articles created through Ticket's resolution.
                                                                                                  • Zoho CRM Reports Module on Mobil App

                                                                                                    I have the mobile app and the reports module doesn't appear in the sidebar for some reason. I saw a Youtube video where the user had the Reports module on mobile. Is there a setting to show it on mobile? Thanks.
                                                                                                  • Contacts Don't Always Populate

                                                                                                    I've noticed that some contacts can easily be added to an email when I type their name. Other times, a contact doesn't appear even though I KNOW it is in my contact list. It is possible the ones I loaded from a spreadsheet are not an issue and the ones
                                                                                                  • Zoho Projects Android app update - List view enhancement

                                                                                                    Hello, everyone! In the latest android version(v3.9.15) of the Zoho Projects app update, we have enhanced the List view of tasks. We have also introduced a complete scroll of the tasks in the list view without scrolling the task fields(status, start date,
                                                                                                  • On the US Data Centre rather than the UK but dont know how to migrate it

                                                                                                    We have a new staff member with an external email address and cant add them to Zoho chat - we have been told its becuase we are in the UK but on a US Data centre - we therefore need to change it but no idea how to can anyone else as we are going round
                                                                                                  • Zoho Sheet Custom function column showing Error #EVAL!

                                                                                                    Hello I have a custom function in Zoho Sheet developed to convert a date time from one time zone to another. The custom function takes date and time columns and then using subHour( ) converts the time to PST time. However, though the custom function works,
                                                                                                  • How to add a Data Updated As Of: dynamically in text?

                                                                                                    I need to add a "Data Updated As Of" in the dashboard to show when was the last date the data was updated. I tried to create a widget but it does not look really good, see below. Is there a way I can do this through the text widget and update it automatically
                                                                                                  • Create Your Own Issue Management System

                                                                                                    Effective issue management is a cornerstone of project success. Every bug or issue, no matter how small, needs to be tracked and resolved in time to maintain project momentum. In this post, we’ll explore how an issue management system in Zoho Projects
                                                                                                  • Resource utlisation

                                                                                                    Dear Team, We use the excel for the weekly predicted people utilization how the resource are allocated , is there any way that i can use any of the zoho products.
                                                                                                  • Ask the experts - A live Q & A discussion on Zoho Recruit

                                                                                                    We are delighted to come back with another edition of Ask the Experts community series. This edition, we'll be focusing on everything about Zoho Recruit. The topics will focus on the features that are used/asked by the majority of users and also based
                                                                                                  • Bug - OTP (email) and No Duplicates

                                                                                                    Scenario: Form with an email field, Validation: "No Duplicates" (because I want to ensure 1 entry per email). Embedded form into website (JS option). Enabled email based OTP. 1st test (via my website) - entered my email address - sent OTP - entered pin,
                                                                                                  • Personal Facebook page posting instead of Business Page

                                                                                                    I have a Facebook page that is associated with my Personal Profile and I am the Admin of that Page. I would like to schedule and Post to my Personal Page not the Business Page. Each time I try to connect to the "Page" it takes me to the Business Page. Is there a way of connecting to my personal page?
                                                                                                  • Fixed asset management

                                                                                                    I want to know if there is any individual module for fixed assets management
                                                                                                  • Recording depreciation of fixed assets as a percentage of residual value

                                                                                                    In India, fixed assets are depreciated as a percentage of their residual value at the beginning of each fiscal year. I went through the documentation for creating recurring journal entries, but could only find ways to depreciate by a fixed rupee amount
                                                                                                  • Function #28: Automatically calculate Customer Loyalty points

                                                                                                    Hello everyone, and welcome back to our series! Today, we're excited to share a workflow designed to streamline the management of loyalty points. Many businesses offer incentives or rewards in the form of loyalty points to their customers as a way to
                                                                                                  • Function #6: Calculate Commissions for paid invoices

                                                                                                    Zoho Books helps you automate the process of calculating and recording commissions paid to sales persons using custom functions. We've written a script that computes the commission amount based on the percentage of commission you enter and creates an
                                                                                                  • How to Add Product SKU in Invoice?

                                                                                                    How to Add Product SKU in Invoice?
                                                                                                  • Tracking movement between departments

                                                                                                    I've been developing a reporting system in Zoho and one of the groups I want to develop a report on primarily moves tickets from department to another. Is there a way to set up the reporting on Zoho (or Zoho Reports) that can tell me the number of tickets
                                                                                                  • Zoho CRM Calendar View

                                                                                                    Hello Zoho team, We need desperately a calendar view next to list, kandan and other views. I think it should be easy to implement as you already have the logic from Projects and also from Kanban View in CRM. In calendar view when we set it up - we choose
                                                                                                  • Call transcrition working for ringcentral?

                                                                                                    I don't see anything about what telephony providers can be used. The Zoho support person A said that RingCentral isn't supported. Zoho support person B said that it works, just make sure the call recording link works. Excellent instructions here: Call
                                                                                                  • What is syntax to call creator function (or trigger a creator workflow) from CRM deluge?

                                                                                                    What is syntax to call creator function (or trigger a creator workflow) from CRM deluge?
                                                                                                  • WhatsApp and Zoho Creator Integration

                                                                                                    How we have integrate WhatsApp App with Zoho Creator without using external application ?
                                                                                                  • Improve Creator Calendar Report

                                                                                                    Please can you improve the Creator Calendar Report General There is no way to highlight certain days, for example weekends or public holidays. There is no way to hide certain days, for example weekends. There is no way to modify the day header, it just
                                                                                                  • Important updates to Zoho CRM's email deliverability

                                                                                                    Last modified on: Jul 24, 2024 These enhancements are released for all users across all data centers. Modified on: Oct 30, 2023 Organisations that are in the Enterprise and above editions of Zoho CRM, and have not authenticated their email-sending domains
                                                                                                  • Custom modules not showing in developer console

                                                                                                    I'm trying to create a custom summing function for a custom module I made in my CRM. When I go to create the function, my module isnt showing up. Do I need to share the custom moldule with my developer console or something of the like?
                                                                                                  • Chart with Filtered Data vs Unfiltered Data

                                                                                                    I am looking to create a chart view that displays the full data set vs a subset of the data filtered by user filter. However I do not seem to find any method by which to exclude a plot from the applied filter or any other method by which to display the
                                                                                                  • Storage addon failed to upgrade

                                                                                                    Hi, I am trying to purchase addon storage, but i am getting upgrade failed error Sorry! We are unable to process your information. Please try again after some time. If the problem occurs again, please visit our Contact Us page to reach out to the appropriate
                                                                                                  • Next Page