Kaizen #17 - PHP SDK

Kaizen #17 - PHP SDK

Hello everyone!
Welcome to yet another post in the Kaizen series.
This week, we are going to discuss the PHP SDK.

PHP Software Development Kit

PHP SDK allows you to create client PHP applications that can be integrated with Zoho CRM effortlessly. It serves as a wrapper for the REST APIs, thus making it easier to use the services of Zoho CRM.

Here is a sample of how the PHP SDK acts as a middleware between Zoho CRM and Client PHP Application.



What can you do with the PHP SDK?
  • You can use the PHP SDK to exchange data between Zoho CRM and the client PHP application. 
  • Authenticate your application easily every time you sync data between Zoho CRM and the client PHP application, as the SDK takes care of generating the access/refresh tokens automatically. 

Installing the PHP SDK
You can install the PHP SDK for Zoho CRM through the Composer—a dependency manager for PHP applications. 

The pre-requisites for the client PHP application, before you start using the PHP SDK are:
  • The client app must have PHP 5.6 or above with a curl extension.
  • The client app must have the PHP SDK installed through Composer. 
  • The ZCRMRestClient::initialize($configuration) function must be called once while starting the client app. It contains the configuration details as key-value pairs.

PHP SDK and the PHP client application
  1. Include the following line to your client application (wherever you intend to use the PHP SDK) to access all the functionalities of the PHP SDK.

    require ‘vendor/autoload.php’
  2. Include the namespaces of the class in the "use" statement. For instance, if you use the ZCRMRestclient class, you must add the following.

    use zcrmsdk\crm\setup\restclient\ZCRMRestClient;

How to start using the PHP SDK?
  • Step-1: Prerequisite: Register your application
  • Step-2: Install the PHP SDK
  • Step-3: Authenticate the client application
  • Step-4: Knowledge Base: Token Persistence
  • Step-5: Initialization
Step-1: Prerequisite: Register your application

All the Zoho CRM APIs are authenticated by the OAuth2.0 standards. It is mandatory to authenticate the client application with Zoho.

2. Click ADD CLIENT.


3. Choose a client type. For instance, Self Client.



4. Choose the Client Type, and click CREATE. 


In the case of a web-based client, you need to specify the Client Name, Homepage URL and redirect URIs. 


5. Once you successfully register your self-client, you will receive a Client ID and Client Secret.


Step-2: Install the PHP SDK

Installing Composer 
As discussed earlier, you can install the PHP SDK through the Composer. To install the composer:

Operating System
Procedure
Mac/Linux
Run the following command in your terminal: curl -sS https://getcomposer.org/doc/00-intro.md#installation-linux-unix-osx
Windows
Click here to download the .exe file and install composer.

Installing the PHP SDK through the Composer
  1. Navigate to the workspace of your client app.
  2. Run the following command in the workspace of your client app.

    composer require zohocrm/php-sdk

  3. Once you run this command, the system installs the PHP SDK and creates a package named vendor in the workspace of your client app.


Step-3: Authenticate the client application

You must authenticate the client PHP application before it can use the PHP SDK. To authenticate the client PHP application, pass the configuration associative array to the initialization process.

  1. Create $configuration associative array. It must contain the authentication credentials required.
  2. The configuration associative array must then be passed using the ZCRMRestClient::initialize($configuration); function.
Configuration associative array

You must add the configuration values to the PHP associative array (key-value pair) and pass it as an argument to the ZCRMRestclient::initialize($configuration); function. Below is the list of keys that are to be in the associative array.


