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

                                                                                                              • Prevent duplicate with custom fields?

                                                                                                                I was wondering something about custom field/custom modules in Zoho Desk. For some reason you can make a custom field mandatory but not unique? For example, if I create a custom module to manage equipment and renewal and make a field serial number no
                                                                                                              • Generate leads from instagram

                                                                                                                hello i have question. If connect instagram using zoho social, it is possible to get lead from instagram? example if someone send me direct message or comment on my post and then they generate to lead
                                                                                                              • Where is the desktop app for Zoho Projects???

                                                                                                                As a project manager, I need a desktop app for the projects I manage. Yes, there's the web app, which is AWESOME for cross browser and platform compatibility... but I need a real desktop app for Projects that allow me to enter offline information where
                                                                                                              • How to Automate Monthly PDF Reports with Filters in Zoho Creator

                                                                                                                Hi everyone, I’m trying to build an automated monthly reporting process in Zoho Creator and would appreciate suggestions or best practices from anyone who has done something similar. What I’m trying to do: I have a form called New_Customer with fields
                                                                                                              • Feedback: Streamlining Note Management in Zoho Notebook

                                                                                                                Dear Team/Support, I would like to share some feedback regarding the note management system that could help improve usability and accessibility for users like myself. Notebook 1 (screenshot attached): Currently, the system does not allow selecting and
                                                                                                              • showing Limit exceeded

                                                                                                                Good afternoon...trust you're good. I've been having issues working with but it's not responding. it's showing Limit exceeded, sorry it seems like too many people are working on the sheet right now please try again later. meanwhile no one is working on
                                                                                                              • Upload API

                                                                                                                I'm trying to use the Upload API to upload some images and attach them to comments (https://desk.zoho.com/DeskAPIDocument#Uploads#Uploads_Uploadfile) - however I can only ever get a 401 or bad request back. I'm using an OAuth token with the Desk.tickets.ALL
                                                                                                              • Losing description after merging tickets

                                                                                                                Hello, We merge tickets when they are about the same topic from the same client. It happens sometimes. We recently noticed that after the merger only the description from the master ticket is left in a thread. And the slave-ticket description is erased.
                                                                                                              • update linked contacts when update happens in account

                                                                                                                Hi, I have a custom field called Licence in the Accounts module. When someone buys a licence, I’d like to update a custom field in the related Contacts. How can I achieve this? I noticed that workflows triggered on Accounts only allow me to update fields
                                                                                                              • Problem Management Module

                                                                                                                I am looking for a Problem Management module within Zoho Desk. I saw in some training videos that this is available, and some even provided an annual price for it. I want an official confirmation on whether this is indeed available. This is not a particularly
                                                                                                              • Unable to explore desk.zoho.com

                                                                                                                Greetings, I have an account with zoho which already has a survey subscription. I would like to explore desk.zoho.com, but when I visit it while logged in (https://desk.zoho.com/agent?action=CreatePortal) I just get a blank page. I have tried different
                                                                                                              • Offline support for mobile app

                                                                                                                Accessing your files and folders from your mobile devices is now quicker and simpler, thanks to the power of offline support. Whether on an Android or iOS device, you can use the Offline function to save files and folders, so you can review them even
                                                                                                              • Zoho Desk KB article embedded on another site.

                                                                                                                We embed KB articles from Zoho Desk on another site (our application). When opening the article in a new tab, there is no issue, but if we choose lightbox, we are getting an error "To protect your security, help.ourdomain.com will not allow Firefox to
                                                                                                              • Does Attari Messaging app have Bot option and APIB

                                                                                                                Hi, Does Attari also have Bot and API as we use in WhatsApp??
                                                                                                              • How to add application logo

                                                                                                                I'm creating an application which i do not want it to show my organization logo so i have changed the setting but i cannot find where to upload/select the logo i wish to use for my application. I have seen something online about using Deluge and writing
                                                                                                              • Details & Limitations of the Free Forever Plan

                                                                                                                I cannot find any comparison/details about the Free Forever Plan. Can you please publish details of what are its limitations?
                                                                                                              • how to differentiate if whatsapp comes from certain landing page?

                                                                                                                I create a Zobot in SalesIQ to create a Whatsapp bot to capture the lead. I have 2 landing pages, one is SEO optimized and the other want is optimized for leads comes from Google Ads. I want to know from which landing page this lead came through WhatsApp
                                                                                                              • How to record company set up fees?

                                                                                                                Hi all, We are starting out our company in Australia and would appreciate any help with setting up Books accounts. We paid an accountant to do company registration, TFN, company constitution, etc. I heard these all can be recorded as Incorporation Costs, which is an intangible asset account, and amortised over 5 years. Is this the correct way to do it under the current Australian tax regulations? How and when exactly should I record the initial entry and each year's amortasation in Books? Generally
                                                                                                              • Show Payment terms in Estimates

                                                                                                                Hi,  we are trying to set up that estimates automatically relates payment terms for the payment terms we introduced on Edit contact (Field Payment terms).  How can it be done? Our aim is to avoid problems on payment terms introduced and do not need to introduce it manually on each client (for the moment we are introducing this information on Terms and Conditions.  Kind Regards, 
                                                                                                              • When dispatched to crew, assigning lead missing

                                                                                                                Hello, For the past two or three weeks, whenever an officer assigns Service Appointment to a team, the lead person is missing from the assigned service list. Therefore, we have to reschedule the SA and then the lead person becomes visible in the assigned
                                                                                                              • I want to transfer the project created in this account to another account

                                                                                                                Dear Sir I want to transfer the project created in one account to another account
                                                                                                              • Custom Bulk Select Button

                                                                                                                Zoho CRM offers the ability to select multiple records and invoke a Custom Button This functionality is missing from Recruit Currently we can only add buttons in the detail page and list But we cannot select Multiple Records and invoke a function with
                                                                                                              • Power of Automation :: Smart Ticket Management Between Zoho Desk and Projects

                                                                                                                Hello Everyone, A custom function is a software code that can be used to automate a process and this allows you to automate a notification, call a webhook, or perform logic immediately after a workflow rule is triggered. This feature helps to automate
                                                                                                              • BUG - Google Business Buttons - Add a button to GBP Post

                                                                                                                I am experiencing an issue with the "Add a button" feature when creating posts for my Google Business Profile (GBP) through Zoho Social. When I schedule or publish a GBP post and include a call-to-action button with a specific URL, the post itself publishes
                                                                                                              • Do you have software like Windows software?

                                                                                                                We want swadeshi software
                                                                                                              • Trying to export a report to Excel via a deluge script

                                                                                                                I have this code from other posts but it gives me an error of improper statement, due to missing ; at end of line or incomplete expression. Tried lots of variations to no avail. openUrl(https://creatorapp.zoho.com/<username>/<app name>/XLSX/#Report:<reportname>,"same
                                                                                                              • Need help to create a attach file api

                                                                                                                https://www.zoho.com/crm/developer/docs/api/v8/upload-attachment.html Please help me to create it... It's not working for while. Do you have some example?
                                                                                                              • Export view via deluge.

                                                                                                                Hi, Is it possible to export a view (as a spreadsheet) via deluge? I would like to be able to export a view as a spreadsheet when a user clicks a button. Thanks     
                                                                                                              • Possible to generate/download Quote PDF using REST API?

                                                                                                                See title. Is there any way after a quote has been created to export to a PDF using a specified template and then download it? Seems like something that should be doable. Is this not supported in the API v2.0?
                                                                                                              • Creating an invoice to be paid in two installments?

                                                                                                                Hi there, I own a small Photographic Services business and have not been able to find a way to fit my billing system into Zoho, or any other Accounting software. The way my payments work is: 1. Customer pays 50% of total price of service to secure their
                                                                                                              • Bug in allowing the user to buy out of stock items

                                                                                                                Hi i want to allow the user to buy out of stock items, according to the commerce documentation if i disable Restrict "Out of stock" purchases it will, but it doesnt work, so i want to know if it had any relation with zoho inventory, and if theres any
                                                                                                              • Replace Lookup fields ID value with their actual name and adding inormation from subforms

                                                                                                                Hi everyone,  I wanted to see if someone smarter than me has managed to find any solutions to two problems we have. I will explain both below.  To start we are syncing data from Zoho CRM to Zoho Analytics and I will use the Sales Order module when giving
                                                                                                              • Can a Zoho Sites page be embedded into another website (outside Zoho)

                                                                                                                Hi All, We have a request from a client - they'd like to take one of our information pages created in Zoho Sites and embed it into their own website? I was told through an email with Zoho that this was possible >>Thank you for your patience regarding
                                                                                                              • Bug in allowing the user to buy out of stock items

                                                                                                                Hi i want to allow the user to buy out of stock items, according to the commerce documentation if i disable Restrict "Out of stock" purchases it will, but it doesnt work, so i want to know if it had any relation with zoho inventory, and if theres any
                                                                                                              • Transition Criteria Appearing on Blueprint Transitions

                                                                                                                On Monday, Sept. 8th, the Transition criteria started appearing on our Blueprints when users hover over a Transition button. See image. We contacted Zoho support because it's confusing our users (there's really no reason for them to see it), but we haven't
                                                                                                              • Zoho CRM Sales Targets for Individual Salespeople

                                                                                                                Our organistion has salespeople that are allocated to different regions and have different annual sales targets as a result. I am building an CRM analytics dashboard for the sales team, which will display a target meter for the logged in salesperson.
                                                                                                              • Transfer all Related Data to new Account Owner

                                                                                                                Currently when I change the account Owner I only see the option to change only the open deals But I want the new account owner to take over all the related modules and all the deal stages Is it not possible right now? Am I missing something? Do I really
                                                                                                              • How to Calculate MTTR (Mean Time to Resolve)

                                                                                                                We want to calculate MTTR (Mean Time to Resolve) in our Zoho Analytics report under Tickets. Currently, we are using the following fields: Ticket ID Ticket Created Time Ticket Closed Time Ticket On Hold Time We are planning to calculate MTTR (in days)
                                                                                                              • How to export project tasks, including the comments

                                                                                                                Hi, how can I export the project tasks, whereby I can also see the comments associated to a specific task? The use-case is that often we use comments to discuss or update a task related ideas. I would like to export the tasks, where we can also see the
                                                                                                              • Does Zoho Sheet Supports https://n8n.io ?

                                                                                                                Does Zoho Sheet Supports https://n8n.io ? If not, can we take this as an idea and deploy in future please? Thanks
                                                                                                              • Next Page