API上传说明文档

API 上传方式仅适合上传超过 10 个 CS 字段的客户使用。10 个字段之内的客户推荐使用 SDK 方式进行上传。

接口说明

为了接口安全,我们会为您分配三个认证字段:

  • projectKeyId: 由 GrowingIO 分配给您的项目 ID. 使用管理员及以上权限登录在项目管理中可以看到项目ID. 也简称为 ai
  • secretKey: 由 GrowingIO 分配给您的项目的传输用私钥
  • publicKey: 由 GrowingIO 分配给您的项目的传输用公钥

以上三个字段,可在「项目管理-项目配置-CS 配置」页面中查看。此key分配后,联调测试通过后才会正式环境上启用。

接口联调测试

请使用地址:testdata.growingio.com 替换文档中 data.growingio.com 来进行联调测试。

用户属性数据上传接口

协议:HTTPS 方法:POST URL:https://data.growingio.com/saas/{projectKeyId}/user?auth={auth_token, 算法参见后续文档}

Headers:

  • Access-Token = publicKey
  • Content-Type = application/json

数据:

字段名 类型 说明
cs1 string 唯一标示一个注册用户的ID
cs2 string Saas企业建议传递客户公司的唯一ID
cs3 string 自定义,上传后对数据生效
cs4 string 自定义,上传后对数据生效
cs5 string 自定义,上传后对数据生效
cs6 string 自定义,上传后对数据生效
cs7 string 自定义,上传后对数据生效
cs8 string 自定义,上传后对数据生效
cs9 string 自定义,上传后对数据生效
cs10 string 自定义,上传后对数据生效
cs11 double 自定义,覆盖历史数据生效
cs12 double 自定义,覆盖历史数据生效
cs13 double 自定义,覆盖历史数据生效
cs14 double 自定义,覆盖历史数据生效
cs15 double 自定义,覆盖历史数据生效
cs16 string 自定义,覆盖历史数据生效
cs17 string 自定义,覆盖历史数据生效
cs18 string 自定义,覆盖历史数据生效
cs19 string 自定义,覆盖历史数据生效
cs20 string 自定义,覆盖历史数据生效

备注:

  • 上传后对数据生效:不会覆盖历史数据,当用历史数据进行分析时,CS 字段的值仍保留历史时间的值 举例:在 2014-2015 年,CS3 的值为 A,当前值为 B。当对 2014-2015 年的数据进行分析时,CS3值为A

  • 覆盖历史数据生效:会以当前的字段值覆盖历史上的所有值,不保留历史数据

  • 对于未登陆用户(访客用户),请不要上传用户 ID(例如:userid:0),以及其他属性字段

  • 对于注册用户,请不要漏传某些字段。 举例:cs3字段代表手机号码,一部分用户没有手机号码。请上传「无」「-」...等方便您自己辨识意义的字符

格式: 一次上传多条记录: 举例:

[
  {
    "cs1": "user_id:12345",
    "cs2": "tenant_id:67890",
    "cs3": "rep_id:13579"
  },
  {
    "cs1": "user_id:12346",
    "cs2": "tenant_id:67891",
    "cs3": "rep_id:13580"
  },
  ...
]

一次上传单条记录: 举例:

{
  "cs1": "user_id:12346",
  "cs2": "tenant_id:67891",
  "cs3": "rep_id:13580"
}

数据大小:单个请求上传的数据包总大小不超过1MB,内含json对象不超过100个

返回值(status code): 成功:

  • 200, message = “Data uploaded.”

失败:

  • 400 message = “Authentication failed.” message = “Request too large.” message = “Project not found.”

公司属性数据上传接口(SaaS 企业适用)

您可以使用该接口上传相关的公司和用户属性,并且在 SDK 中上传cs1,cs2字段。这样我们就能够将您上传的数据进行绑定。运用这样的方式能够大大提高您的上传效率,减少您发送的数据量。

协议:HTTPS 方法:POST URL:https://data.growingio.com/saas/{projectKeyId}/company?auth={auth_token, 算法参见后续文档}