Key
Description
client_id, client_secret
mandatory
You can get these details after registering your client.
redirect_uri
mandatory for a web based client
The redirect URI of your web-based PHP client application.
currentUserEmail
mandatory
It is the email ID of the current user. You can set it in two ways:
a. Through the currentUserEmail key in the configuration associative array (or)
b. Through the ZCRMRestClient::setCurrentUserEmailId({user_email_id}) line in the code.
fileUploadUrl
Mandatory when using the Bulk Write API
The value for this key must be https://content.zohoapis.com
applicationLogFilePath
optional
The SDK automatically creates a file to store the log information. The absolute file path of the folder in which the system must create the log file must be specified. The default file name is the ZCRMClientLibrary.log. If not specified, the system creates the file inside the project.
sandbox
optional
Represents whether to make API calls from the sandbox account.
true: Make the API calls from the sandbox account.
false: Do not make the API calls from the sandbox account. This is the default value.
apiBaseUrl
optional
Represents the URL to make API calls. It denotes the domain of the user. The possible values are:
www.zohoapis.com (default)
www.zohoapis.eu
www.zohoapis.com.cn

apiVersion
optional
Represents the API version. Specify the value as v2 (default).
access_type
optional
Specify the value as offline
There is no support for Online OAuth client in PHP SDK as of now.
accounts_url
optional
persistence_handler_class
optional
The implementation of ZohoOAuthPersistenceInterface
token_persistence_path
optional
The absolute path to the folder that contains zcrm_oauthtokens.txt file. This key is mandatory if you want to use file persistence. If you include this key, this method takes precedence over other persistence methods. 
persistence_handler_class_name
optional
The name of the custom class for persistence. This key is available only in PHP SDK 2.0.7 and above versions.
db_port
optional
You can specify this key if you want to use DB persistence. 
The default value is 3306.
db_username, db_password
optional
Specify the username and password of your database. The default value for db_username is root.
host_address
optional
The address of the machine in which the MySQL server is running. The default value is 'localhost'. This key is available only in PHP SDK 2.0.7 and above versions. 


Sample containing the mandatory keys alone:

