InfusionSoft旧版xml-rpc API访问令牌经常过期

时间:2017-05-02 14:00:56

标签: api google-apps-script access-token xml-rpc infusionsoft

我正在使用InfusionSoft的leagacy xml-rpc API来更新联系人的一些联系方式,如电子邮件和选择退出原因等。

我正在使用谷歌应用程序脚本来实现这一点,因为带有contact-id的数据可作为列表提供。但是,它是一个较大项目的一部分,从其他来源检索这些联系人。

我经常看到我收到响应401(未授权)消息以响应正在发出的请求。它需要重新生成访问令牌以通过它来获取这些请求。

有没有办法,有永不过期的令牌或一些最大时间限制?因为客户端需要经常重新生成令牌以更新数据。

脚本需要每天为列表中可用的所有新联系人运行,并且不涉及其他用户。

目前,我正在分享检索联系人详细信息的示例代码,并且在同一天生成新令牌时工作正常。

function infusionTry()
{
  var KEY = APIKEY;
  var INF_TOKEN = ACCESS_TOKEN;
  var url = "https://api.infusionsoft.com/crm/xmlrpc/v1?access_token=" + INF_TOKEN;
  var payload = HtmlService.createTemplateFromFile("ReqData").getRawContent();
  payload = payload.replace("{privateKey}",KEY);
  payload = payload.replace("{contactIDNumber}",666486);
  var params = {
    method: "post",
    contentType : "application/xml",
    payload : payload,    
    muteHttpExceptions: true
  };
  var resp = UrlFetchApp.fetch(url, params);
  Logger.log(resp.getResponseCode());
  Logger.log(resp.getContentText());
}

感谢。

1 个答案:

答案 0 :(得分:1)

在处理旧版身份验证时,有一个不同的请求URL可以连接到API。

您引用的网址:

var url = "https://api.infusionsoft.com/crm/xmlrpc/v1?access_token=" + INF_TOKEN;

用于通过OAuth访问API。

将旧版API与Infusionsoft API密钥一起使用时,您应该调用以下网址:

var url = "https://APPNAME.infusionsoft.com:443/api/xmlrpc";

其中APPNAME是您帐户的Infusionsoft应用程序名称(子域名)。

Infusionsoft API密钥不会过期(但可能会根据需要由Infusionsoft内部的用户进行更改。)

关于OAuth流程,这里有更多信息。

访问令牌每24小时到期一次。

该过程将为您提供两个令牌。

刷新令牌有效期为90天,用于生成访问令牌。

Infusionsoft刚刚宣布刷新令牌将每90天到期,这意味着如果您想跳过手动授权重置令牌,则必须更频繁地刷新脚本。

访问令牌有效期为24小时,用于进行API调用。

所以整个过程是:

  1. 用户必须提供初始许可。 (用户实际上会登录并确认权限。)
  2. 您的脚本应该安全地存储“长期”(可能在数据库中)的刷新令牌,并存储/缓存“短期”/立即(可能在会话中)使用的访问令牌。
  3. 在访问令牌过期之前,您的脚本需要使用刷新令牌调用Infusionsoft,Infusionsoft将使用新的刷新令牌和新的访问令牌进行响应。进行此调用后,OLD刷新令牌和访问令牌都将变为无效,无法再次使用。
  4. 从第2步开始重复。