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 #226: Using ZRC in Client Script

                                                              Hello everyone! Welcome to another week of Kaizen. In today's post, lets see what is ZRC (Zoho Request Client) and how we can use ZRC methods in Client Script to get inputs from a Salesperson and update the Lead status with a single button click. In this
                                                            • 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


                                                            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

                                                                                                              • Using Zoho Forms vs Zoho Survey

                                                                                                                Hello - I'm looking for advice on whether to use Zoho Survey or Zoho Forms for our small non-profit. We have a Zoho One subscription, so have access to both. The main use case at the moment is application forms for our professional development programs.
                                                                                                              • Kaizen #200 - Answering Your Questions | Authentication using Zoho CRM Python SDK

                                                                                                                We’re incredibly excited to bring you the 200th post in our Kaizen series! This journey has been as much about listening as it has been about sharing. And today, we’re making both count. Over the past few weeks, we’ve collected your feedback through the
                                                                                                              • Zoho CRM sync

                                                                                                                Just wondering if the plan is for the Zoho CRM implementation to always be just an import and not a sync? At the very least, a one-way sync that kept the data in Tables up-to-date would increase the amount of usecases, but ideally the option to two-way
                                                                                                              • Add serial number in print page list

                                                                                                                How can i add serial number in print page for every entries?
                                                                                                              • Trying to Delete records from Creator not found in CRM

                                                                                                                Hi, In the following script, I am trying to delete records from Creator not found in CRM, but I am getting the error message "Error at line number: 55 Improper Statement Error might be due to missing ';' at end of the line or incomplete expression". Please
                                                                                                              • REST API for Branch and Budget

                                                                                                                Hi Team, Can you please guide me with the appropriate rest API documentation for fetching Branch and Budget details?
                                                                                                              • STOP FRAUDULENT TRANSACTION IMMEDIATELY

                                                                                                                I DID NOT AUTHORIZE THIS TRANSACTION OR RENEWAL, STOP IMMEDIATELY CHARGING MY CARD I CAN NOT CONTACT SUPPORT, NO ONE IS AVAILABLE ON CHAT PAYMENT ID RPCW2003260759193
                                                                                                              • Best way to handle a credit card download fiasco

                                                                                                                Hi there, hoping that someone knowledgable with book keeping can give me the answer here. One of my credit cards has been integrated with Zoho books and we have been downloading transactions with no issue. The credit card got compromised and was used
                                                                                                              • When Opening Zoho Mail I always get a Tab with an error (See attached image)

                                                                                                                Everytime I open Zoho mail I get this. It is trying to open a deleted email. I already tried going to Settings > While Starting up Changed that option back and forth but this persists. Its annoying. Other than that I love this. Any help would be appreciated.
                                                                                                              • Pre-Registration - Suggestion

                                                                                                                Suggest to add a Pre-Registration feature for non-scheduled events. Scenario is that we have a training academy and would like to collect pre-registrants prior to an actual scheduled event so we can use this as a basis for demand management and scheduling of new events for those expressing interest.
                                                                                                              • Not all messages showing in folders in iOS mail.app

                                                                                                                I have a bunch of emails filed in various folders. Those folders are showing all of the emails in them on Zoho.com and in the Zoho Mail app on my iPhone and my iPad. They also all show up fine in Mail.app on my Mac. The problem is that certain (not all)
                                                                                                              • Where do the 'Archived' mails go?

                                                                                                                I have hit 'Archive' on quite some mails I still needed, but didn't want in my inbox anymore. I obviously thought 'Archive' is not the same as 'Delete', since they don't even pass the trash folder this way, and right now I was looking for one of those
                                                                                                              • Signature image size changing on replied emails

                                                                                                                Hi, Sometimes I see the size of the image I use as signature changes when I open replied emails. Do you know why is this happening? It doesn't seem to happen when I send emails to Gmail though. Signature should look like in attachment "Signature_normal.jpg"
                                                                                                              • Não consigo enviar emails. "Razão:533"

                                                                                                                Não consigo enviar emails. "Razão: 533 Relaying disallowed. Invalid Domain" aparece e me impede de enviar emails... Como resolver o problema?
                                                                                                              • Error when setting up IMAP access in Gmail

                                                                                                                Hi I set up POP3 access via Gmail for my Zoho-hosted domain email. I just tried to change it to IMAP access, however when inputting the settings I received the following error message from Gmail "Missing +OK response upon connecting to the server: * OK
                                                                                                              • Zoholics Europe 2025: Unlocking the Power of Zoho CRM : A Hands-On Workshop

                                                                                                                Why should you attend? At Zoholics Europe 2025, Zoho’s official user conference, you’ll have the opportunity to connect directly with experts and explore powerful tools that help businesses elevate customer experiences. Be sure to attend one of the most
                                                                                                              • How do I delte a mailbox alias

                                                                                                                Hi everyome, I have created a mailbox alias on one of my accounts, but I can't figure out how to delete it again. When I go into the control panel on my super-admin account and click on user details and the settings for the user, I can see the mailbox
                                                                                                              • Allowing vendors to Upload Purchase Invoices against Purchase Order

                                                                                                                Work Flow: Once Project is executed, We send Purchase order to every Vendors asking them to Share the invoice against the same. Most of the time Vendors Send invoices through Mails but our Finance Team miss to book those Purchase Invoices in Zoho Books.
                                                                                                              • Deluge - forward incoming email with original attachments and content but new subject

                                                                                                                I'm working in ZohoMail with a 10GB paid account. Using a filter and a custom function, I can send a new mail with the original email content and a new subject, but I'm struggling to find how to attach the original attachment to a new mail - or even to
                                                                                                              • Error: "The conversation window has expired." on WhatsApp

                                                                                                                Hello, I would like to know why this error appears in the messages within WhatsApp from the CRM: "The conversation window has expired." The question arises because a potential client sent us a message at 11:00 PM and we are responding the next day at
                                                                                                              • How to Sync Desk KB and Sales IQ KB?

                                                                                                                Hi, we have just started to use Desk and are using the SalesIQ Chat. Ideally I'd like to use the 'FAQ' feature on chat (which uses SalesIQ KB) and also allow our customers to use the self-service KB that comes with Desk. Unfortunately they are two different
                                                                                                              • Need help! Unable to send message; Reason: 554 5.1.8 Email Outgoing Blocked.

                                                                                                                Hi Zoho team My account name is senpai.atelier, it’s been few days I can’t send Emails with the same error messages. I’ve raised the issue to support@zohomail.com that doesn’t respond to my query. I wonder if you may help troubleshooting soon.
                                                                                                              • Zoho arrives to Spam on all Microsoft Accounts (Outlook, Hotmail, Microsoft 365)

                                                                                                                I believe this is a very serious issue. All my email accounts in Zoho arrives straight to SPAM. Thing is, a lot of clients rely on email arriving to Inbox, specially on Microsoft Accounts since it is used a lot both for business and personal email sending.
                                                                                                              • Registeration

                                                                                                                I just added the TXT code. What next?
                                                                                                              • Cannot receive password protected zip files

                                                                                                                Hello, I cannot received a password protected attachments. Also all my members in the same domain has the same problems. Can you please help me? Best regrads
                                                                                                              • ERROR 554 5.1.8 Sender Address Blocked code(554)

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

                                                                                                                Our email are stopped to receive outsider email. i have checked the DSN, it's pointed to ZOho mail. Can anyone help me to fix this issue urgently? Thanks
                                                                                                              • send email from web application

                                                                                                                Hello, I'm experiencing an issue with sending emails from my web application. Here are the configuration parameters currently in use: ini Copia Modifica quarkus.mailer.from=noreply.sedis@mondonovo.net quarkus.mailer.host=smtp.zoho.com quarkus.mailer.port=465
                                                                                                              • Custom CSS in Zoho Form

                                                                                                                Hi, Please let me know, how we can add custom css in Zoho Form.  Thanks
                                                                                                              • Zoho Recruit

                                                                                                                Getting this issue
                                                                                                              • Missing Email

                                                                                                                We recently started using ZohoMail we migrated our users from google workspaces. The migration process seemed to have gone smoothly however not all emails are showing in the inbox folder. For example: If I sort the inbox folder from old to new. (Oldest
                                                                                                              • Client Script Quality of Life Improvements #1

                                                                                                                Since I'm doing quite a bit of client scripting, I wanted to advise the Zoho Dev teams about some items I have found in client script that could be improved upon. A lot of these are minor, but I feel are important none-the-less. Show Error on Subform
                                                                                                              • Account blocked after accessing via VPN

                                                                                                                All my accounts are blocked after using a VPN. I have submitted multiple support tickets without response. It’s critical that my email be restored asap Can you please provide a way to unblock my accounts
                                                                                                              • Exchange Rate Updates

                                                                                                                Hi, It would be great that when you work with multiple currencies, the exchange rate updates automagically every day (as seen on Zoho Books) or at least that when you create/update an opportunity the exchange rate could be manually updated, or maybe both!
                                                                                                              • Courses without signup

                                                                                                                Can I create "real" public courses where no signup is needed?
                                                                                                              • Espace Sandbox – Votre environnement de test sécurisé dans Zoho Projects

                                                                                                                Zoho Projects propose un sandbox sécurisé pour tester des configurations, des personnalisations et des modifications sans compromettre les données en production. Note : Disponible avec le plan Enterprise le plus récent basé sur les utilisateurs (y compris
                                                                                                              • Descargas en learn

                                                                                                                Buenos dias, yo en mis cursos para no tener que cargar los archivos que utilizare en las lecciones decidi utilizar la opcion de bloques para añadir un enlace de mi workdrive con el video que deseo para que sea todo mas organizado, pero hay un problema.
                                                                                                              • Mail delivery

                                                                                                                I initially had a problem sending any outgoing mail and was able to fix it on my own, given Zoho support never got back to me. However, despite being able to send emails now, none of my mail to different Gmail addresses are arriving, and they are not
                                                                                                              • Mermaid Support & Zoho Learn

                                                                                                                Hi Zoho Team, I’m currently working with Zoho Learn and was wondering if there’s any way to add support for Mermaid syntax to create flowcharts, sequence diagrams, and other visual elements within articles or lessons. Mermaid is widely used in technical
                                                                                                              • Blocked due to VPN

                                                                                                                Hi My account outgoing mails and IMAP access have been blocked due to using a vpn being interpreted as suspicious logins. I’ve tried to mail support but not sure if this is also blocked. This is extremely frustrating as I’m using a vpn because I’m travelling
                                                                                                              • Next Page