$configuration=array("client_id"=>"1000.xxxxxxxxxxx"","client_secret"=>"831bxxxxxxxxxxxx","redirect_uri"=>"","currentUserEmail"=>"patricia@zylker.com"); 
ZCRMRestClient::initialize($configuration);

Sample containing all the keys:

$configuration=array("client_id"=>"1000.xxxxxxxxxxx",
            "client_secret"=>"831bxxxxxxxxxxxx",
            "redirect_uri"=>"redirect_uri",
            "currentUserEmail"=>"patricia@zylker.com",
            "applicationLogFilePath"=>"absolute/path/to/folder",
       "sandbox"=>"false","apiBaseUrl"=>"www.zohoapis.com",
            "apiVersion"=>"v2","access_type"=>"offline",
            "accounts_url"=>"https://accounts.zoho.com",
            "persistence_handler_class"=>"absolute/file/path/to/persistence/implementation",
            "token_persistence_path"=>"absolute/path/to/folder/zcrm_oauthtokens.txt", //should not contain "zcrm_oauthtokens.txt"
            "persistence_handler_class_name"=>"Persistence_class_name",
            "fileUploadUrl"=>"https://content.zohoapis.com"); 
ZCRMRestClient::initialize($configuration);


Step-4: Token Persistence

Your application should retain tokens (grant, access, refresh tokens) to automate the process of data-sync between your PHP application and Zoho CRM.

You can persist tokens in your application in three ways:

  • a. Using a Database
  • b. Using a File
  • c. Custom Persistence

a. Using a Database

If you prefer using database persistence, you can use the MySQL. 

Prerequisites while using the database persistence

  • The name of the database must be zohooauth.
  • There must be a table oauthtokens with columns
    a. useridentifier (varchar(100))
    accesstoken (varchar(100))
    refreshtoken (varchar(100))
    expirytime (bigint)
b. Using a File

This type of persistence uses a file to read and write OAuth tokens. The file persists the token of a single user. So, it is best used for the 'self-client' type of authentication since it involves only one user.  If you prefer using the file persistence, you must create an empty file in the local drive named zcrm_oauthtokens.txt. Further, set the file path in the token_persistence_path, of the $configuration associative array. Do not include "zcrm_oauthtokens.txt" in the path.

For example, if the file is in a folder named "TokenStorage", then

token_persistence_path="{path/to/TokenStorage}"


c. Custom Persistence

From the PHP SDK version 2.0.0, you can have your own implementation of persistence. 
You must mention the name of the persistence class in the persistence_handler_class_name key of configuration associative array. Provide the file path of the PHP file that implements the custom persistence, in the persistence_handler_class key of the configuration associative array. The class must implement the ZohoOAuthPersistenceInterface.

You must write an implementation of the inbuilt ZohoPersistenceHandler interface, with the following methods:
  • getOAuthTokens($userEmailId)—invoked to fetch the saved tokens. This method should return ZohoOAuthTokens object for the library to process it.
  • saveOAuthData(ZohoOAuthTokens tokens)—invoked to store the tokens.
  • deleteOAuthTokens($userEmailId)— invoked to delete the tokens.

Step-5: Initialization

Once you define the OAuth configuration, you can initialize the PHP client application.
You need to generate the tokens (grant/access/refresh) to run the app.

Generating the tokens

As the V2 Zoho CRM APIs follow the OAuth2.0 protocol, it is mandatory to authorize the OAuth2.0 app before using the SDK functions with an access token.
You can generate an access token from a grant token.
You can generate the grant token in two ways based on the type of client.

For Self Client Applications
  1. Log in to Zoho and go to Zoho Developer Console.
  2. Select your Self Client.
  3. Provide the necessary scopes separated by commas, along with the scope aaaserver.profile.READ
  4. Select the Time Duration from the drop-down. This is the time the grant token is valid for.
  5. Provide a description for the scopes. Click GENERATE.
  6. Copy the grant token.
For Web-based Applications

It is the responsibility of your client app to generate the grant token for the users trying to login.
Your application's UI must have the Login with Zoho option to open the grant token URL of Zoho, which would prompt for the user's OAuth2.0 authorization.
Upon the successful login of the user, the grant token will be sent as a parameter to your registered redirect URL.

Generating an access token from the grant token

Use the below code snippet in your main class.

$configuration =array("client_id"=>"1000.xxxxxxxxxxx","client_secret"=>"831bxxxxxxxxxxxx","redirect_uri"=>"","currentUserEmail"=>"patricia@zylker.com");
ZCRMRestClient::initialize($configuration);
$oAuthClient = ZohoOAuth::getClientInstance();
$grantToken = "paste_the_self_authorized_grant_token_here";
$oAuthTokens = $oAuthClient->generateAccessToken($grantToken);

Note
  • The code snippet to generate the access token from the grant token is valid only once per grant token. If the grant token expires before you generate the access token, you must generate a new grant token only.
  • Generating access and refresh tokens is a one-time process. After the tokens are generated for the first time, the SDK persists them based on the keys defined in the configuration dictionary, and refreshes the access token as and when required.

App Startup

Invoke the following line of code every time you start your client app.

$configuration =array("client_id"=>"1000.xxxxxxxxxxx","client_secret"=>"831bxxxxxxxxxxxx","redirect_uri"=>"","currentUserEmail"=>"patricia@zylker.com");
ZCRMRestClient::initialize($configuration);


Sample SDK Code

The following image shows the sample SDK code to create a new record. The downloadable sample code is attached.



For more sample codes, refer to our SDK guide.

We hope you found this post useful. Keep a tab on this series for more exciting topics!

Reach out to us at support@zohocrm.com if you have any questions, or let us know in the comment section.

We will meet you next week with another useful topic. 

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



                                                            • Sticky Posts

                                                            • Kaizen #222 - Client Script Support for Notes Related List

                                                              Hello everyone! Welcome to another week of Kaizen. The final Kaizen post of the year 2025 is here! With the new Client Script support for the Notes Related List, you can validate, enrich, and manage notes across modules. In this post, we’ll explore how
                                                            • Kaizen #217 - Actions APIs : Tasks

                                                              Welcome to another week of Kaizen! In last week's post we discussed Email Notifications APIs which act as the link between your Workflow automations and you. We have discussed how Zylker Cloud Services uses Email Notifications API in their custom dashboard.
                                                            • Kaizen #216 - Actions APIs : Email Notifications

                                                              Welcome to another week of Kaizen! For the last three weeks, we have been discussing Zylker's workflows. We successfully updated a dormant workflow, built a new one from the ground up and more. But our work is not finished—these automated processes are
                                                            • Kaizen #152 - Client Script Support for the new Canvas Record Forms

                                                              Hello everyone! Have you ever wanted to trigger actions on click of a canvas button, icon, or text mandatory forms in Create/Edit and Clone Pages? Have you ever wanted to control how elements behave on the new Canvas Record Forms? This can be achieved
                                                            • Kaizen #142: How to Navigate to Another Page in Zoho CRM using Client Script

                                                              Hello everyone! Welcome back to another exciting Kaizen post. In this post, let us see how you can you navigate to different Pages using Client Script. In this Kaizen post, Need to Navigate to different Pages Client Script ZDKs related to navigation A.


                                                            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

                                                                                              Get Started. Write Away!

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

                                                                                                Zoho CRM コンテンツ



                                                                                                  Nederlandse Hulpbronnen


                                                                                                      ご検討中の方




                                                                                                              • Recent Topics

                                                                                                              • additional accounts

                                                                                                                If I brought 5 emails to my account. Can I later buy additional emails.
                                                                                                              • Why I am unable to configure Zoho Voice with my Zoho CRM account?

                                                                                                                I have installed Zoho Voice in my Zoho CRM, but as per the message there is some config needed in Zoho Voice interface. But when I click on the link given in the above message, I get an access denied page.
                                                                                                              • Cliq Meeting Calls No Audio and Screen Share

                                                                                                                When in a Cliq channel meeting, the audio does not work at all on pc. When i use my phone as audio source, screen share on pc does not work. I have updated audio drivers but the strangest thing is that during a 1 on 1 call, it works well. Therefore the
                                                                                                              • Work anniversary and birthdays on connect

                                                                                                                Hello, I like the idea of having employee's work anniversary and birthdays on the dashbaord. Do you have to have the employee complete this information themselves in connect settings, or does it pull from their directory settings? (ie. we use Zoho one
                                                                                                              • Alias Email Id already exists

                                                                                                                Hi I'm trying to create an alias : contact @ yoavarielevy.co.il but i get the message  Alias Email Id already exists I had an account with the same name but I deleted it. Can you help? Thanx Yoav
                                                                                                              • Feature Request: Ability to Set a Custom List View as Default for All Users

                                                                                                                Dear Zoho CRM Support Team, We would like to request a new feature in Zoho CRM regarding List Views. Currently, each user has to manually select or favorite a custom list view in order to make it their default. However, as administrators, we would like
                                                                                                              • Adding Multiple Products (Package) to a Quote

                                                                                                                I've searched the forums and found several people asking this question, but never found an answer. Is ti possible to add multiple products to a quote at once, like a package deal? This seems like a very basic function of a CRM that does quotes but I can't
                                                                                                              • webinar registration confirmation are landing in SPMA folders

                                                                                                                I am trialing zoho webinar and do not have access to custom domains. When I test user registrations, they are working but the resulting confirmation email is landing in a spam folder. How can I avoid this?
                                                                                                              • Multiple organizations under Zoho One

                                                                                                                Hello. I have a long and complicated question. I have a Zoho One account and want to set it up to serve the needs of 6 organizations under the same company. Some of the Zoho One users need to be able to work in more than 1 organization’s CRM and other
                                                                                                              • Unbundle feature for composite items

                                                                                                                We receive composite items from our vendors and sell them either individually or create other composite items out of them. So, there is a lot of bundling and unbundling involved with our composite items. Previously, this feature was supported in form
                                                                                                              • workflow not working in subform

                                                                                                                I have the following code in a subform which works perfectly when i use the form alone but when i use the form as a subform within another main form it does not work. I have read something about using row but i just cant seem to figure out what to change
                                                                                                              • Fetch data from another table into a form field

                                                                                                                I have spent the day trying to work this out so i thought i would use the forum for the first time. I have two forms in the same application and when a user selects a customer name from a drop down field and would like the customer number field in the
                                                                                                              • Record comment filter

                                                                                                                Hi - I have a calendar app that we use to track tasks. I have the calendar view set up so that the logged in user only sees the record if they are assigned to the task. BUT there are instances when someone is @ mentioned in the record when they are not
                                                                                                              • How to View Part Inventory and Warehouse Location When Creating a Work Order in Zoho FSM

                                                                                                                Hi everyone, We’re currently setting up Zoho FSM and would like to improve how our team selects parts when creating a Work Order. Right now, when we add a part or item to a Work Order, we can select it from our Zoho Inventory list but we don’t see any
                                                                                                              • FSM too slow today !!

                                                                                                                Anybody else with problem today to loading FSM (WO, AP etc.)?
                                                                                                              • Not able to Sign In in Zoho OneAuth in Windows 10

                                                                                                                I recently reset my Windows 10 system, after the reset when I downloaded the OAuth app and tried to Sign In It threw an error at me. Error: Token Fetch Error. Message: Object Reference not set to an instance of an object I have attached the screenshot
                                                                                                              • Mapping a custom preferred date field in the estimate with the native field in the workorder

                                                                                                                Hi Zoho, I created a field in the estimate : "Preferred Date 1", to give the ability to my support agent to add a preferred date while viewing the client's estimate. However, in the conversion mapping (Estimate to Workorder), I'm unable to map my custom
                                                                                                              • Is there a way to request a password?

                                                                                                                We add customers info into the vaults and I wanted to see if we could do some sort of "file request" like how dropbox offers with files. It would be awesome if a customer could go to a link and input a "title, username, password, url" all securely and it then shows up in our team vault or something. Not sure if that is safe, but it's the best I can think of to be semi scalable and obviously better than sending emails. I am open to another idea, just thought this would be a great feature.  Thanks,
                                                                                                              • Single Task Report

                                                                                                                I'd like a report or a way to print to PDF the task detail page. I'd like at least the Task Information section but I'd also like to see the Activity Stream, Status Timeline and Comments. I'd like to export the record and save it as a PDF. I'd like the
                                                                                                              • Auto-response for closed tickets

                                                                                                                Hi, We sometimes have users that (presumably) search their email inbox for the last correspondence with us and just hit reply - even if it's a 6 month old ticket... - this then re-opens the 6 month old ticket because of the ticket number in the email's subject. Yes, it's easy to 'Split as new Ticket', but I'd like something automated to respond to the user saying "this ticket has already been resolved and closed, please submit a new ticket". What's the best way to achieve this? Thanks, Ed
                                                                                                              • How to Push Zoho Desk time logged to Zoho Projects?

                                                                                                                I am on the last leg of my journey of finally automating time tracking, payments, and invoicing for my minutes based contact center company - I just have one final step to solve - I need time logged in zoho desk to add time a project which is associated
                                                                                                              • Cannot access KB within Help Center

                                                                                                                Im working with my boss to customize our knowledge base, but for some reason I can see the KB tab, and see the KB categories, but I cannot access the articles within the KB. We have been troubleshooting for weeks, and we have all permissions set up, customers
                                                                                                              • Export to excel stored amounts as text instead of numbers or accounting

                                                                                                                Good Afternoon, We have a quarterly billing report that we generate from our Requests. It exports to excel. However if we need to add a formula (something as simple as a sum of the column), it doesn't read the dollar amounts because the export stores
                                                                                                              • why my account is private?

                                                                                                                when i post on zohodesk see only agent only
                                                                                                              • Getting ZOHO Invoice certified in Portugal?

                                                                                                                Hello, We are ZOHO partners in Portugal and here, all the invoice software has to be certified by the government and ZOHO Invoice still isn´t certified. Any plans? Btw, we can help on this process, since we have a client that knows how to get the software certified. Thank you.
                                                                                                              • 500 Internal Server Error

                                                                                                                I have been trying to create my first app in Creator, but have been getting the 500: Internal Server Error. When I used the Create New Application link, it gave me the error after naming the application. After logging out, and back in, the application that I created was in the list, but when I try to open it to start creating my app, it gives me the 500: Internal Server Error. Please help! Also, I tried making my named app public, but I even get the error when trying to do that.
                                                                                                              • Client Script | Update - Client Script Support For Portals

                                                                                                                Dear All! We are excited to announce the highly anticipated feature: Client Script support for Portals. We understand that many of you have been eagerly awaiting this enhancement, and we are pleased to inform you that this support is now live for all
                                                                                                              • Professional Plan not activated after payment

                                                                                                                I purchased the Professional Plan for 11 users (Subscription ID: RPEU2000980748325) on 12 September 2025, and the payment has been successfully processed. However, even after more than 24 hours, my CRM account still shows “Upgrade” and behaves like a
                                                                                                              • Auto Update Event Field Value on Create/Edit

                                                                                                                Hi there, I know this question has been posted multiple times and I've been trying many of the proposed similar scripts for a while now but nothing seems to work... what might I do wrong? The error I receive is this: Value given for the variable 'meetingId'
                                                                                                              • Payroll and BAS ( Australian tax report format )

                                                                                                                Hello , I am evaluating Zoho Books and I find the interface very intuitive and straight forward. My company is currently using Quickbooks Premier the Australian version. Before we can consider moving the service we would need to have the following addressed : 1.Payroll 2.BAS ( business activity statement ) for tax purposes 3.Some form of local backup and possible export of data to a widely accepted format. Regards Codrin Mitin
                                                                                                              • Problem with Email an invoice with multiple attachments using API

                                                                                                                I have an invoice with 3 attachments. When I send an email manually using the UI, everything works correctly. I receive an email with three attachments. The problem occurs when I try to initiate sending an email using the API. The email comes with only
                                                                                                              • Page Layouts for Standard Modules like CRM

                                                                                                                For standard modules like quotes, invoices, purchase orders, etc, it would be a great feature to be able to create custom page layouts with custom fields in Zoho Books similar to how you can in Zoho CRM. For example, and my current use case, I have a
                                                                                                              • Non-depreciating fixed asset

                                                                                                                Hi! There are non-depreciable fixed assets (e.g. land). It would be very useful to be able to create a new type of fixed asset (within the fixed assets module) with a ‘No depreciation’ depreciation method. There is always the option of recording land
                                                                                                              • Fixed asset management

                                                                                                                I want to know if there is any individual module for fixed assets management
                                                                                                              • One time sale item in billing automatically detects as service

                                                                                                                if i have some items which i don't want to add in my "item" list because its sold only for one time. but when i type item name in invoice, it (system) automatically takes it as a service and despite of HSN , it shows SAC code to be entered. if its selectable i.e. either item or service , it would be very helpful and a must have feature.
                                                                                                              • Project template after project creation

                                                                                                                How can I apply a project template AFTER the project has been created?
                                                                                                              • convert the project to templet

                                                                                                                i have some deployment ME product for different customer , i need to create a fixed template for use it rather then keeping creating this template every time
                                                                                                              • Related Module in Sharing Rules

                                                                                                                Zoho CRM team recently added the feature to filter records by Related Records It will be really beneficial if we can have this feature for Sharing Rules as well
                                                                                                              • Assignment Thresholds Resetting After Lead Conversion

                                                                                                                Hello everyone, We're facing an issue with Zoho CRM's lead assignment thresholds that makes them unsuitable for our workflow. I'm hoping to find a potential workaround or solution from the community. Here’s our current process: A new lead is created automatically
                                                                                                              • Territory view for custom modules?

                                                                                                                I have recently activated territories however I can't seem to find how to use territories for custom modules? These modules have territories:  Contacts /  Accounts / Opportunities These modules don't have territories:   Buildings (custom module) and 
                                                                                                              • Next Page