You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 05:50:05