Headers: Access-Token = publicKey Content-Type = application/json 数据:

字段名 类型 说明
cs2 string Saas企业建议传递客户公司的唯一ID
cs3 string 自定义,上传后对数据生效
cs4 string 自定义,上传后对数据生效
cs5 string 自定义,上传后对数据生效
cs6 string 自定义,上传后对数据生效
cs7 string 自定义,上传后对数据生效
cs8 string 自定义,上传后对数据生效
cs9 string 自定义,上传后对数据生效
cs10 string 自定义,上传后对数据生效
cs11 double 自定义,覆盖历史数据生效
cs12 double 自定义,覆盖历史数据生效
cs13 double 自定义,覆盖历史数据生效
cs14 double 自定义,覆盖历史数据生效
cs15 double 自定义,覆盖历史数据生效
cs16 string 自定义,覆盖历史数据生效
cs17 string 自定义,覆盖历史数据生效
cs18 string 自定义,覆盖历史数据生效
cs19 string 自定义,覆盖历史数据生效
cs20 string 自定义,覆盖历史数据生效

格式:序列化的json对象 举例:

[
  {
    "cs2": "tenant_id:67890",
    "cs3": "rep_id:13579",
  },
  {
    "cs2": "tenant_id:67891",
    "cs3": "rep_id:13580",
  },
  ...
]

也支持单个json对象,例如

{
  "cs2": "tenant_id:67891",
  "cs3": "rep_id:13580",
}

auth_token的计算方式

  • projectKeyId: 由GrowingIO分配给您的项目ID

  • secretKey:由GrowingIO分配给您的私钥

  • keyArray:

    • 对于一次上传多条记录时,取多条数据中的每个对象的主键的值(User接口为CS1,Company接口为CS2),并用逗号连接成为一个字符串
    • 对于一次上传单条记录时,取该对象的主键的值(User接口为CS1,Company接口为CS2)

Java:

public String authToken(String projectKeyId, String secretKey, String keyArray) throws Exception {
    String message = "ai="+projectKeyId+"&cs="+keyArray;
    Mac hmac = Mac.getInstance("HmacSHA256");
    hmac.init(new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256"));
    byte[] signature = hmac.doFinal(message.getBytes("UTF-8"));
    return Hex.encodeHexString(signature);
}

Scala:

def authToken(projectKeyId: String, secretKey: String, keyArray: String): String = {
  val message = s"ai=$projectKeyId&cs=$keyArray"
  val hmac: Mac = Mac.getInstance("HmacSHA256")
  hmac.init(new SecretKeySpec(secretKey.getBytes("UTF-8"), "HmacSHA256"))
  val signature = hmac.doFinal(message.getBytes("UTF-8"))
  Hex.encodeHexString(signature)
}

Python:

#coding:utf-8 
import hashlib
import hmac

def authToken(projectKeyId,secretKey,keyArray):
    message = ("ai=" + projectKeyId + "&cs=" + keyArray).encode('utf-8')
    signature = hmac.new(bytes(secretKey.encode('utf-8')), bytes(message), digestmod=hashlib.sha256).hexdigest()
    return signature

PHP:

function authToken($projectKeyId, $secretKey, $keyArray)
{
   $message="ai=".$projectKeyId."&cs=".$keyArray;
   return hash_hmac('sha256',$message, $secretKey, false);
}

举例:对于上述的json

{
  "cs1": "user_id:12346",
  "cs2": "tenant_id:67891",
  "cs3": "rep_id:13580"
}

对应keyArray 的值是user_id:12346

用户属性字段的新增和修改说明

以下情况下,您需要在「项目管理-CS 配置」页面进行更新,确保您 CS 数据的准确性: 1. 新增任何一个CS字段 2. 对任何一个CS字段的名称和意义进行修改 3. 对CS字段的值进行重新传输

注:当您对新应用上传所属项目下的相同字段时,不需要重新进行配置。

results matching ""

    No results matching ""