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




                                    Zoho Desk Resources

                                    • Desk Community Learning Series


                                    • Digest


                                    • Functions


                                    • Meetups


                                    • Kbase


                                    • Resources


                                    • Glossary


                                    • Desk Marketplace


                                    • MVP Corner


                                    • Word of the Day



                                        Zoho Marketing Automation


                                                Manage your brands on social media



                                                      Zoho TeamInbox Resources

                                                        Zoho DataPrep Resources



                                                          Zoho CRM Plus Resources

                                                            Zoho Books Resources


                                                              Zoho Subscriptions Resources

                                                                Zoho Projects Resources


                                                                  Zoho Sprints Resources


                                                                    Qntrl Resources


                                                                      Zoho Creator Resources



                                                                          Zoho Campaigns Resources


                                                                            Zoho CRM Resources

                                                                            • CRM Community Learning Series

                                                                              CRM Community Learning Series


                                                                            • Kaizen

                                                                              Kaizen

                                                                            • Functions

                                                                              Functions

                                                                            • Meetups

                                                                              Meetups

                                                                            • Kbase

                                                                              Kbase

                                                                            • Resources

                                                                              Resources

                                                                            • Digest

                                                                              Digest

                                                                            • CRM Marketplace

                                                                              CRM Marketplace

                                                                            • MVP Corner

                                                                              MVP Corner





                                                                                Design. Discuss. Deliver.

                                                                                Create visually engaging stories with Zoho Show.

                                                                                Get Started Now


                                                                                  Zoho Show Resources


                                                                                    Zoho Writer Writer

                                                                                    Get Started. Write Away!

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

                                                                                      Zoho CRM コンテンツ






                                                                                        Nederlandse Hulpbronnen


                                                                                            ご検討中の方





                                                                                                  • Recent Topics

                                                                                                  • Lookup Fields not Converting

                                                                                                    I manage holiday properties. I have a lookup to the Accounts (Properties) in the Leads module. The lookup is connected to the property address field. When I convert it the lookup field does not update in Deals, although the property address does. There
                                                                                                  • 2024: A Year of Transformation with Zoho Forms

                                                                                                    As we close the curtain on another exciting year, it’s time to reflect on the strides Zoho Forms has taken in 2024. From empowering businesses with advanced tools to simplifying workflows and enhancing user experiences, our updates this year were all
                                                                                                  • Stop selling out of stock Items.

                                                                                                    Hi I have been using Zohobooks for a around 8 month now. I am not involved in selling process but my staff cant stop selling product which they do not hold in stock, this is a big headache for me as physical count never matches what is shown on the books. 
                                                                                                  • Bigin API Token Request ("invalid_client")

                                                                                                    Hi people, I tried to connect to the API without success, I've read all of the documentation multiple time and tried just about everything. I tried to do it with Python Request module and with Postman, passing the information through both the URL parameter
                                                                                                  • Customer Happiness not clickable when using API

                                                                                                    Is there a way to automatically add the Customer Feedback links when generating email drafts via the API? Currently, the feedback links are only added when generating an email draft using the UI. I tried using the endpoint described in https://desk.zoho.com/DeskAPIDocument#CustomerFeedback#CustomerFeedback_Getthecustomerfeedbackplaceholderlink
                                                                                                  • Restricting Calendar View to Working Hours

                                                                                                    Hi: I'm trying to implement a calendar which displays all of my customer appointments.  Currently, the calendar shows all 24 hours of the day.  Is there a way to restrict the hours to simply the times my business is open? Thanks!
                                                                                                  • Send To Zoho Sign not Showing

                                                                                                    The button send to Zoho sign is not showing on my Zoho CRM . Is there additional steps I need to take after installing Zoho Sign to CRM ?
                                                                                                  • How to Get An Image's URL once it's uploaded to library?

                                                                                                    I manage to find URLs to the images I uploaded to my library, but after a day, it seems the links stop working like its only temporary. Where can I find the ACTUAL solid URL for my images that I upload to my Library so I can use them for my custom template / HTML coded template? Thanks, Mac
                                                                                                  • 【Zoho CRM】インポート機能のアップデート:既存データへのタグ追加が可能に!

                                                                                                    ユーザーの皆さま、こんにちは。コミュニティチームの藤澤です。 今回は「Zoho CRM アップデート情報」の中のインポート機能のアップデートをご紹介します。 Zoho CRMのタグは、データを効率的に分類、認識するためのラベルです。 タグ付けは次の3つの方法で行えます: 個別タグ付け:少数のデータを手動でタグ付け 自動化:特定のタイミングで繰り返しタグ付け 一括更新:インポート機能でタグを追加または更新 今回のアップデートでは、インポート時に既存のタグを残したまま、新しいタグの追加、既存タグを置き換えできるようになりました。
                                                                                                  • Bluerprints: How to connect the created record back?

                                                                                                    I've a blueprint which creates another record as part of an 'After' transition. But the two records don't seem to be linked together. If it's not automatic - how do I get the created record ID to link it to the original record? Thanks!
                                                                                                  • Populate a Related List Item based on a Stage

                                                                                                    I would like to know if I can populate a CLOSED DEAL section in a contact that populates only when a Deal (something in the Deal Module) is listed as Closed - Won. I'd like another section that is just called deals, which shows me all other deals that
                                                                                                  • Being able to draw inside a module ?

                                                                                                    I was wondering if anyone know of a solution for this request. We would like to be able to draw directly from one module in the CRM and have it attached to that record. Here is an example. Paul would go to the customer once he as done the measuring, he
                                                                                                  • Holidays

                                                                                                    Hi; For defining Holidays, you need to add logic to handle the year as well as the month & day. We need to be able to enter Holidays for the next year. I need to add a holiday for January 2, 2017, but I can't until January 1st, which is a Sunday and we
                                                                                                  • Delete a department or category

                                                                                                    How do I delete a Department?  Also, how do I delete a Category? This is pretty basic stuff here and it's impossible to find.
                                                                                                  • Remove or hide default views

                                                                                                    I'm looking to only have the views pertinent to my organization.  Is there a way to show only my custom views (or separate them to a different area or something)? If not, this should be a feature as switching from Zendesk we had this option...
                                                                                                  • Analytics Module: Can you move items from one dashboard to another?

                                                                                                    Is there a way to move items from one dashboard to another? I want to rearrange my dashboard now that I know what i'm doing but i don't want to remake my various widgets? Edit: Hey Zoho, This would be a good feature: to be able to move/copy widgets to
                                                                                                  • Copy Widget to another Dashboard

                                                                                                    I can see the option to clone a widget to the same dashboard but is it possible to copy it to another dashboard?
                                                                                                  • Introducing Record Summary: smarter insights at your fingertips

                                                                                                    Hello everyone, Building on the recent launch of Zoho's in-house Zia Large Language Model (Zia LLM)—a major milestone in Zoho CRM’s AI capabilities—we’re excited to introduce the Record Summary feature. This powerful addition makes use of Zia LLM to simplify
                                                                                                  • Suppress "spreadsheet will not be saved" message on published sheet

                                                                                                    I have published a sheet and have one column on that sheet that the user can edit (a dropdown picklist where the user can select the status for each line). Is there a way to suppress the Zoho Sheet message "Any changes made to this published spreadsheet
                                                                                                  • Missing "Email Authentication" tab

                                                                                                    Backstage is alerting users about "Unauthenticated Domains" with a large prompt in the backend. It adds a link to learn more. On this tutorial page, it shows where to find the "Email Authentication" tab in this screenshot. However, in our Backstage, that
                                                                                                  • Show item Cost value on Item screen

                                                                                                    The Item screen shows Accounting Stock and Physical Stock. It would be very helpful if value information could be displayed here as well, for instance Cost Price. Currently, to find the Cost Price (as used for inventory valuations) from inside the item
                                                                                                  • Integration with Moodle

                                                                                                    Greetings, I hope find all doing well and safe. I've recently returned to using Zoho Flow after a break and was hoping to connect my WooCommerce store with Moodle, the world's most widely used learning management system. My goal was to automatically enroll
                                                                                                  • How to Record Loan with interest

                                                                                                    I have received loans from friend he give me like 2 loans so far one is one year repayment and one short, how to properly record his payment, and repayment and give him statement  for each loan he give me 
                                                                                                  • Task status - completed - other options

                                                                                                    I have a dumb question I know i can make custom statuses for the tasks - but is there anyway to make additional "completed" statuses like for instance if i have a task "call back customer" and i leave a vm for them to call back marking it "completed -
                                                                                                  • Task module and related-to field

                                                                                                    In modules other than the Task Module I can add several lookup fields to provide a variety of relationships. In the Task module lookup fields are not available. There is only one "related to" field which I want to use for Company. But I want to relate
                                                                                                  • Add Lookup Field in Tasks Module

                                                                                                    Hello, I have a need to add a Lookup field in addition to the ones that are already there in the Tasks module. I've seen this thread and so understand that the reason lookup fields may not be part of it is that there are already links to the tables (https://help.zoho.com/portal/en/community/topic/custom-fields-on-task-module).
                                                                                                  • migrating from Zoho Invoices (CRM) to Zoho Books

                                                                                                    Good day, I was wondering if there was a easy way to migrate all the quotes and invoices from Zoho Invoices CRM to Zoho Books. We plan to move to using Zoho Books in a few weeks and would like to have all the quotes and invoices from the past 3 years
                                                                                                  • Zoho MA and Custom Module

                                                                                                    I am trying to create a sync between Markting Automation and Zoho CRM. I am mapping a custom module from the CRM. The custom module has email field mobile phone field However I cannot finish the integration since the system keeps asking me for email or
                                                                                                  • When is partial reimbursement going to be launched?

                                                                                                    Hi there. I saw somewhere that the partial reimbursement feature is in the work. What is the update and ETA of that? Our clients and prospects have been asking us and we agree that that is an important feature to have.
                                                                                                  • Year-End Wrap: Declutter Your Inbox Using Email Filters

                                                                                                    Ping!—an email drops in. And another. And another! It's finally that time of the year when your inbox will be bursting with messages from team members, clients, and marketing agents, leaving you feeling overwhelmed and distracted. Sounds familiar? Now
                                                                                                  • Unified Notes View For Seamless Collaboration

                                                                                                    To facilitate better coordination among different departments and team members, the notes added to a record can now be accessed in all its associated records. With this, team members, from customer service representatives to field technicians, can easily
                                                                                                  • Q4 Europe In-person Zoho User Group Meetup: Streamlining Your Business Processes & Introduction to Zoho CRM for Everyone

                                                                                                    Hello Zoho Community, We are excited to announce our upcoming Zoho User Group meetup in Europe! This session is designed to help you streamline your business processes using Zoho CRM, with a special focus on enhancing customer interactions and leveraging
                                                                                                  • Formula fields - Request for dynamic recalculation / proper implementation

                                                                                                    Hi Guys, I have a big problem with Zoho formula fields. They don't recalculate each time the record is viewed - only when a record is edited. Formula fields should be updated dynamically each time a record is retrieved. As an example: I have a formula
                                                                                                  • Items attribute questions

                                                                                                    Many of my items have attributes, such as size and color. How can I add new fields to the "New Items" screen to capture that in my Purchase Orders, Items, and Sales Order pages? I only see these attribute fields when adding an Item Group. Also, on the
                                                                                                  • Organize and Track Phases with Phase Custom Views

                                                                                                    Phase Custom Views let you filter and display phases based on specific criteria. This helps you focus on what’s most relevant for you and your team. Filter phases using criteria such as budget, status, and more. Share views with specific users or teams
                                                                                                  • Record Asset Received as Payment

                                                                                                    How exactly would you account for this in books? For example, I receive a mini computer for a review and I get to keep it after the video is published. Would debit my normal asset account (e.g. Computers) and credit an income account (e.g. Other Income).
                                                                                                  • Invoice Line Item Report

                                                                                                    Is it possible to run an 'Invoice Line Item Report'? The 'Invoice Details Report' shows one row per invoice. I would like one row per Invoice Line Item.
                                                                                                  • Transform Your Customer Support with AI-Powered Chatbots in Zoho SalesIQ

                                                                                                    Ever wondered how some companies seem to have superhuman customer support? Let's uncover their secret! In the digital age, customer expectations are skyrocketing. Did you know that according to McKinsey, 75% of consumers expect a response within five
                                                                                                  • Progressive Invoicing

                                                                                                    Progressing invoicing is needed for many industries. It would be great to see it implemented into Zoho Books as well. Set up and send progress invoices in QuickBooks Desktop (intuit.com)
                                                                                                  • Client Script - mapping data from different module

                                                                                                    Dear ZOHO Team Firstly I need to describe the need - I need to have data from Contacts module based on lookup field - the 5 map limit is not enough for me because I have almost 20 fields to copy So I have decided to make a Customer Script - and from unknown
                                                                                                  • Next Page