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

                                                                                                              • Basic Apple Watch App

                                                                                                                Sometimes I leave my phone behind. I will get push notifications that tickets are updated etc.. It would be nice to at least view them and do a few basic functions. reassign. public reply. private comment.
                                                                                                              • Look and Feel Uniformity

                                                                                                                Someone needs to go through the mobile app and match the look and feel of the web version. For example, it is global standard to highlight private notes as yellow background hue. Desk does that on web, but not on mobile. Mobile also has an odd blue icon
                                                                                                              • Managing two books in Zoho Books

                                                                                                                is it possible to effectively manage two separate books within Zoho Books? My organization is considering handling accounting for two distinct subsidiaries, and we would like to understand the best way to achieve this within the Zoho Books.
                                                                                                              • Display All Custom Buttons Without Dropdown on Record Page

                                                                                                                In my org's workflow we usually want to do some kind of quick action off of an individual record - i.e. of an individual contact, or individual deal. What we have always found a hindrance is the location of all custom buttons being in the drop down on
                                                                                                              • Zoho Sales Team - Extremely Slow Response Times

                                                                                                                Hi everyone, Has anyone else experienced unusually slow response times from Zoho’s sales team? I sent an email last night, and it’s been nearly 24 hours with no reply. While I understand delays can happen, this seems longer than expected for a sales inquiry.
                                                                                                              • Yodlee Bank Feeds

                                                                                                                I'm well aware of the many bank feed issues out there that haven't been resolved, but I'm looking for information on Rules in relation to bank feeds. U.S based, Bank of America user and prior to Yodlee all of my banking feeds and Rules worked seamlessly.
                                                                                                              • Unable to create custom function

                                                                                                                Unable to create custom function - Please check the screenshot for the details HERE IS THE FUNCTION!! try { // 1. Fetch the details of the approved Bill using its ID billDetails = zoho.books.getRecordById("Bills", organization.get("organization_id"),
                                                                                                              • Need a feature which can validate PAN from Income Tax Portal

                                                                                                                Hello Zoho, We need a feature which can help us validate PAN which is being entered in AR/AP Profiles to check if it is valid and display the name as per Income Tax so as to get rid of incorrect PAN into the systems. Please do the needful Thanks
                                                                                                              • PAN - Aadhar Link Status

                                                                                                                Can Zohobooks also get latest PAN-Aadhar Linking Status from Income Tax Portal ?
                                                                                                              • Canvas translation

                                                                                                                We want to offer our CRM system to our users in English and Dutch. However, it seems that text in our deal Canvas isn't available for translation through the translation file. The same applies to the field tooltips. They don't appear in the translation
                                                                                                              • Are Cadences visible to anyone with Cadence permission?

                                                                                                                When setting up a new Cadence is it possible to restrict its use to a specific user? How can I prevent users from making modifications to existing Cadences?
                                                                                                              • Show my cost or profit while creating estimate

                                                                                                                Hi, While creating estimate it becomes very important to know exact profit or purchased price of the products at one side just for our reference so we can decide whether we can offer better disc or not .
                                                                                                              • Issue on Upload API and href image URL

                                                                                                                Here is my Full API Code , URL : URL: https://desk.zoho.com/api/v1/uploads/659563000000193003/content Headers* Authorization: 'Zoho-oauthtoken 1000.ed5ce2836bf5ba9b946f5ec9************88e73ff4883a3e9c58ffeb7870' orgId: 7586***** RESPONSE{ "errorCode":
                                                                                                              • Issue when downloading a Mail Merged Zoho Writer Document as .docx

                                                                                                                Hi, We are using within Zoho CRM mailmerge to create documents. This results in a Zoho Writer document. When we try to download as a Microsoft Docx file we get following error: "Word experienced an error trying to open the file. Try these suggestions.
                                                                                                              • 【Zoho CRM】ケイデンス機能のアップデート

                                                                                                                ユーザーの皆さま、こんにちは。コミュニティチームの中野です。 今回は「Zoho CRM アップデート情報」の中から、ケイデンス機能のアップデートをご紹介します。 ケイデンス機能の2つの強化されたことで、適用と解除のタイミングをより柔軟に管理できるようになり、 よりタイムリーで的確なコミュニケーションが実現できるようになりました。 目次: 1. ケイデンスの再開/最初からのやり直し 2. ケイデンスからのデータ解除タイミングの設定 1. ケイデンスの再開/最初からのやり直し 手動削除、完了、または適用解除条件が満たされた場合など、以前に適用解除されたデータをケイデンスに再適用できるようになりました。
                                                                                                              • Anyone get the OpenAI API to work in Zoho Meeting?

                                                                                                                Has anyone been able to get the OpenAI API to work in generating meeting summaries? I have been trying, but I get an error that says "OpenAI key notes request rate exceeded. Please try again later or upgrade your open AI account." I contacted Zoho support
                                                                                                              • Push Notifications Customization

                                                                                                                There is no way to customize the notifications we get. I would like to be able to get notifications based on if they are assigned directly to me, my team, my department, or perhaps tickets that match a specific criteria (a contact or account is a VIP
                                                                                                              • Announcing Early Access to the next generation of Zoho Desk UI

                                                                                                                Customer service is one of the categories where efficiency and quality of service have to run in parallel, and your team's experience with their helpdesk goes a long way ensuring these aspects are uncompromised. Introducing DOT Design for Zoho Desk -
                                                                                                              • Editing the record in report

                                                                                                                I have a use-case as below- User creates a assessment record by filling some fields. User assigns that record to portal user by using Assigned To dropdown (Assigned To is Users field in form with choices as customers). I have set the record owner of form
                                                                                                              • Can we have Bills of Material Module ?

                                                                                                                Can we have Bills of Material Module ?
                                                                                                              • Main Ticket Page Customization

                                                                                                                We do not love the ticket list page (right after clicking Tickets menu item) would like options to customize it.
                                                                                                              • Agent Collision Missing from Mobile App

                                                                                                                Please add Agent Collision capabilities to the mobile app.
                                                                                                              • Zia Sentiment and Functionality on Mobile

                                                                                                                Please add Zia sentiment and generative responses to the mobile app. It would be nice to see the ticket sentiment and generate a response back to a user using Zia on my iPhone
                                                                                                              • View Account Attachments on iOS

                                                                                                                Please allow us to view account attachments on the mobile iOS app!
                                                                                                              • How do I run a PnL by Sales Person?

                                                                                                                I am trying to run a PnL by sales person but am not seeing the option do so. All I need to know (per salesperson) is revenue, cost of goods, gross profit.
                                                                                                              • View Contracts and Support Plans on Mobile

                                                                                                                We would like to be able to see contracts and support plans from the mobile app on iOS!
                                                                                                              • App like Miro

                                                                                                                Hi all, is there a way to have a interactive whiteboard like in Miro? We want to visualize our processes and workflows in an easy way.
                                                                                                              • Loan repayment Entry

                                                                                                                While receiving loan, i does following steps in My Zoho books. 1. Create "Loan & Advance " Account as Parent Account under Long Term Liabilities. 2. Create another account For Example "Mr. ABC's Loan as Child account under the parent account. Now: In
                                                                                                              • Quotes module send email reverted back into 2022??

                                                                                                                Our Zoho CRM PLUS quotes, sales orders, invoice modules is showing us an email composer from 2022. We cannot send emails and its been a real pain. I tried clicking the new version over there but it doesnt seem to do anything. Any help is welcome. th
                                                                                                              • Workflow Condition - how do check that a date / time value is in the past?

                                                                                                                Hello, I'm got a workflow that runs a function when records reach their 'Effective Date / Time', but sometimes records are created after the 'Effective Date / Time' so I have another workflow that checks for records which needs to be processed immediately.
                                                                                                              • Pre filling SignForm field values by URL field alias's in Zoho Sign

                                                                                                                Hi, Does anyone know if it's possible to pre fill the field values of the SignForm by using field alias's like you can in Zoho forms? To be more specific, I want to be able to change the SignForm URL to include some information like this: Before : https://sign.zoho.eu/signform?form_link=234b4d535f495623920c288fc8538cb9e6db03bbfd44499b63f3e5c48daf78f44bc47f333e2f5072cc1ee74b7332fe18b25c93fab10cb6243278d49c67eacbf30bbe5b6e1cc8c6b2#/
                                                                                                              • How to Split Payout in Zoho Books (Without Using Journal?)

                                                                                                                Hi, I'm trying to properly record payouts in Zoho Books. The issue is that each payout is a combination of sales and expenses (fees). When I try to categorise the payout transaction from the Banking tab, I can only split the transaction using income-type
                                                                                                              • Payment Schedule

                                                                                                                Please add the ability to create a payment schedule. The other options, like retainer invoices or two invoices, do not work for the customer.  We invoice a client and need to be able to show them everything they owe in one invoice, and when each payment
                                                                                                              • Which pricing system do you think would work best for us?

                                                                                                                Imagine we’re selling strictly wholesale. We’d rather not publish unit prices; instead, we quote customers case-by-case. To spur larger orders, we’re considering a transparent discount ladder—say: $0 – $999: 0 % $1,000 – $1,999: 5 % $2,000 – $4,999: 10
                                                                                                              • Pushing to Shipstation from Zoho

                                                                                                                I know there are four triggers in Flow for integration with Shiptation when something happens in Shipstation. What options do I have, if any, for pushing data TO Shipstation from Zoho?
                                                                                                              • Integration with ShipStation

                                                                                                                 Any plans to integrate flow with Ship station? My scenario: When a sales order is fully picked order details get pushed to Ship station so shipping label can be created.  Ideally then tracking number would be pushed back to order.  Thanks
                                                                                                              • Can't Remove Payment Gateway

                                                                                                                I am getting the error "Settings cannot be cleared as some of the transactions are still in progress." when trying to remove the PayGate payment gateway which I was unable to get working. I am now using paystack and I want to remove Paygate.
                                                                                                              • Sync specific Zoho Inventory Warehouses to Zoho Commerce

                                                                                                                As said in the title, we would want to only sync stock from one warehouse of Zoho Inventory to the Zoho Commerce item stock. We have a 2 warehouses in different countries and the way that Zoho Commerce works (It takes stock from ALL WAREHOUSES EVERYWHERE
                                                                                                              • Weekly Tips : Automatically clean clutter with Junk cleanup interval

                                                                                                                If you regularly receive many unwanted or spam emails, your Spam folder can quickly fill up and start taking up valuable storage space in your Zoho Mail account. Instead of manually clearing it every few days, you might find it helpful to enable automatic
                                                                                                              • Any solution for getting portal users list in deluge or in widget

                                                                                                                Hi Team, Has anyone able to find the solution to get portal users list in deluge or in zoho creator widgets? Thanks, Payal
                                                                                                              • Next Page