如何从Zoho Catalyst向Zoho CRM同步数据?API调用与认证咨询
Zoho Catalyst 到 Zoho CRM API 认证问题解决方案
优先用 Server-to-Server OAuth 认证(后端场景最优解)
Catalyst 函数属于后端服务,无需用户交互,Server-to-Server OAuth 是最稳定的认证方式,彻底规避授权码模式中 refresh token 过期的问题:
- 登录 Zoho 开发者控制台,创建 Server-to-Server 类型应用,获取
client_id、client_secret - 配置权限范围(scope):根据同步需求选择对应权限,比如同步所有模块用
ZohoCRM.modules.ALL,仅同步联系人用ZohoCRM.contacts.ALL,确保权限覆盖读写操作 - 在 Catalyst 函数中调用认证接口获取 access token,同时用 Catalyst 缓存服务缓存 token(有效期1小时,建议缓存50分钟避免过期)
检查权限与应用配置的常见坑
- 确认 Server-to-Server 应用已关联目标 CRM 组织,且权限已被 CRM 管理员批准(企业版 CRM 需手动授权)
- 区域匹配:若 CRM 部署在非默认区域(如欧盟、澳大利亚),需将认证和 API 域名替换为对应区域地址,比如认证用
accounts.zoho.eu,API 用www.zohoapis.eu
直接用 Catalyst 内置的 Zoho CRM 集成
Catalyst 官方 SDK 已集成 Zoho 服务,无需手动处理认证逻辑:
- 以 Node.js 为例,安装
zcatalyst-sdk-node后,直接通过 SDK 调用 CRM 接口,SDK 会自动管理 access token 的获取与刷新:
const catalyst = require('zcatalyst-sdk-node'); module.exports = async (context) => { const app = catalyst.initialize(context); const crm = app.crm(); // 调用CRM接口,示例:获取联系人列表 const contacts = await crm.getModuleRecords('Contacts'); return contacts; };
旧授权码模式的修复(若必须使用)
如果你之前用授权码模式,需确保:
- 将 refresh token 存储在 Catalyst 数据表中(禁止硬编码)
- 实现自动刷新逻辑:在 access token 过期前,用 refresh token 调用
/oauth/v2/token接口获取新的 access token,同时更新存储的 refresh token(部分场景下 refresh token 会更新)
代码示例(Server-to-Server 认证逻辑)
const axios = require('axios'); const catalyst = require('zcatalyst-sdk-node'); module.exports = async (context) => { const app = catalyst.initialize(context); const cache = app.cache(); const ZOHO_REGION = 'com'; // 根据你的区域修改,如eu、au // 先从缓存读取token let accessToken = await cache.get('zoho_crm_token'); if (!accessToken) { // 请求新的token const tokenRes = await axios.post(`https://accounts.zoho.${ZOHO_REGION}/oauth/v2/token`, { grant_type: 'client_credentials', client_id: '你的ClientID', client_secret: '你的ClientSecret', scope: 'ZohoCRM.modules.ALL' }); accessToken = tokenRes.data.access_token; // 缓存50分钟(提前10分钟刷新) await cache.set('zoho_crm_token', accessToken, 3000); } // 调用CRM API示例:创建联系人 const createRes = await axios.post(`https://www.zohoapis.${ZOHO_REGION}/crm/v2/Contacts`, { data: [{ Last_Name: 'Test', Email: 'test@example.com' }] }, { headers: { 'Authorization': `Zoho-oauthtoken ${accessToken}` } }); return createRes.data; };
内容的提问来源于stack exchange,提问作者Alexander Reed
相关产品推荐
相关产品推荐

